动态分组

编辑
  • 文档创建者:星痕
  • 浏览次数:5740次
  • 编辑次数:13次
  • 最近更新:Kevin-s 于 2019-06-03
  • 1. 描述

    此方法实现动态分组报表适用于数据列比较多,数据量不是很大,想要灵活的查看不同维度的汇总数据时。

    当选择对应的参数的值,点击查询就展示对应分组列值的分组汇总数据,实现效果如下图:


    2. 思路

    实际就是普通 if 公式结合 SQL 语句的规则以及 FR 本身的功能而实现。

    3. 示例

    下面我们以销量表为例,来实现动态列的效果。

    3.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,"",",产品")}

    3.2 定义参数控件数据字典数据集

    增加数据集“销售员”,SQL 语句为:SELECT distinct 销售员 FROM 销量

    增加数据集“产品类型”,SQL 语句为:SELECT distinct 产品类型 FROM 销量 where 1=1 ${if(len(销售员)==0,"","and 销售员 in ('" +销售员+ "')")}

    增加数据集“产品”,SQL 语句为:SELECT distinct 产品 FROM 销量 where 1=1 ${if(len(销售员)=0,"","and 销售员 in ('"+销售员+"')")} ${if(len(产品类型)=0,"","and 产品类型 in ('"+产品类型+"')")}

    注:参数之间做了联动,所以需要在数据集sql中添加对应的参数过滤条件。

    3.3 表样设计

    按照下图所示设置表样:

    注:这里我们设置销售员、产品类型、产品这三个为动态分组列,即参数为空时,销售员、产品类型、产品这三个字段不显示。所以销售员、产品类型、产品三个参数要先设置默认值。

    给 C3,D3,E3 单元格设置条件属性列宽为 0,公式为:len($$$)=0

    如下图:


    3.4 参数界面设置

    点击参数界面编辑触笔,切换到参数界面的可编辑状态,右上角参数选择全部添加


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


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


    设置完成效果如下:


    3.5 效果查看

    点击分页预览,效果如上图。

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


    附件列表


    主题: 参数应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]