聚合函数
被称为聚合函数的函数家族包含将多个字段值作为其输入信息并每组返回单个结果的函数,在此类函数中,分组通过图表维度或脚本语句中的 group by 子句定义。
聚合函数包括 Sum()、Count()、Min()、Max() 等更多函数。
大多数聚合函数均可在数据加载脚本和图表表达式中使用,但语法不同。
在数据加载脚本中使用聚合函数
聚合函数只能在 LOAD 和 SELECT 语句内使用。
在图表表达式中使用聚合函数
聚合函数的参数不能包含其他聚合函数,除非这些内部聚合包含 TOTAL 限定符。 有关高级嵌套聚合的更多信息,请结合指定维度使用高级函数 Aggr。
聚合函数会聚合选择项定义的可能记录集合。但替代记录集合可使用集合分析中的集合表达式定义。
如何计算聚合
聚合在特定表的记录上循环,聚合其中的记录。例如,Count(<Field>) 将统计 <Field> 所在表中的记录数。如果只想聚合不同的字段值,则需要使用 distinct 子句,诸如 Count(distinct <Field>)。
如果聚合函数包含来自不同表的字段,则聚合函数将循环遍历组成字段的表的叉积记录。这会降低性能,因此应避免此类聚合,尤其是当您有大量数据时。
关键字段聚合
聚合的计算方式意味着您无法聚合键字段,因为不清楚应该使用哪个表进行聚合。例如,如果字段 <Key> 链接两个表,则不清楚 Count(<Key>) 是否应返回第一个表或第二个表中的记录数。
但是,如果使用该 distinct 子句,则聚合是定义良好的,并且可以进行计算。
因此,如果在聚合函数中使用关键字段而不使用 distinct 子句,QlikView 将返回一个可能没有意义的数字。解决方案是要么使用 distinct 子句,要么使用密钥的副本 - 一个仅驻留在一个表中的副本。
例如,在下表中,ProductID 是表之间的键。
Count(ProductID) 可以在 Products表中计数(每个产品只有一条记录 – ProductID 是主键),也可以在 Details 表中计数(每个产品很可能有多条记录)。如果要计算不同产品的数量,应使用 Count(distinct ProductID)。如果要计算特定表中的行数,则不应使用键。