结果集复用来提升报表性能

         报表项目中,如果一个报表有多个sql数据集,可能会出现其中两个或者几个数据集很相似的情况。如果相似数据集的结果可以复用,就能有效的提高性能。但是,sql数据集的结果是没有办法复用的。例如下面这个“销售排名、分布报表”(db2数据库):



 

  如果采用sql结果集,需要两个数据集:

Ds1

SELECT * from (select e.eid 雇员编号,max(e.name) 姓名,max(e.state) 州,sum(amount) 订单总价 from sales s,employee e where e.eid=s.sellerid group by e.eid order by 订单总价 desc) fetch first 10 rows only

 

Ds2

select 州,count(雇员编号) 前十名个数 from (select * from (select e.eid 雇员编号,max(e.name) 姓名,max(e.state) 州,sum(amount) 订单总价 from sales s,employee e where e.eid=s.sellerid group by e.eid order by 订单总价 desc) fetch first 10 rows only) group by 州 order by 前十名个数

 

         可以看出,ds1ds2的主体很相似,只是一个是取明细,一个是取州汇总。但是,因为sql数据集不能共享结果,所以ds2无法复用ds1的结果。报表设计如下:




 

 

         这种情况可以采用润乾集算报表,在集算脚本中分步骤计算,可以复用结果集提高性能。具体实现如下。

         首先,在集算器中编写集算脚本(sales.dfx)。



 

        A1:连接预先配置好的db2数据库。

        A2:执行sql,取得销售排名的明细数据。

        A3:关闭数据库连接。

        A4:在A2的基础上,复用A2的结果进行简单的分组和排序即可完成第二个数据集。

        A5:返回两个结果集。

相比较而言,sql数据集的ds2无法利用ds1的结果,所以要重新算按照eid分组汇总、取前十名。由于销售数据较多,因此性能较差。而集算数据集方案的A4,仅仅是对十条记录做分组和排序,速度很快。

 

         第二,在集算报表设计器中定义集算数据集调用sales.dfx



 

         直接返回两个数据集ds1ds2

 

         第三,在集算报表设计其中设计报表如下:



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值