聚合函数
被称为聚合函数的函数家族包含将多个字段值作为其输入信息并每个组返回单个结果的函数,在此类函数中,分组通过图表维度或脚本语句中的 group by 子句定义。
聚合函数包括 Sum()、Count()、Min()、Max() 等更多函数。
大多数聚合函数均可在数据加载脚本和图表表达式中使用,但语法不同。
限制:
聚合函数的参数不能包含其他聚合函数,除非这些内部聚合包含 TOTAL 限定符。 有关高级嵌套聚合函数的更多信息,请结合指定维度使用 Aggr 高级函数。
命名实体时,避免将同一名称指定给多个字段、变量或度量。解决同名实体之间的冲突有严格的优先顺序。这种顺序反映在使用这些实体的任何对象或上下文中。该优先顺序如下:
-
在聚合中,字段优先于变量。度量标签在聚合中不相关,并且没有排定优先级。
-
在聚合外部,度量标签优先于变量,而变量又优先于字段名称。
-
此外,在聚合外部,度量可以通过引用其标签来重用,除非标签实际上是计算标签。在这种情况下,度量的重要性降低,以减少自引用的风险,并且在这种情况下,名称将始终首先解释为度量标签,其次解释为字段名称,再次解释为变量名称。
在数据加载脚本中使用聚合函数
聚合函数只能在 LOAD 和 SELECT 语句内使用。
在图表表达式中使用聚合函数
聚合函数的参数不能包含其他聚合函数,除非这些内部聚合包含 TOTAL 限定符。 有关高级嵌套聚合函数的更多信息,请结合指定维度使用 Aggr 高级函数。
聚合函数会聚合选择项定义的可能记录集合。但替代记录集合可使用集合分析中的集合表达式定义。
请参阅: 集合分析
如何计算聚合
聚合在特定表的记录上循环,聚合其中的记录。例如,计数(<Field>) 将计算 <Field> 所在的表格中记录的数目。如果只想聚合不同字段值,则需要使用 distinct 子句,例如 Count(distinct <Field>)。
如果聚合函数包含来自不同表的字段,则聚合函数将循环遍历组成字段的表的交叉乘积记录。这会降低性能,因此应该避免此类聚合,尤其在您有大量数据时是这样。
关键字段聚合
聚合的计算方式意味着您不能聚合关键字段,因为不清楚应该使用哪个表进行聚合。例如,如果字段 <Key> 链接两个表,则不清楚 Count(<Key>) 是否应返回第一个表或第二个表中的记录数。
但是,如果使用 distinct 子句,则聚合定义良好,可以为跨两个表链接的关键字段计算。
如果在聚合函数中使用关键字段而不使用 distinct 子句,则 Qlik Sense 将返回一个可能毫无意义的数字。解决方案是要么使用 distinct 子句,要么使用关键字段的副本 — 一个只驻留在一个表中的副本。
例如,在下表中,ProductId 是表之间的键。
Count(ProductId) 可以在 Products 表中计数(每个产品只有一条记录 – ProductId 是主键),也可以在 Details 表中计数(每个产品很可能有多条记录)。如果要计算不同产品的数量,应该使用 Count(distinct ProductId)。如果要计算特定表中的行数,则不应使用键。
包含在三个或多个表中的关键字段的聚合
distinct 前缀仅适用于最多链接两个表的关键字段。当对存在于三个或多个表中的关键字段进行聚合分组时,任何需要字段的频率信息的操作都将返回 NULL。如果关键字段链接三个或多个表,则必须改为使用该字段的非关键副本。