最新历史版本 :解决动态列的分组统计问题 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
功能变更
11.0--

1.2 预期效果

利用 数据集 或 函数 方式制作出来的动态列默认是只能显示固定的列字段的,没有动态分组统计的功能,如果报表需要使用动态列,同时某个字段又需要汇总,那么原来的方法就不太适用了,必须进行改进。最终效果如下图:

222

1.3 实现思路

由于 FineReport 为普通列提供的汇总不再适用于动态列,要想实现「销量」按前面的列自动汇总的话,必须通过 SQL 进行处理,首先判断动态列是否选择了「销量」,然后把销量字段处理成汇总。

2. 示例编辑

2.1 准备模板

打开模板%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameterr\DynamicCol\数据集参数实现动态列.cpt。详情可参见:数据集参数实现动态列

1)将 A2-F2 单元格的数据设置改由「列表」改成「分组」,如图:

2)修改数据集 ds1 的 SQL 语句为:SELECT ${if(len(col)=0,'*',replace(col,'销量','sum(销量)'))} FROM 销量 ${if(len(col)<1,"","group by "+replace(col,',销量',''))},可实现:

  • 参数为空时,查询全部,按左父格分组显示

  • 勾选参数但未包含「销量」列时,仅按左父格分组显示

  • 勾选了参数且包含「销量」列时,「销量」列可按左父格分组汇总

语句说明如下表:

公式
公式说明
${} 括号内可支持 FineReport 的内置公式
if(len(col)=0,'*',replace(col,'销量','sum(销量)')) 表示参数col为空时,查询全部;不为空时,可使用 replace  函数将查询结果中「销量」列的值用sum(销量)替换
if(len(col)<1,"","group by "+replace(col,',销量',''))

表示参数col为空时,执行空,相当于SELECT ${if(len(col)=0,'*',replace(col,'销量','sum(销量)'))} FROM 销量

不为空时,执行 "group by "+replace(col,',销量',''),根据一个或多个列对查询结果进行分组

"group by "+replace(col,',销量','')

 group by中不能出现销量列,所以如果勾选了「销量」列,则「销量」列用空替换

注:',销量' 中的逗号不能省略,因为用空值替换时,会出现 SQL 语句报错。

3)删掉参数 col 的变量默认值,如下图所示:

企业微信截图_16006069883785.png

2.2 效果预览

1) PC 端

保存模板,点击「分页预览」,效果如下图所示:

1606708575266672.gif

2) 移动端

App 端及 H5 端均支持,效果如下图所示:

9 (1).gif

3. 模板下载编辑

已完成模板,可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\DynamicCol\动态列的分组统计.cpt

点击下载模板:动态列的分组统计.cpt