1. 概述
1.1 版本
报表服务器版本 |
---|
11.0 |
1.2 预期效果
在前面学习了简单多源报表、复杂多源报表、多源分片报表,如果希望在多源报表中实现过滤该如何实现呢?
例如想要筛选「销售总额」为 1869 的数据,如下图所示:
1.3 实现思路
在单元格中的主表单元格里进行过滤。
2. 示例
2.1 数据准备
新建数据集 ds1 , SQL 查询语句为:SELECT * FROM [销量]
新建数据集 ds2,SQL 查询语句为:
SELECT * FROM 销售总额 where 1=1
${if(len(销售总额)=0,""," and 销售总额 = '"+销售总额+"'")}
2.2 报表设计
如下图设计表格,将数据集中的字段分别拖拽到对应单元格中。
单元格设置如下表所示:
单元格 | 设置 |
---|---|
B2、B3 | 合并 B2、B3 单元格,输入文本:地区 |
C2、C3 | 合并 C2、C3 单元格,输入文本:销售员 |
E2、E3 | 合并 E2、E3 单元格,输入文本:销售总额 |
D2 | 拖入数据列:ds1 产品类型,横向扩展,父格为默认 |
D3 | 拖入数据列:ds1 产品,横向扩展,父格为默认 |
B4、C4、D4 | 分别拖入对应的数据列:ds1 地区、ds1 销售员、ds1 销量;纵向扩展 |
E4 | 拖入数据列:ds2 销售总额;纵向扩展;左父格为 C4 |
2.3 过滤条件设置
1)双击 B4 单元格,设置过滤条件:
条件一:普通条件,ds1 销售员数据列等于 ds2 销售员数据列; or 条件二:公式条件:len($销售总额) =0 ,以实现参数为空选择全部的效果。如下图所示:
ds2 数据集中已经实现了这个效果,但是单元格 B4 的数据来自于 ds1数据集, ds1 数据集中可能包含 ds2 数据集中没有的数据。因此必须加上条件二,才不会导致参数为空时主表的数据减少。
2)双击 E4 单元格,设置过滤条件:销售员等于 C4 单元格,如下图所示:
2.4 参数面板设置
进入参数面板编辑界面,选择「全部添加」进参数面板,设置其控件为「数字控件」,如下图所示:
2.5 效果预览
2.5.1 PC 端
保存报表,点击「分页预览」,效果如下图所示:
2.5.2 移动端
App 和 HTML5 端均支持,效果如下图所示:
3. 模板下载
已完成模板可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\Multidatasource\多源报表非主表实现数据过滤.cpt
点击下载模板:多源报表非主表实现数据过滤.cpt