枚举分组
enumgroup函数
请看如下报表:
这是一个不规则分组的报表,将饮料和点心归入副食品组,肉/家禽和海鲜归入肉类组,日用品归入日用品组,其他所有类别归入其他组。设计这样的一个报表有多种做法,下面我们列出比较典型的两种:
第一种做法:
第二种做法:
分析:
第一种做法是比较常规的做法,首先在第一列中根据分组要求,枚举出三个组,然后分别在第二列、第三列、第四列里对数据进行汇总时,根据分组条件增加过滤条件,如类别ID==1 or 类别ID==3等等,一般的传统报表工具都是这种做法。
这种做法的弊端在于:引擎对每一个汇总项进行计算时,都需要对数据进行一次遍历,查找出满足条件的记录进行汇总,因此计算速度很慢。
第二种做法采用了enumgroup函数,这种做法是对按照枚举分组规则数据集先进行分组,之后在第二列、第三列、第四列里对数据进行汇总时直接从当前组里取数,不再需要遍历和过滤了。因此第二种做法速度非常快,性能比较优。
plot函数
请看如下的报表:
这是一个典型的按照时间段来分组的报表,它有如下两种做法: 第一种:
第二种:
分析:
第一种做法采用plot函数,plot函数的功能是对数据集按照给定的数据段进行按段分组,有几个数据段就分成几个组,之后按照数据段的个数对单元格进行扩展,扩展出来的单元格的数据值就是数据段的次序;同时,扩展出来的单元格均保留了一个指针指向当前的组集,其原理和group类似。
因此,第一种做法的优点是:采用按段分组函数,只需要对数据集进行一次分组,附属格对组集进行汇总运算时不需要对记录进行遍历检索了,大大加快了运算速度
第二种做法,是比较常规的做法,目前传统报表工具基本上只能采用这一种做法,他把数据段挨个列出来,附属单元格中逐个编辑表达式,通过过滤条件和数据段关联,这种做法每次运算都要检索遍历数据集,运算速度非常慢。
总结:第一种做法的性能远远优于第二种