目录

枚举分组

enumgroup函数

请看如下报表: 


这是一个不规则分组的报表,将饮料和点心归入副食品组,肉/家禽和海鲜归入肉类组,日用品归入日用品组,其他所有类别归入其他组。设计这样的一个报表有多种做法,下面我们列出比较典型的两种:

第一种做法:  


第二种做法:


分析:

第一种做法是比较常规的做法,首先在第一列中根据分组要求,枚举出三个组,然后分别在第二列、第三列、第四列里对数据进行汇总时,根据分组条件增加过滤条件,如类别ID==1 or 类别ID==3等等,一般的传统报表工具都是这种做法。

这种做法的弊端在于:引擎对每一个汇总项进行计算时,都需要对数据进行一次遍历,查找出满足条件的记录进行汇总,因此计算速度很慢。

第二种做法采用了enumgroup函数,这种做法是对按照枚举分组规则数据集先进行分组,之后在第二列、第三列、第四列里对数据进行汇总时直接从当前组里取数,不再需要遍历和过滤了。因此第二种做法速度非常快,性能比较优。

plot函数

请看如下的报表:  


 

这是一个典型的按照时间段来分组的报表,它有如下两种做法: 第一种:


 

第二种: 


 

分析:

第一种做法采用plot函数,plot函数的功能是对数据集按照给定的数据段进行按段分组,有几个数据段就分成几个组,之后按照数据段的个数对单元格进行扩展,扩展出来的单元格的数据值就是数据段的次序;同时,扩展出来的单元格均保留了一个指针指向当前的组集,其原理和group类似。

因此,第一种做法的优点是:采用按段分组函数,只需要对数据集进行一次分组,附属格对组集进行汇总运算时不需要对记录进行遍历检索了,大大加快了运算速度

第二种做法,是比较常规的做法,目前传统报表工具基本上只能采用这一种做法,他把数据段挨个列出来,附属单元格中逐个编辑表达式,通过过滤条件和数据段关联,这种做法每次运算都要检索遍历数据集,运算速度非常慢。

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