按段长动态分组报表
教学视频
目标
要实现的效果如下图所示:
上面的例子当中,数据按第一列薪水区段进行分组展示,分段长度默认为1000,这样每个区段的薪水跨度就是1000,然后显示在这个区段里的用户信息。
实现
1.制作基础报表
添加一个包含employee表的数据集,报表中保留两行四列,在相应单元格中绑定employee数据集的相关字段,如下图所示:
将第一行设置为重复表头,以保证在分页时,每一页都可以看到第一行表头信息。
2.定义分组表达式
选择A2单元格,在右侧的属性面板中修改其数据聚合方式为表达式分组,并添加相应表达式,如下图:
A2单元格表达式分组的具体表达式为:"["+((ceil(#/$p1) - 1) * $p1 + 1) + "~" + (ceil(#/$p1)*$p1)+"]",我们来具体解释下这段表达式含义。
表达式 | 含义 |
---|---|
ceil | 一个内置函数,语法:ceil(number),对给定的number数字进行向上取整操作 |
# | 表示当前表达式所在单元格运行时的具体值 |
$p1 | 表示要引用一个名为p1的报表参数,这里的p1参数,就是我们要指定的薪水区段长度。 |
在上面的表达书写时需要注意,+ 和 - 符号前后需要有空格,否则运行可能出现错误。
BaskReport中的表达式也可以写成脚本样式,支持变量定义,因此上述表达式也可以写成下面这样:
var value=ceil(#/$p1);
var prefix="["+((value - 1)*$p1 + 1);
var suffix="~" + (value*$p1)+"]";
return prefix + suffix;
原表达式里的ceil(#/$p1)有两处用到,所以在脚本中我们可以将其提取出来,计算后作为一个变量保存下来,然后在需要的地方以变量引用方式使用即可。所以,理论上来说,对于上面的表达式,使用脚本方式定义性能上是好于使用表达式方式定义的。
3.定义参数
上面的表达式中使用了一个名为p1的报表参数,我们需要在报表中声明。点击报表工具栏上的设置按钮,在弹出窗口的第一个标签页中定义一个名为p1的参数,类型为数据,默认值为1000,如下图所示:
切换到报表的查询表单页签,将工具栏上的名为p1的参数拖到工作区中,设置其标题为分段长度:,并将工具栏上的查询按钮拖到工作区合适位置,如下图:
保存预览报表,就可以看到一个实现了薪水动态分段的显示的报表。