需求背景:
用户生成的报表样式比较固定是较常见的网格式报表,但是要求可以选择报表的数据来源(数据表),并可以选择需要展现哪些列。根据用户选择结果生成报表查询结果。
实现思路:
1. 利用宏可控制数据集的取数sql,实现同一数据集可根据参数输入不同得到不同的数据表检索结果。
2. 利用datasetName.field( stringExp )及datasetName.fieldName( intExp )实现动态列报表。
实现步骤:
1. 参数、宏、数据集配置:
参数说明:
数据集说明:
数据集ds1,数据集sql语法:${sql},直接利用宏运算结果作为数据集。
2. 报表模板设计
B2:=columns,根据接收到的字段序号组结果,横向扩展出若干个格子
B3:= ds1.fieldname(B2),根据列号取数据集的列名
B4:=ds1.field(B3),获得数据集当前行或者当前组中第一行中,指定列的数据
A4单元格为数据集结果的行号,不显示,只是作为主格。
3. 参数模板设计
数据集说明:
E2单元格变量名为columns,编辑方式为下拉数据集
该单元格实现了和B2单元格的动态过滤,并支持多选功能。
实现效果:
用户可以通过选择数据库表及表中相应的字段生成自定义的网格式报表。
补充说明:
此种方式的报表格式比较固定,只能实现最简单意义上的报表自定义。另外函数datasetName.field(#colNo )的性能比较低应该慎用!