首页 > 代码库 > 润乾集算报表层次数据集对性能的影响测试

润乾集算报表层次数据集对性能的影响测试

1、测试目的

         在相同的硬件和集算报表IDE上测试使用集算报表使用层次数据集与不使用层次数据集之间的性能差异,从而确定层次数据集对报表性能的影响。

2、环境描述

测试机型:DellInspiron 3420

CPU:Intel Corei5-3210M @2.50GHz *4

RAM:4G

HDD:西数WDC(500G5400转/分)

操作系统:Win7(X64)SP1

JDK:1.6

数据库:hsqldb

集算报表版本:5.0

3、数据描述

表数据


4、用例描述

4.1、分组明细报表

使用销售记录表,按照销售人员分组统计订单金额后,列出每个销售人员的订单明细,报表格式为:


4.1.1、不使用层次数据集实现

sql数据集

ds1: select 员工ID,订单ID,订购日期,订单金额,客户 from 销售记录表

ds2: select * from 员工表

 

报表模板


设置A2显示值表达式:ds2.select(姓名,编号==value())

4.1.2、使用层次数据集实现

集算器数据集


报表模板



4.2、固定分组报表

通过订单、订单明细和客户表,统计环首都经济圈、珠三角、长三角地区的城市订单情况,这里地区未在数据库中存储,需要预置。

报表格式:


4.2.1、不使用层次数据集实现

内建数据集ds1:


sql数据集ds2

SELECT 客户.城市,订单明细.数量,订单明细.单价,订单明细.折扣 FROM 客户,订单,订单明细 WHERE 客户.客户ID = 订单.客户ID  AND  订单.订单ID=订单明细.订单ID

 

报表模板


4.2.2、使用层次数据集实现

集算器数据集


报表模板


4.3、主子表

使用订单表和订单明细表,查询每个订单详情以及该订单下的订单明细,报表格式如下:


4.3.1、不使用层次数据集实现

sql数据集

SELECT 订单明细.单价,订单明细.产品ID,订单明细.折扣,订单明细.数量,订单明细.订单ID,订单.订单ID,订单.客户ID,订单.发货日期,订单.到货日期,订单.货主名称,订单.运货商,订单.运货费,订单.货主城市 FROM 订单,订单明细 WHERE 订单.订单ID = 订单明细.订单ID

 

报表模板


4.3.2、使用层次数据集实现

集算器数据集

 

报表模板

5、测试方法

使用同一个集算报表设计器,根据相同数据源分别使用层次数据集、不使用层次数据集制作相同展现结果的报表,比较二者之间的差异,确定集算报表层次数据集对报表性能的影响。

6、测试结果

*下表结果数据单位为:秒


【说明】运行结果,记录的是报表完整运行时间,从取数开始到报表展现结束的时间。

7、解读分析

从上面的结果可以看到,常规分组明细报表相差不太明显(1秒基本上在误差范围内),其它两种情况使用层次数据集都可以提升报表的计算性能,特别是主子表的性能提升非常明显。

分析其原因,虽然常规分组报表在报表工具中计算使用了更慢速的排序运行,但50万行的实际排序时间不到1秒,在总时间中占比较少;这时层次方案即使使用了更高效的hash分组(单对比分组时间能快出5-10倍),在总时时也不会有更明显的提升了。如果数据量再大,排序时间占比提升时,层次方案将会有较大优势,不过作为报表,在呈现阶段很少会涉及到更大的数据量了。

而固定分组报表和主子报表都需要使用遍历方式来建立关联对应,这时计算时间的占比较高,变成了主要时间消耗环节,特别是主子报表更为明显。这样,层次方案中使用集算器事先完成关联就会获得更高效的运算性能了。


润乾集算报表层次数据集对性能的影响测试