灵活应用多数据集

阅读(4786) 标签: 多数据集,

使用润乾报表可以制作各种类型的报表,如网格式分组式交叉式等。对报表添加数据集时需根据实际需求做相应处理。

网格式、分组式、交叉式尽量用单数据集

看如下的报表:

这是一个比较典型的多层交叉报表,其做法有两种:

第一种:

这种做法设计了五个数据集,每一层的表头都来自一个码表,交叉点的数据汇总时根据条件和表头关联

第二种:

 

这种做法只设计了一个数据集,把码表和事实记录表叉乘起来,在报表中进行分组扩展

 

试比较一下两种做法的优缺点:

第一种做法:

1、  数据集不需要对多表进行叉乘,取数速度快

2、  事实记录数据集可以在SQL里先进行分组聚集操作,减少取过来的记录书,加快取数的速度和报表运算速度

3、  表头扩展直接对码表进行select操作,运算速度快

4、  交叉点汇总需要对事实记录表进行检索遍历,查找出和表头关联的记录进行汇总,交叉点的格子数远远大于表头单元格的个数,事实记录表的记录数也一般远远大于码表的记录数,每个交叉点都要对事实记录表遍历检索一次,运算速度非常慢

 

第二种做法:

1、  数据集需要对码表和事实记录表进行叉乘,取数速度慢,但是一般情况下码表的字段数只有一两个,而且数据库有索引,记录数不是非常大的情况下慢不了很多

2、  在数据集SQL里就可以对表头字段先进行分组聚集,这样取过来的记录数大大减少,加快了取数速度和报表的运算速度

3、  表头单元格是对事实记录表进行分组操作,然后再扩展,比第一种做法慢一些,但是由于对数据集只要进行一次的分组操作,因此慢不了太多

4、  交叉点汇总不需要再对事实记录表进行检索遍历了,而是直接对当前组集里的记录进行汇总,因此速度大大提高了

 

总结:第二种的做法性能优于第一种

 

多源分片、主子报表尽量用多数据集

看如下报表:

这是一个比较典型的主子报表,主表一条记录对应子表多条记录,是个典型的一对多的关系,再引伸一下,一个主表可以对应多个子表,每个子表都是多条记录。

 

此时做法还是存在两种:

 

第一种:

1、  每个主表和子表分别定义一个数据集,在报表里通过条件把子表和主表关联起来

2、  优点:避免了表间叉乘,减少了数据量,加快了取数速度和数据库的运算速度。

3、  原因:对于主子报表,主表的字段数一般比较多,而子表一般有多条记录和主表的一条记录关联,同时子表间往往没有关联关系,因此如果叉乘会导致数据量大大增加,在多子表的情况下这个现象尤其明显

4、  缺点:子表取数扩展时,需要根据条件和主表记录关联,需要对子表记录进行遍历检索,但是大部分的情况下,主表只有一条记录或者只有十几条记录,因此对子表的遍历检索次数不会很多

 

第二种:

1、  只定义一个数据集,把主表和所有子表叉乘起来

2、  缺点:由于子表之间没有关联关系,且主表的字段数比较多,叉乘往往导致记录数呈几何级数增加

3、  优点:子表取数扩展时,不需要对子表记录进行遍历扩展,运算速度快点

 

总结:第一种做法的性能优于第二种