帆软FineReport动态列(动态展示列、动态列聚合)
维度控件:实现参数值的过滤指标:实现按哪些维度聚合以及展示哪些指标(动态聚合:例如数据有字段A、B、C、D列,但是只想按A、B列聚合展示结果)效果图如下:最终效果图:指标筛选器效果:指标筛选器效果。
一、功能介绍
维度控件:实现参数值的过滤
指标:实现按哪些维度聚合以及展示哪些指标(动态聚合:例如数据有字段A、B、C、D列,但是只想按A、B列聚合展示结果)
效果图如下:
最终效果图:
指标筛选器效果:
指标筛选器效果
二、实现逻辑
1、数据表结构
CREATE TABLE test_table_1 (date date DEFAULT NULL,region varchar(100) DEFAULT NULL,work_group varchar(100) DEFAULT NULL,user_no varchar(100) DEFAULT NULL,user_name varchar(100) DEFAULT NULL,work_time bigint DEFAULT NULL COMMENT ‘工作时长(分钟)’,customer_num bigint DEFAULT NULL COMMENT ‘客户数’
)
2、FineReport数据集:
SELECT
${if(FIND(“日期”,colname) != 0,‘a.date AS 日期,’,‘’)}
${if(FIND(“地区”,colname) != 0,‘a.region AS 地区,’,‘’)}
${if(FIND(“班组”,colname) != 0,‘a.work_group AS 班组,’,‘’)}
${if(FIND(“工号”,colname) != 0,‘a.user_no AS 工号,’,‘’)}
${if(FIND(“姓名”,colname) != 0,‘a.user_name AS 姓名,’,‘’)}
${if(FIND(“工作时长”,colname) != 0,‘sum(work_time) as 工作时长,’,‘’)}
${if(FIND(“客户数”,colname) != 0,‘sum(customer_num) as 客户数,’,‘’)}
null
FROM test_table_1 a
where
1=1
${if(len(dimension) == 0,“”,“or a.region in ('” + dimension + “')”)}
${if(len(dimension) == 0,“”,“or a.work_group in ('” + dimension + “')”)}
${if(len(dimension) == 0,“”,“or a.user_no in ('” + dimension + “')”)}
${if(len(dimension) == 0,“”,“or a.user_name in ('” + dimension + “')”)}
group by null
${if(FIND(“日期”,colname) != 0,‘,a.date’,‘’)}
${if(FIND(“地区”,colname) != 0,‘,a.region’,‘’)}
${if(FIND(“班组”,colname) != 0,‘,a.work_group’,‘’)}
${if(FIND(“工号”,colname) != 0,‘,a.user_no’,‘’)}
if(FIND("姓名",colname)!=0,′,a.username′,′′)其中参数colname对应指标筛选器dimension对应维度筛选器释义:{if(FIND("姓名",colname) != 0,',a.user_name','')} 其中参数colname对应指标筛选器 dimension对应维度筛选器 释义:if(FIND("姓名",colname)!=0,′,a.username′,′′)其中参数colname对应指标筛选器dimension对应维度筛选器释义:{if(FIND(“日期”,colname) != 0,‘a.date AS 日期,’,‘’)}表示,指标筛选中能找到日期,则表示筛选了日期维度,则数据中包含日期列,否则为空
${if(len(dimension) == 0,“”,“or a.region in ('” + dimension + “')”)} 表示,维度中筛选器中选择的值进行过滤,因为是同一个筛选器,此处所有的过滤用或条件
3、维度控件:
配置如下
数据字典对应的数据集(构造如下数据):
数据字典配置
指标筛选器配置同上
指标筛选器数据集如下:
4、表格配置:
表头配置如下:释义:按’,’分隔后形成array中的第一个(分隔符与上面控件中配置的分隔符保持一致),第二个及后面的最后的数字依次变换为2,3,4,5等
公式文本:INDEXOFARRAY(split($colname,“‘,’”),1)
字段值配置如下:#1代表第一列,数字以次变化配置后面的列
至次配置变成。预览效果实现。
注:主要参考https://help.fanruan.com/finereport/doc-view-1289.html 这个文档,做了变形,更适配企业中使用。
更多推荐


所有评论(0)