微信公众号:次世代数据技术 关注可了解更多的教程。问题或建议,请公众号留言或联系本人; 如果您有报表开发需求或者定制化功能开发,也可以联系本人; 微信号:weibw162
本教程视频讲解可以关注本人B站进行观看:次世代数据技术 同时,您也可以在抖音及微信视频号平台搜索次世代数据技术进行观看。
一、需求描述
我们在开发统计报表时,存在这样一种场景,用户可以在前台自己选择统计维度进行数据的汇总统计。针对这种功能需求,本文提供一种方案。
本方案的实现其实非常简单,步骤如下:
- 在数据集中使用参数维护处动态的分组字段,并设置字段别名。
- 将动态分组字段拖入到模板中即可。
注1:不支持移动端使用。注2:本文涉及到的技术及流程均仅在FineReport 11.0 版本进行实际验证,如果您在使用过程中出现问题可以联系本作者。
二、单维度切换
数据集如下:
sql
SELECT
${统计维度} "统计维度",
count(1) "人员总数"
FROM 人员花名册
group by ${统计维度}
SELECT
${统计维度} "统计维度",
count(1) "人员总数"
FROM 人员花名册
group by ${统计维度}
1
2
3
4
5
2
3
4
5
模板设计
原理
通过参数给参数统计维度
传递不同的统计维度字符串,从而达到动态切换统计维度,并将该分组维度赋予一个字段别名统计维度
。
三、固定维度顺序切换
数据集如下:
sql
SELECT
${INDEXOFARRAY(SPLIT(统计维度,","),1)} "第一维度",
${INDEXOFARRAY(SPLIT(统计维度,","),2)} "第二维度",
count(1) "人员总数"
FROM 人员花名册
group by ${统计维度}
SELECT
${INDEXOFARRAY(SPLIT(统计维度,","),1)} "第一维度",
${INDEXOFARRAY(SPLIT(统计维度,","),2)} "第二维度",
count(1) "人员总数"
FROM 人员花名册
group by ${统计维度}
1
2
3
4
5
6
2
3
4
5
6
模板设计如下: 其中涉及到两个单元格中的公式如下:
INDEXOFARRAY(SPLIT($统计维度,","),1)
INDEXOFARRAY(SPLIT($统计维度,","),2)
INDEXOFARRAY(SPLIT($统计维度,","),1)
INDEXOFARRAY(SPLIT($统计维度,","),2)
1
2
3
2
3
原理
通过参数给参数统计维度
传递不同顺序的统计维度字符串,从而达到动态切换统计维度的顺序,并通过公式拆分将第一个和第二个维度分别赋予一个字段别名。
三、动态选择非固定数量的统计维度
数据集如下:
sql
SELECT
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),1))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),1)+" 第一维度,")}
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),2))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),2)+" 第二维度,")}
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),3))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),3)+" 第三维度,")}
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),4))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),4)+" 第四维度,")}
count(1) "人员总数"
FROM 人员花名册
${if(len(统计维度)==0,"","group by "+统计维度)}
SELECT
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),1))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),1)+" 第一维度,")}
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),2))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),2)+" 第二维度,")}
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),3))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),3)+" 第三维度,")}
${if(len(INDEXOFARRAY(SPLIT(统计维度,","),4))==0,"",INDEXOFARRAY(SPLIT(统计维度,","),4)+" 第四维度,")}
count(1) "人员总数"
FROM 人员花名册
${if(len(统计维度)==0,"","group by "+统计维度)}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
模板设计如下: 其中涉及到几个单元格中的公式如下:
INDEXOFARRAY(SPLIT($统计维度,","),1)
INDEXOFARRAY(SPLIT($统计维度,","),2)
INDEXOFARRAY(SPLIT($统计维度,","),3)
INDEXOFARRAY(SPLIT($统计维度,","),4)
INDEXOFARRAY(SPLIT($统计维度,","),1)
INDEXOFARRAY(SPLIT($统计维度,","),2)
INDEXOFARRAY(SPLIT($统计维度,","),3)
INDEXOFARRAY(SPLIT($统计维度,","),4)
1
2
3
4
5
6
7
2
3
4
5
6
7
除以上之外,还需要给单元格增加一个条件属性,如下图,具体的内容可以下载模板查看。
原理
通过参数给参数统计维度
传递不同顺序的统计维度字符串,从而达到动态切换统计维度的顺序,并通过公式判断维度是否存在,如果存在则赋予别名,否则不赋予。
三、模板文件下载
扫码即可下载文档示例模板及其他代码文件 如果您在阅读或实际操作过程中有问题,可以随时添加作者好友进行咨询。