按段长动态分组报表

教学视频

目标

要实现的效果如下图所示:

demo

上面的例子当中,数据按第一列薪水区段进行分组展示,分段长度默认为1000,这样每个区段的薪水跨度就是1000,然后显示在这个区段里的用户信息。

实现

1.制作基础报表

添加一个包含employee表的数据集,报表中保留两行四列,在相应单元格中绑定employee数据集的相关字段,如下图所示:

image-20211101144628500

将第一行设置为重复表头,以保证在分页时,每一页都可以看到第一行表头信息。

2.定义分组表达式

选择A2单元格,在右侧的属性面板中修改其数据聚合方式为表达式分组,并添加相应表达式,如下图:

image-20211101144948980

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,如下图所示:

image-20211101150422738

切换到报表的查询表单页签,将工具栏上的名为p1的参数拖到工作区中,设置其标题为分段长度:,并将工具栏上的查询按钮拖到工作区合适位置,如下图:

image-20211101150628560

保存预览报表,就可以看到一个实现了薪水动态分段的显示的报表。

results matching ""

    No results matching ""