报表知识库
我要提问

润乾实现简单自定义动态列报表

需求背景:

用户生成的报表样式比较固定是较常见的网格式报表,但是要求可以选择报表的数据来源(数据表),并可以选择需要展现哪些列。根据用户选择结果生成报表查询结果。

实现思路:
1. 利用宏可控制数据集的取数sql,实现同一数据集可根据参数输入不同得到不同的数据表检索结果。
2. 利用datasetName.field( stringExp )及datasetName.fieldName( intExp )实现动态列报表。

实现步骤:
1. 参数、宏、数据集配置:
参数说明:

 
Table:用户选择的数据库表或视图名称(字符串)
Columns:用户选择的需要在结果报表中展现的字段对应的字段序号(整数组)
宏说明:


 
Sql:根据参数table动态生成宏,”select * from “+ @table
数据集说明:
数据集ds1,数据集sql语法:${sql},直接利用宏运算结果作为数据集。
2. 报表模板设计


 
B2:=columns,根据接收到的字段序号组结果,横向扩展出若干个格子
B3:= ds1.fieldname(B2),根据列号取数据集的列名
B4:=ds1.field(B3),获得数据集当前行或者当前组中第一行中,指定列的数据
A4单元格为数据集结果的行号,不显示,只是作为主格。
3. 参数模板设计
数据集说明:
 


 
该数据集为下拉数据集的数据源,存放数据库表和字段及字段序号的对应关系。


 
其中C2单元格变量名为table,编辑方式为下拉数据集:


 
E2单元格变量名为columns,编辑方式为下拉数据集


 
该单元格实现了和B2单元格的动态过滤,并支持多选功能。

实现效果:


 
用户可以通过选择数据库表及表中相应的字段生成自定义的网格式报表。