报表设计需求:动态列 + 动态分组维度 + 排名 + 查询 + 占比

需求说明

imagepng

imagepng
如上图所示,可以需选择不同的分组维度进行数据分析,例如类别、供应商维度;
可以通过用户输入的参数值进行数据动态过滤,例如传入不同供应商、类别的值进行数据查询过滤;
可以选择要显示的附加字段数据;
同时要求显示有排名(每个分组内的数据从大到小显示)、占比(产品占该分组维度总订购量的百分比)。

完整示例下载

示例.zip
示例使用的是内置 demo 数据库
内置数据库服务开启步骤:设计器菜单栏 本地服务—启动示例数据库

制作过程:

1. 数据准备

此示例使用脚本数据集完成数据的准备工作,此处使用脚本数据集是处于对组内排名需求的考虑,完整脚本配置如下图所示:

imagepng
其中,
A1:使用 connect 函数连接 demo 数据源
A2:使用 query 函数进行数据的过滤查询
A3:使用 group 和 sort 函数实现组内排序效果,即排名结果

2. 主报表制作

imagepng
其中,
A2:=if(arg1==“供应商 ID”,ds1.group( 供应商 ID:1),ds1.group(类别 ID:1)) 实现动态分组效果
B2:=ds1.sum(订购量) B 列为隐藏列,用于占比的分母值计算
C2:=&D2 排名效果实现,此处使用组内序号的配置即可,数据集准备的数据中已完成排名计算
D2:=ds1.select(产品 ID) 明细数据的展现,跟随 A2 不同的分组维度显示产品明细
E2:=ds1. 订购量 同一个数据集的 select 函数后面跟随取值表达式,不需要再使用 select 函数取数
F2:=if(B2==0,“-”,E2/B2) 占比的实现是除法,准备好分子和分母的数据即可,此处使用 if 对分母为 0 的数据做了特殊处理,显示为“-”
G1:=split(arg4,“,”) 对传入要附件显示的列名进行拆分,需要设置 G1 单元格的扩展方式为横向扩展
G2:=ds1.field(G1) 使用 field 函数对该字段进行取数显示

主表设计完成,保存报表,例如保存名称为:kehu1.rpx,我们可以通过设计器的预览按钮看下效果:

imagepng
输入参数值后,得到如下结果:

imagepng

3. 参数模板设计

imagepng
文件–新建报表,设置报表属性中的报表类型为:参数模板
绘制上图所示的表样
其中,
B2:编辑风格为下拉列表,并设置 web 变量名为 arg1
imagepng
D2:编辑风格为下拉数据集,并设置 web 变量名为 arg2
imagepng
此 ds1 数据集需在参数模板的 报表–数据集中进行定义

F2:编辑风格为下拉数据集,并设置 web 变量名为 arg3
B3:编辑风格为下拉列表,并设置 web 变量名为 arg4

最后,将参数模板保存为主表名称 _arg.rpx,此示例名称为 kehu1_arg.rpx

至此,整体效果已完成设置。