1. 概述
1.1 预期效果
在文档 按段分组 中,通过「分组>高级>自定义>条件分组」实现了按固定年龄段进行分组汇总,现在我们希望实现数据按不同的段长参数进行动态分组。效果如下图所示:
1.2 实现思路
通过「单元格元素>数据设置」中的「分组>高级>自定义>公式分组」实现。
2. 示例
2.1 数据准备
新建普通报表,新建数据集 ds1,SQL 查询语句为:SELECT 年龄, count(1) as 数量 FROM 员工信息表 group by 年龄 。如下图所示:
注:此 SQL 语句表示从名为「员工信息表」的数据库表中选择年龄,并计算每个年龄对应的员工数量。
2.2 报表设计
1)设计表格如下图所示:
2)设置 B2 单元格数据设置为「汇总>求和」,如下图所示:
2.3 参数面板设置
1)在参数面板拖入一个「标签控件」和「数字控件」,设置「标签控件」的控件值为「段长:」;「数字控件」的控件名称为「num」,标签名称为「段长:」。如下图所示:
2)点击「预定义控件」,将「查询按钮」拖入参数面板,如下图所示:
2.4 分组设置
选中 A2 单元格,数据设置为「分组>高级>自定义>公式分组」,选择显示模式为「普通分组」,自定义值中输入公式:"["+((roundup($$$/$num)-1)*$num+1)+"~"+(roundup($$$/$num)*$num)+"]"
注:ROUNDUP(number,num_digits)表示远离零值,向上(绝对值增大的方向)舍入数字,详情参见 ROUNDUP 。
公式说明如下表所示:
公式 | 说明 |
---|---|
roundup($$$/$num) | 计算当前值在第几段 |
(roundup($$$/$num)*$num) | 表示该段的最大值 |
(roundup($$$/$num)-1)*$num | 表示该段前一段的最大值 |
((roundup($$$/$num)-1)*$num+1) | 表示该段的最小值 |
"["+((roundup($$$/$num)-1)*$num+1)+"~"+(roundup($$$/$num)*$num)+"]" | 表示[该段的最小值~该段的最大值] |
步骤如下图所示:
2.5 效果预览
2.5.1 PC 端
保存报表,点击「分页预览」,效果同 1.1 节预期效果一致。
2.5.2 移动端
App 端和 HTML5 端均支持,效果如下图所示:
3. 模板下载
已完成模板可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\GroupReport\按段动态分组.cpt
点击下载模板:按段动态分组.cpt