Aggr - 图表函数

Aggr()用于返回在声明维度或维度上计算的表达式的值的阵列。例如,每个区域的每位客户的最大销售额值。Aggr函数用于高级聚合,其中在另一个聚合函数中要将 Aggr 函数括起来,从而将 Aggr 函数的结果阵列用作其所嵌套的聚合的输入。

语法:  

Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})

返回数据类型: dual

参数:  

参数 说明
expr

表达式包含聚合函数。聚合函数会默认聚合选择项定义的可能记录集合。

StructuredParameter

StructuredParameter包含维度以及可选的排序标准,格式如下: (Dimension(Sort-type, Ordering))

此维度是一个单一字段,并且不能为表达式。此维度可用于确定为其计算 Aggr表达式的值的阵列。

如果包含排序标准,则会对由Aggr函数创建,且针对维度而计算的值的阵列进行排序。当排序影响 Aggr函数所含表达式的结果时,此项至关重要。

有关如何使用排序标准的详细信息,请参阅在结构化参数的维度中添加排序标准

SetExpression 聚合函数会默认聚合选择项定义的可能记录集合。可选记录集合可由集合分析表达式定义。
DISTINCT 如果表达式参数前面是distinct限定符,或者根本没有使用限定符,则维度值的每个特殊组合只生成一个返回值。这是实现聚合的常规方式 – 维度值的每个特殊组合将在图表中占用一行。
NODISTINCT

如果表达式参数前面是nodistinct限定符,各维度值组合可能生成多个返回值,具体取决于基础数据结构。如果只有一个维度,则 aggr函数将返回元素数量与源数据中的行数相同的阵列。

基本聚合函数,例如 SumMinAvg,会返回单个数值,而Aggr() 函数可以进行对比以创建临时阶段性结果集(虚拟表),且其中可执行另一个聚合。例如,在Aggr()语句中可按客户计算销售额之和的平均值,然后计算结果之和的平均值:Avg(TOTAL Aggr(Sum(Sales), Customer))

提示: 如果想要创建多层次嵌套图表聚合,则在计算维度中使用 Aggr()函数。

限制:  

Aggr()函数中的每个维度必须是单个字段,不能是表达式(计算维度)。

在结构化参数的维度中添加排序标准

在其基本形式中,参数 StructuredParameter(位于Aggr 函数语法中)属于单一维度。表达式: Aggr(Sum(Sales, Month))可计算每个月的销售额总值。但是,如果包含在另一个聚合函数中,若不使用排序标准可能会造成意外结果。这是因为某些维度可以按数字或字母等顺序排序。

StructuredParameter参数(位于Aggr 函数中)中,您可以对表达式中的维度指定排序标准。通过这种方式,您可以在由 Aggr函数生成的虚拟表上强制使用排序。

参数 StructuredParameter具有以下语法:

(FieldName, (Sort-type, Ordering))

结构化参数可以嵌套:

(FieldName, (FieldName2, (Sort-type, Ordering)))

排序类型可以包括:NUMERICTEXTFREQUENCYLOAD_ORDER

与每个排序类型相关联的顺序类型如下:

排序类型 允许的顺序类型
NUMERIC ASCENDINGDESCENDINGREVERSE
TEXT ASCENDINGA2ZDESCENDINGREVERSEZ2A
FREQUENCY DESCENDINGREVERSEASCENDING
LOAD_ORDER ASCENDINGORIGINALDESCENDINGREVERSE

顺序类型 REVERSEDESCENDING 相同。

对于排序类型 TEXT,顺序类型 ASCENDINGA2Z 相同,DESCENDINGREVERSEZ2A 相同。

对于排序类型 LOAD_ORDER,顺序类型 ASCENDINGORIGINAL 相同。

示例和结果:  

示例 结果
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))

表达式 Aggr(Sum(UnitSales*UnitPrice), Customer)可计算销售额总值(按Customer),并返回值的阵列:3 个 Customer值为 295、715 和 120。

实际上,我们已建立了这些值的临时列表,而未创建包含这些值的显式表或列。

这些值作为Avg()函数的输入,可计算销售额 376.6667 的平均值。(您必须在属性面板的 Presentation下选中总计。)

Aggr(NODISTINCT Max(UnitPrice), Customer)

值的阵列:16、16、16、25、25、25、19 和 19。nodistinct 限定符意味着在阵列源数据中的每一行都包含一个元素:每一个元素都是 UnitPrice 的最大值(针对每个 Customer Product)。

max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))

StructuredParameter参数中使用排序标准(该参数位于表达式:max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING)))) 中)

若不使用排序标准,则表达式 max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear)))的结果会取决于对维度MonthYear 的排序方式。我们可能无法获得想要的结果。

通过向维度添加排序类型和顺序类型的值,我们可以向结构化参数添加排序标准:(MonthYear, (NUMERIC, ASCENDING)),其中排序类型 NUMERIC 和顺序 ASCENDING 确定 MonthYear 是以数字升序的顺序排序。

在此,我们希望计算月环比的最大客户增加数。该数值可用于 KPI 可视化等情况。

表达式中的 Aggr部分会将某个月的客户总数(由 MonthYear 提供)与上个月的客户总数相比较。

由于我们在维度中使用排序标准:(MonthYear,(NUMERIC, ASCENDING)),我们可以确保 Aggr 在虚拟表中比较连续月份的客户数量,方法是以数字升序的顺序对月份进行排序,而不是以字母升序的顺序。

示例中所使用的数据:

创建一个以 CustomerProductUnitPriceUnitSales 为维度的表格。在表格中添加表达式作为度量。

ProductData:

LOAD * inline [

Customer|Product|UnitSales|UnitPrice

Astrida|AA|4|16

Astrida|AA|10|15

Astrida|BB|9|9

Betacab|BB|5|10

Betacab|CC|2|20

Betacab|DD|25|25

Canutility|AA|8|15

Canutility|CC||19

] (delimiter is '|');