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函數會傳回與來源資料中的列具有相同元素數的陣列。

諸如 SumMin 以及 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)))

排序類型可以是: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 尋找銷售總值,然後傳回值陣列:295、715 和 120,為三個 Customer值。

實際上,我們已建立臨時值清單,且不需要建立明確表格或包含這些值的資料行。

這些值作為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 '|');