报表内强制分页
报表软件中,可以同过主格的设置来做卡片式的报表。但是有时候客户希望能达到下图这种效果:
图1
这种报表看上去比较简单,但是实现的逻辑却比较复杂。
下面我们就看一下这种报表内强制分页的效果是如何实现的:
第一步:
新建一张空白报表。
第二步:
配置数据集
SELECT 雇员.雇员ID,雇员.姓氏,雇员.名字,雇员.出生日期,雇员.地址,雇员.家庭电话 FROM 雇员
浏览数据:
共有11条数据。
第三步:
设计报表
单元格中的内容如下:
A1: =ds1.count(),计算出数据集的条数。
B1: =int(A1)/5+1,跟A4结合起来用,下面再讲解。
A4: =to(1,B1),这里控制字段名换行显示。
B4: =(A4-1)*5
D3: =to(1,5),这里扩展出5列,显示5条记录,如图1.
D4: =ds1.select1(雇员ID,#1==D3+B4))
D5: =ds1.select1(姓氏,雇员ID==D3+B4)
D6: =ds1.select1(名字,#1==D3+B4)
D7: =D5+D6
D8: =ds1.select1(地址,#1==D3+B4)
D9: =ds1.select1(家庭电话,#1==D3+B4)
可能大家对A1,B1,A4当中的内容不太理解,我讲一下我的理解:
(以这张报表为例)
在A1中计算出数据集中的条数为11条,那么B1中的值为(11/5)+1,即3,那么A4中就变成了:=to(1,3),B4会根据A4来扩展,其值分别是0,5,10.
那么,为什么要在B4中写:=(A4-1)*5呢?因为要给雇员ID加上一个过滤条件,即#1==D3+B4
如果B4中的值为0,且D3扩展出来的值分别是1,2,3,4,5(D3的扩展的值是不变的),
那么在D4格中过滤出来的员工ID分别是1,2,3,4,5。
如果B4中的值为5,且D3扩展出来的值分别是1,2,3,4,5(D3的扩展的值是不变的),
那么在D4格中过滤出来的员工ID分别是6,7,8,9,10,以此类推,如下图:
然后将C5,C6,C7,C8,C9的左主格都设置成B4,将A,B两列和第三行的可视属性去掉,再预览报表,如下图: