复杂报表之分栏报表
分栏报表,就是将数据在页面横向或纵向分成多栏进行显示和打印的报表。可以有效减少纸张浪费,并让报表布局更紧凑、美观。
下面通过实例介绍一下如何实现。
纵向分栏
第一步:报表设计如下图所示
数据来自示例数据库中的订单表。

第二步:设置分栏
点击工具栏的【报表】–【报表属性】-【分页】tab 中的分栏数设置为 2。

第三步:预览效果如下图所示

【注意】
1、纸张的宽度要保证能占下分栏之后的报表宽度。
2、分栏报表中不允许存在隐藏行。
3、如果想每栏都显示报表头,将行属性设置为报表头。
4、第一行的头标题不需要每栏显示且每页显示,行属性设置为头标题即可。
横向分栏
横向分栏功能,是能够将数据记录在水平方向上进行分组排列。
如下图所示:每 3 条数据就换行

方法一:使用 split() 函数
1、报表设计如下:
数据取订单表中的前 50 条数据,方便查看效果。

A4 表达式为:=to(1,int(ceil(ds1.count()/3))) 计算数据应该分几行展现
B4 表达式为:=split(ds1.select( 订单 ID),“,”)(B2+3*(A4-1)) 取所有订单 ID 中的第几条数据。
其中 (B2+3*(A4-1)) 是计算位置的。
C4 表达式为:=ds1.select(货主名称, 订单 ID==B4) 根据前面的订单 ID 取对应的货主名称。
D4 表达式为:=ds1.select(订单金额, 订单 ID==B4) 根据订单 ID 取订单金额。
以上即可实现横向分栏的效果。
方法 2:使用 valueat() 方式
还可以固定设置好表头,然后使用 valueat() 方式实现。如下图所示:

其中 A3 表达式为:=to(1,int(ceil(ds1.count()/3))) 同样是计算数据分多少行展示
B3 表达式为:=valueat(ds1.select( 订单 ID),3A3) 取订单 ID 中取出对应行的记录,按照三倍的规律取对应位置的数据返回。
以此类推,F3 表达式为:=valueat(ds1.select( 订单 ID),3A3+1)
J3 表达式为:=valueat(ds1.select( 订单 ID),3*A3+1)
预览效果为:

方法三:脚本数据集提前整理数据
1、增加脚本数据集,写法如下

数据集预览结果为:

2、报表设计如下:
直接将字段拖拽到单元格即可。

PS:
使用脚本数据集方式可以减少了单元格的二次计算,可以更有效的提升报表的性能。
报表示例:
