大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板。这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表。
与一般报表工具需要在第三方程序(如JAVA)中实现不同,在润乾集算报表中提供了内置的脚本(数据集),可以快速完成这类报表,下面举例说明。
某类报表中,用户在指定表和列时,有一些列是必选列,即使用户没有选择,在查询后仍然显示。所以需要在拼接SQL的时候事先判断必选列是否在用户的选出列中,如果不在,则在后面添加,同时要保证用户选出列的次序。
这里以查询某一时间段订单信息为例,其中订单ID、订购日期、发货日期、到货日期为必选字段,使用脚本通过如下步骤完成。
设置报表参数
应用中已经按照指定的参数格式将表名、字段名和查询条件传递给报表,因而报表参数设置如下:
其中columns值:货主名称,运货商,运货费;
conditions值:where 订购日期>=‘1996-01-01‘and 订购日期<=‘1996-12-31‘
设置数据集
使用脚本数据集编写脚本进行SQL拼接和取数工作,并返回结果集。
使用集算脚本可以分步编写计算逻辑,而且由于其对集合运算的良好支持使得在A2中将所选字段集合与必选字段集合做并集即可获得所有查询字段,非常简单。其中:
A1:所有必选字段的集合;
A2:将用户选择的字段集合与必选字段集合求并集,以保证保证所有必选字段都能选出;
A3-A4:执行拼接好的SQL取数;
A5:为报表返回结果集。
编辑报表表达式
由于报表列都是动态的,无法事先制作固定列的报表,需要使用动态列函数。
这里使用了ds.fname()和ds.field()函数实现动态列报表,具体用法可参考集算报表相关文档。最后将辅助的A列和第一行隐藏即可完成报表制作。