通过动态分页行数实现分栏效果
在实际报表开发中,分栏报表是一种常见且实用的数据展示方式。润乾报表提供了灵活的分栏功能,可以轻松实现各种复杂的分栏需求。
需求
以 demo 数据源中学生表为例,实现男女分栏。

我们可能最先想到的就是使用 valueat()以及 ds.select() 加过滤条件取数。但是当数据量大时可能会影响计算速度并且存在多个班级相同学生 ID 时取数也会出现问题。
实现方法:
使用按行分页中的分页行数动态表达式实现“按逻辑分页”而非“按数量均分”,并且加上分栏的设置即可实现左右分栏的效果。
具体实现步骤:
1、新建报表,添加 sql 数据集:select * from 学生表
2、报表设计如下:

1)增加序号,将 A2 的左主格设置为 B2,A4 的左主格设置为 B4。
2)其中 B3 的表达式为:=if(ds1.count( 性别 ==“男”)<ds1.count(性别 ==“女”),to(1,ds1.count( 性别 ==“女”)-ds1.count(性别 ==“男”)),0)
// 当男生人数小于女生人数时,动态补充空行
3)在报表属性中将分页方式改为按行分页,且设置分页行数表达式为:if(ds1.count( 性别 ==“男”)>ds1.count(性别 ==“女”),ds1.count(性别 ==“男”)+1,ds1.count(性别 ==“女”)),并将分栏数设置为 2。

预览查看效果
当男生人数大于女生人数时

当女生人数大于男生人数时,左侧的男生人数会动态补充空白行。

最后,为了美观可去掉第三行右侧属性中可视选项。

【注意】
1、分页行数表达式中的 ds1.count(性别 ==“男”)+1 是为了将第三行数据算在男生栏部分。否则这里的 0 会显示在女的第一条数据。如果设置隐藏会将男生的第一条数据也隐藏掉。所以这里使用了男生行数 +1。
2、纸张的宽度不能小于报表的宽度。
示例报表点击下载。zip
