4、数据集函数用法解析
金蝶云社区-zhenwang_wu
zhenwang_wu
0人赞赏了该文章 3640次浏览 未经作者许可,禁止转载编辑于2014年11月26日 17:35:16
数据集函数用法解析
首先介绍几个重要概念:数据集 数据集为一个由数据数组构成的二维数据表,其同一列的元素数据类型都相同,列的名字和数据类型都保存在数据集中。我们把数据集的行称为记录,列称为字段。 数据集函数 能够对数据集的记录进行操作(取数、分组、运算等)的函数,称为数据集函数,语法如下:f(dataSource,…) 其中,dataSource为数据集的名字,f为函数名。 行集 数据集的行集定义为一些由数据集的行按某种顺序构成的数组,数据集本身也是一个行集。从组成元素上看,行集是数据集的子集,但排列次序未必与数据集的行序相同。 分组与组集 将数据集的所有记录按照一定的规则划分成N个行集的过程称为分组,分组后的每个行集称为一个组,多个组构成了组集。
————————————————————————————Select()从数据集的当前行集中选取符合条件的记录,返回结果是一个数组,相同数据不会合并。 使用select函数时,相当于从数据集中取出一组符合条件的记录集合,在单元格中进行扩展,此时每个扩展出来的单元格都保留一个指针,指向当前记录,即当前行。因此在这些单元格的子格中,应当直接用“field(数据集名,列名)”来引用同一个数据集同一条记录的值,此时报表引擎不需要对数据集进行检索遍历了,而是直接从当前行中取值。


典型示例:


————————————————————————————select1()从数据集中按顺序检索到符合过滤条件的第一条记录,返回其selectExp值。 select1的函数和select函数的区别在于:(1)select1函数每次只取出一条记录,但是当前行的概念是一样的,当它从数据集中取出一条记录时,保留了一个指针指向该记录,因此他的附属单元格里只需要利用“field(数据集名,列名)”即可从该记录中取值,而不需要重新检索遍历数据集。(2)select1函数检索数据集时,检索到第一条满足条件的记录随即把该记录返回,而不继续往下检索;而对于select函数,即使已经检索到满足条件的记录了,还会继续往下检索,直到所有记录检索完为止,因为select的任务是检索出一组记录,它还不确定后面是否还有满足条件的记录。 因此,如果你确定只要从数据集中取出一条记录,那么请一定用select1而不要用select。典型示例:


————————————————————————————Group()根据分组表达式,从数据集中选出一组组集。 group函数是对数据集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值,放到单元格中进行扩展,扩展出来的每个单元格都保留了一个指针指向当前的组集,该组集称为当前组。 因此在附属单元格中,需要对该组集进行操作时,不需要用任何条件和主单元格关联了;否则,如果加设了条件,会导致报表引擎还对组集中的记录进行遍历检索。


典型示例: