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倍),在总时时也不会有更明显的提升了。假设数据量再大,排序时间占比提升时,层次方案将会有较大优势,只是作为报表。在呈现阶段非常少会涉及到更大的数据量了。
而固定分组报表和主子报表都须要使用遍历方式来建立关联相应。这时计算时间的占比較高。变成了主要时间消耗环节,特别是主子报表更为明显。这样。层次方案中使用集算器事先完毕关联就会获得更高效的运算性能了。