动态分组

  • 文档创建者:星痕
  • 编辑次数:17次
  • 最近更新:Carly 于 2020-01-02
  • 1. 概述

    1.1 预期效果

    当分组报表中数据列较多,但数据量不多时,用户可使用动态分组报表灵活的查看不同维度的汇总数据。

    当选择对应的参数的值,点击查询即可展示对应分组列值的分组汇总数据,如下图所示:

    222

    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 设计报表样式

    报表主体样式如下图所示:

    1575009327872540.png

    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)添加参数

    点击参数界面 ,右上角参数选择全部添加,如下图所示:

    222

    2)控件设置

    将三个参数控件设为下拉复选框,勾选返回字符串,分割符设置为 ',' ,如下图所示:

    1575010174144144.png

    3)设置数据字典

    为各控件绑定对应的数据字典。例如销售员下拉复选框控件绑定数据字典,如下图所示:

    1575010857330335.png

    2.3 设置条件属性

    给 C3、D3、E3 单元格设置条件属性。

    列宽为 0,公式为:len($$$)=0,如下图所示:

    1575011275651164.png

    2.4 效果查看

    2.4.1 PC 端

    点击分页预览,效果如1.1 预期效果所示。

    2.4.2 移动端

    1)App 端

    1577947068102574.gif

    2)HTML5 端

    1577947113496754.gif

    3. 已完成模板

    已完成模板,可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\primary\GroupReport\动态分组.cpt

    点击下载模板:动态分组.cpt

    附件列表


    主题: 参数应用
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!