通过动态分页行数实现分栏效果

在实际报表开发中,分栏报表是一种常见且实用的数据展示方式。润乾报表提供了灵活的分栏功能,可以轻松实现各种复杂的分栏需求。

需求

以 demo 数据源中学生表为例,实现男女分栏。

1png

我们可能最先想到的就是使用 valueat()以及 ds.select() 加过滤条件取数。但是当数据量大时可能会影响计算速度并且存在多个班级相同学生 ID 时取数也会出现问题。

实现方法:

使用按行分页中的分页行数动态表达式实现“按逻辑分页”而非“按数量均分”,并且加上分栏的设置即可实现左右分栏的效果。

具体实现步骤:

1、新建报表,添加 sql 数据集:select * from 学生表
2、报表设计如下:

2png

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。

6png

预览查看效果

当男生人数大于女生人数时

3png

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

4png

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

5png

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

示例报表点击下载。zip