Aggr - 圖表函數 在此頁面
Aggr() 會傳回對所說明維度計算之運算式的值陣列。例如,每個地區,每個客戶的銷售額的最大值。
Aggr 函數用於巢狀彙總,其中每個維度值會計算一次第一個參數 (內部彙總)。會在第二個參數 (和後續參數) 指定維度。
此外,Aggr 函數應含括在外部彙總函數中,使用 Aggr 函數的結果陣列作為其巢狀所在之彙總的輸入。
語法:
Aggr( {SetExpression}[DISTINCT ] [NODISTINCT
] expr, StructuredParameter{, StructuredParameter} )
傳回的資料類型: 雙值
引數:
引數
expr
運算式包含一個彙總 函數。依預設,彙總函數將彙總選項所定義的一組可能記錄。
StructuredParameter
StructuredParameter 由維度 和該格式中的排序條件 (選用) 組成:(Dimension(Sort-type, Ordering))
該維度是單一欄位 且不能是運算式。維度用於確定 Aggr 運算式所計算的值陣列。
如果採用排序條件,則要對 Aggr 函數建立的值陣列 (為維度而計算) 進行排序。當排序順序影響含括 Aggr 函數的運算式的結果時,這一點很重要。
如需瞭解如何使用排序條件的詳情,請參見新增排序條件至結構化參數的維度中 。
SetExpression
依預設,彙總函數將彙總選項所定義的一組可能記錄。集合分析運算式可定義一組替代的記錄。
DISTINCT
如果 expression 引數前面有 distinct 限定詞,或者完全不使用任何限定詞,則維度值的各個相異組合只會產生一個傳回值。這是製作彙總的一般方式;每個維度值的相異組合都會呈現在圖表 中的一條線上。
NODISTINCT
如果 expression 引數前面有 nodistinct 限定詞,則視基礎資料結構而定,維度值的各個組合可能會產生多個傳回值。如果只有一個維度,aggr 函數會傳回與來源資料中的列具有相同元素數的陣列。
Sum 、Min 和 Avg 等基本彙總函數會傳回單一數值,而 Aggr() 函數可加以比較,藉此建立一個暫存結果集 (虛擬表格),在該結果集的基礎上可進行其他彙總。例如,在 Aggr() 陳述式中按客戶加總銷售額來計算平均銷售值,然後計算加總結果的平均值:Avg(TOTAL Aggr(Sum(Sales),Customer)) 。
提示備註 若要在多個層級中建立巢狀圖表彙總,請在計算維度中使用 Aggr() 函數。
限制:
在 Aggr() 函數中的每個維度都必須是單一欄位,且不能為運算式 (計算維度)。
新增排序條件至結構化參數的維度中
在其基本形式中,Aggr 函數語法中的引數 StructuredParameter 是單一維度。運算式:Aggr(Sum(Sales, Month)) 找到每個月的總銷售值。但是,如果含括在另一個彙總函數中,除非使用排序條件,否則會產生意料之外的結果。這是因為一些維度可能按數值或字母順序等排序。
在 Aggr 函數的 StructuredParameter 引數中,您可指定運算式中維度的排序條件。如此一來,您便在 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 找到總銷售值,並傳回值的陣列:295、715 和 120,用於三個 Customer 值。
我們已有效建立各個值的臨時清單,而不必建立包含這些值的明確表格或資料行。
這些值作為 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 '|');
如需更多關於使用內嵌載入的資訊,請參閱 使用內嵌載入以載入資料 。
圖表運算式
在 Qlik Sense 工作表中建立具有 Customer 、Product 、UnitPrice 與 UnitSales 作為維度的表格視覺化。將以下運算式作為量值新增至表格:
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 工作表中建立具有 Year 和 Month 作為維度的表格視覺化。將以下運算式作為量值新增至表格:
Sum(Sales)
Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) )) 在表格中以結構化 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
解釋
此範例以時間性遞增順序顯示每年十二個月期間的彙總值,亦即 Aggr() 運算式的結構化參數 (數值,遞增) 部分。需要特定維度作為結構化參數: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))
))
應可清楚看見只有後面的運算式執行所需的彙總值累積。