首页 > 其他 > 详细

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

时间:2015-09-26 02:08:00      阅读:243      评论:0      收藏:0      [点我收藏+]

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


bubuko.com,布布扣

?

??如果采用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的结果。报表设计如下:



bubuko.com,布布扣
?

?

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

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


bubuko.com,布布扣
?

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

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

? ? ? ??A3:关闭数据库连接。

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

? ? ? ??A5:返回两个结果集。

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

?

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


bubuko.com,布布扣
?

? ? ? ? ?直接返回两个数据集ds1ds2

?

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


bubuko.com,布布扣
?

?

?

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

原文:http://datamachine.iteye.com/blog/2246069

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!