当前行、当前组的概念
select函数
使用select函数时,相当于从数据集中取出一组符合条件的记录集合,在单元格中进行扩展,此时每个扩展出来的单元格都保留一个指针,指向当前记录,即当前行,因此在这些单元格的附属单元格中,应当直接用“数据集名.列名”来引用同一个数据集同一条记录的值,此时报表引擎不需要对数据集进行检索遍历了,而是直接从当前行中取值。
图示:
典型的select用法:
不合理的用法:
select1()函数
select1的函数和select函数的区别在于,它每次只取出一条记录,但是当前行的概念是一样的,当它从数据集中取出一条记录时,保留了一个指针指向该记录,因此他的附属单元格里只需要利用“数据集名.列名”即可从该记录中取值,而不需要重新检索遍历数据集。
正确的select1的用法:
它和select函数还有一个区别在于:当它检索数据集时,检索到第一条满足条件的记录随即把该记录返回,而不继续往下检索;对于select来说,即使已经检索到满足条件的记录了,还会继续往下检索,直到所有记录检索完为止,因为select的任务是检索出一组记录,它还不确定后面是否还有满足条件的记录。
因此,如果你确定只要从数据集中取出一条记录,那么请一定用select1而不要用select
group函数
group函数是对数据集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值,放到单元格中进行扩展,扩展出来的每个单元格都保留了一个指针指向当前的组集,该组集称为当前组。
因此在附属单元格中,需要对该组集进行操作时,不需要用任何条件和主单元格关联了,如果加设了条件,反倒画蛇添足,导致报表引擎还对组集中的记录进行遍历检索。
正确的group 用法:
不合理的group用法:
group函数的原理图示: