1. 概述编辑
1.1 预期效果
当分组报表中数据列较多,但数据量不多时,用户可使用动态分组报表灵活的查看不同维度的汇总数据。
当选择对应的参数的值,点击查询即可展示对应分组列值的分组汇总数据,如下图所示:
1.2 实现思路
动态分组报表,使用普通的 if 公式、SQL 语句和 FineReport 本身的功能即可实现。
2. 示例编辑
2.1 设计报表
2.1.1 新增数据集
新建普通报表,新增数据集 ds1,SQL 语句为:
SELECT 地区 ${if(len(销售员)=0,"",",销售员")} ${if(len(产品类型)=0,"",",产品类型")} ${if(len(产品)=0,"",",产品")} ,sum(销量) as 销量汇总
FROM 销量
where 1=1
${if(len(销售员)==0,"","and 销售员 in ('" +销售员+ "')")}
${if(len(产品类型)==0,"","and 产品类型 in ('" +产品类型+ "')")}
${if(len(产品)==0,"","and 产品 in ('" +产品+ "')")}
group by 地区
${if(len(销售员)=0,"",",销售员")}
${if(len(产品类型)=0,"",",产品类型")}
${if(len(产品)=0,"",",产品")}
注:由于设置了销售员、产品类型、产品三列为动态分组列,即参数为空时,销售员、产品类型、产品这三个字段不显示。所以销售员、产品类型、产品三个参数要先设置默认值。
2.1.2 设计报表样式
报表主体样式如下图所示:
2.2 设置参数
2.2.1 新增参数数据集
1)增加数据集「销售员」,SQL 语句为:SELECT distinct 销售员 FROM 销量
2)增加数据集「产品类型」,SQL 语句为:SELECT distinct 产品类型 FROM 销量 where 1=1 ${if(len(销售员)==0,"","and 销售员 in ('" +销售员+ "')")}
3)增加数据集「产品」,SQL 语句为:SELECT distinct 产品 FROM 销量 where 1=1 ${if(len(销售员)=0,"","and 销售员 in ('"+销售员+"')")} ${if(len(产品类型)=0,"","and 产品类型 in ('"+产品类型+"')")}
注:参数之间做了联动,所以需要在数据集 SQL 中添加对应的参数过滤条件。
2.2.2 设置参数界面
1)添加参数
点击参数界面 ,右上角参数选择全部添加,如下图所示:
2)控件设置
将三个参数控件设为下拉复选框,勾选返回字符串,分割符设置为 ',' ,如下图所示:
3)设置数据字典
为各控件绑定对应的数据字典。例如销售员下拉复选框控件绑定数据字典,如下图所示:
2.3 设置条件属性
给 C3、D3、E3 单元格设置条件属性。
列宽为 0,公式为:len($$$)=0,如下图所示:
2.4 效果查看
2.4.1 PC 端
点击分页预览,效果如1.1 预期效果所示。
2.4.2 移动端
1)App 端
2)HTML5 端
3. 已完成模板编辑
已完成模板,可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\primary\GroupReport\动态分组.cpt。
点击下载模板:动态分组.cpt