Aggr - 图表函数 在该页面上
Aggr() 用于返回在声明维度或维度上计算的表达式的值的阵列。例如,每个区域的每位客户的最大销售额值。
Aggr 函数用于嵌套聚合,其中每个维度值计算一次其第一个参数(内部聚合)。维度在第二个参数(以及后续参数)中指定。
此外,其中在外部聚合函数中要将 Aggr 函数括起来,从而将 Aggr 函数的结果阵列用作其所嵌套的聚合的输入。
语法:
Aggr( {SetExpression}[DISTINCT ] [NODISTINCT
] expr, StructuredParameter{, StructuredParameter} )
返回数据类型: 双
参数:
参数
expr
表达式包含聚合 函数。聚合函数会默认聚合选择项定义的可能记录集合。
StructuredParameter
StructuredParameter 包括维度 并可选地包括排序标准,格式为:(Dimension(Sort-type, Ordering))
维度是一个单一字段 ,并且不能为表达式。维度用于确定为其计算表达式 Aggr 的值的阵列。
如果包含排序标准,则会将对维度计算的 Aggr 函数创建的值的阵列排序。如果排序顺序会影响其中包含 Aggr 函数的表达式的结果,则这点很重要。
有关如何使用排序标准的详细信息,请参阅向结构化参数中的维度添加排序标准 。
SetExpression
聚合函数会默认聚合选择项定义的可能记录集合。可选记录集合可由集合分析表达式定义。
DISTINCT
如果表达式参数前面是 distinct 限定符,或者根本没有使用限定符,则维度值的每个特殊组合只生成一个返回值。这是实现聚合的常规方式 – 维度值的每个特殊组合将在图表 中占用一行。
NODISTINCT
如果表达式参数前面是 nodistinct 限定符,各维度值组合可能生成多个返回值,具体取决于基础数据结构。如果只有一个维度,则 aggr 函数将返回元素数量与源数据中的行数相同的阵列。
基本聚合函数,例如 Sum 、Min 和 Avg ,在比较 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)))
排序类型可为: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 相同。
示例 - 使用 Aggr 的图表表达式
示例 - 图表表达式
图表表达式示例 1
加载脚本
将以下数据作为数据加载编辑中的内联加载载入,以创建以下图表表达式示例。
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|0|19
] (delimiter is '|');
有关使用内联加载的详细信息,请参阅使用内联加载来加载数据 。
图表表达式
在 Qlik Sense 工作表 中创建 KPI 可视化 。在 KPI 中添加以下表达式作为度量 :
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))
结果
376.7
解释
表达式 Aggr(Sum(UnitSales*UnitPrice), Customer) 按 Customer 查找销售额总计值,并返回值阵列:对于 Customer 值为 295、715 和 120。
实际上,我们创建了临时的值列表,而不必创建包含这些值的明确的表格或列。
这些值可用作 Avg() 函数的导入值,以查找销售额平均值 376.7。
有关表达式的更多信息,请参阅在可视化中使用表达式 。
图表表达式示例 2
加载脚本
将以下数据作为数据加载编辑中的内联加载载入,以创建以下图表表达式示例。
ProductData:
LOAD * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|BB|7|12
Betacab|CC|2|22
Betacab|CC|4|20
Betacab|DD|25|25
Canutility|AA|8|15
Canutility|AA|5|11
Canutility|CC|0|19
] (delimiter is '|');
有关使用内联加载的详细信息,请参阅使用内联加载来加载数据 。
图表表达式
创建一个以 Customer 、Product 、UnitPrice 和 UnitSales 为维度的 Qlik Sense 工作表中的表格可视化。在表格中添加以下表达式作为度量:
Aggr(NODISTINCT Max(UnitPrice), Customer, Product)
结果
Customer
Product
UnitPrice
UnitSales
Aggr(NODISTINCT Max(UnitPrice), Customer, Product)
Astrida
AA
15
10
16
Astrida
AA
16
4
16
Astrida
BB
9
9
15
Astrida
BB
15
10
15
Betacab
BB
10
5
12
Betacab
BB
12
7
12
Betacab
CC
20
4
22
Betacab
CC
22
2
22
Betacab
DD
25
25
25
Canutility
AA
11
5
15
Canutility
AA
15
8
15
Canutility
CC
19
0
19
解释
值阵列:16、16、15、15、12、12、22、22、25、15、15 和 19。nodistinct 限定符意味着阵列包含源数据中每行的一个元素:每个值都是每个 Customer 和 Product 的最高 UnitPrice 。
图表表达式示例 3
加载脚本
将以下数据作为数据加载编辑中的内联加载载入,以创建以下图表表达式示例。
Set vNumberOfOrders = 1000;
OrderLines:
Load
RowNo() as OrderLineID,
OrderID,
OrderDate,
Round((Year(OrderDate)-2005)*1000*Rand()*Rand()*Rand1) as Sales
While Rand()<=0.5 or IterNo()=1;
Load * Where OrderDate<=Today();
Load
Rand() as Rand1,
Date(MakeDate(2013)+Floor((365*4+1)*Rand())) as OrderDate,
RecNo() as OrderID
Autogenerate vNumberOfOrders;
Calendar:
Load distinct
Year(OrderDate) as Year,
Month(OrderDate) as Month,
OrderDate
Resident OrderLines;
图表表达式
在 Qlik Sense 工作表中创建表可视化,以年 和月 为维度。在表格中添加以下表达式作为度量:
Sum(Sales)
Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) )) 标记为表格中的 Structured Aggr()。
结果
Year
Month
Sum(Sales)
Structured Aggr()
2013
Jan
53495
53495
2013
Feb
48580
102075
2013
Mar
25651
127726
2013
Apr
36585
164311
2013
May
61211
225522
2013
Jun
23689
249211
2013
Jul
42311
291522
2013
Aug
41913
333435
2013
Sep
28886
362361
2013
Oct
25977
388298
2013
Nov
44455
432753
2013
Dec
64144
496897
2014
Jan
67775
67775
解释
此示例按时间升序显示每年 12 个月期间的聚合值,因此是 Aggr() 表达式的结构化参数 (Numeric, Ascending) 部分。需要将两个特定维度作为结构化参数:Year 和 Month ,排序为 (1) Year (数字)和 (2) Month (数值)。在表格或图表可视化中必须使用这两个维度。Aggr() 函数的维度列表必须与可视化中使用的对象的维度相对应。
您可在表格中或单独的折线图 中比较这些度量之间的差异。
Sum(Aggr(
Rangesum(Above(Sum(Sales),0,12)),
(Year),
(Month)
))
Sum(Aggr(
Rangesum(Above(Sum(Sales),0,12)),
(Year, (Numeric, Ascending)),
(Month, (Numeric, Ascending))
))
应该清楚地看到,只有后一个表达式执行所需的聚合值累加。