# Aggr

Aggr() 用于返回在声明维度或维度上计算的表达式的值的阵列。例如，每个区域的每位客户的最大销售额值。

Aggr 函数用于嵌套聚合，其中其第一个参数（内部聚合）按维度值计算一次。维度在第二个参数（和后续参数）中指定。

此外，Aggr 函数应包含在外部聚合函数中，使用 Aggr 函数的结果数组作为其嵌套聚合的输入

语法：

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

返回数据类型： 双

参数：

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

* StructuredParameter:StructuredParameter 包含维度以及可选的排序标准，格式如下：`(Dimension(Sort-type, Ordering))`。此维度是一个单一字段，并且不能为表达式。此维度可用于确定为其计算 Aggr 表达式的值的阵列。

  如果包含排序标准，则会对由 Aggr 函数创建，且针对维度而计算的值的阵列进行排序。当排序影响 Aggr 函数所含表达式的结果时，此项至关重要。有关如何使用排序标准的详细信息，请参阅[在结构化参数的维度中添加排序标准](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/aggr.htm#Sorting)。

* SetExpression: 聚合函数会默认聚合选择项定义的可能记录集合。可选记录集合可由集合分析表达式定义。

* DISTINCT: 如果表达式参数前面是 distinct 限定符，或者根本没有使用限定符，则维度值的每个特殊组合只生成一个返回值。这是实现聚合的常规方式 – 维度值的每个特殊组合将在图表中占用一行。

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

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

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

限制：

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

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/ChartFunctions/aggr.htm)在结构化参数的维度中添加排序标准

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

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

参数 StructuredParameter 具有以下语法：

(FieldName, (Sort-type, Ordering))

结构化参数可以嵌套：

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

排序类型可以包括：NUMERIC、TEXT、FREQUENCY 或 LOAD\_ORDER。

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

排序类型排序

| 排序类型 | 可用排序类型 |
| --- | --- |
| NUMERIC | ASCENDING、DESCENDING 或 REVERSE |
| TEXT | ASCENDING、A2Z、DESCENDING、REVERSE 或 Z2A |
| FREQUENCY | DESCENDING、REVERSE 或 ASCENDING |
| LOAD\_ORDER | ASCENDING、ORIGINAL、DESCENDING 或 REVERSE |

顺序类型 REVERSE 和 DESCENDING 相同。

对于排序类型 TEXT，顺序类型 ASCENDING 和 A2Z 相同，DESCENDING、REVERSE 和 Z2A 相同。

对于排序类型 LOAD\_ORDER，顺序类型 ASCENDING 和 ORIGINAL 相同。

## 示例

示例 1:

`Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))`

表达式 `Aggr(Sum(UnitSales*UnitPrice), Customer)` 可计算销售额总值（按 Customer），并返回三个 Customer 值的阵列：295、715 和 120。

实际上，我们已建立了这些值的临时列表，而未创建包含这些值的显式表或列。这些值作为 Avg() 函数的输入，可计算销售额 376.6667 的平均值。（您必须在属性面板的 Presentation 下选中总计。）

示例 2:

`Aggr(NODISTINCT Max(UnitPrice), Customer)`

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

示例 3:

`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 在虚拟表中比较连续月份的客户数量，方法是以数字升序的顺序对月份进行排序，而不是以字母升序的顺序。

**示例中所使用的数据：**

创建一个以 Customer、Product、UnitPrice 和 UnitSales 为维度的表格。在表格中添加表达式作为度量。

`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 '|');`

## 了解详情

* [基本聚合函数](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/AggregationFunctions/basic-aggregation-functions.htm)
* [集合分析和集合表达式](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)