# 巢狀彙總

圖表運算式中的任何欄位名稱必須恰好由一個彙總函數括住。若您需要巢狀彙總，可以使用 Aggr() 新增第二彙總層級。Aggr() 包含作為引數的彙總函數。

## 函數中永遠一個彙總層級

一般應用程式可能包含：

* 資料中的一百萬個記錄
* 樞紐分析表中的一百列
* 量測計或文字方塊中的單一 KPI

雖然範圍不同，但全部三個數字仍可呈現所有資料。數字只是不同的彙總層級。

彙總函數使用來自許多記錄的值作為輸入，並摺疊為一個可視為所有記錄摘要的單一值。有一個限制：您無法在另一個彙總函數內部使用彙總函數。您通常需要將每個欄位參考確切納入一個彙總函數中。

下列運算式將可運作：

* Sum(Sales)
* Sum(Sales)/Count(Order Number)

下列運算式將無法運作，因為這嵌於彙總中：

* Count(Sum(Sales))

對此的解決方案是採用 Aggr() 函數的形式。與其名稱相反，這不是彙總函數。這是「多對多」函數，像是數學中的矩陣。這將具有 N 記錄的表格轉換為具有 M 記錄的表格。這會傳回值的陣列。這也被視為具有一個量值以及一個或數個維度的虛擬直式表格。

提示備註若要在多個層級中建立巢狀圖表彙總，請在計算維度中使用 Aggr() 函數。

## 對巢狀彙總使用 Aggr()

Aggr() 會傳回對所說明維度計算之運算式的值陣列。例如，每個地區，每個客戶的銷售額的最大值。在進階函數中，Aggr() 函數含括在另一個彙總函數中，使用 Aggr() 函數的結果陣列作為其巢狀所在之彙總的輸入。

使用時，Aggr() 陳述式會產生虛擬表格，其中透過一個或多個維度將某個運算式分組。然後可以透過外部彙總函數進一步彙總此虛擬表格的結果。

## 計算最大平均訂單值

現在要在圖表運算式中使用簡單的 Aggr() 陳述式。

我們想要在區域層級看見整體指標，但也要顯示其他兩個複雜運算式：

* 每個區域內部按經理顯示的最大平均訂單值。
* 負責該最大平均訂單值的經理。

我們可以使用標準運算式 Sum(Sales)/Count([Order Number]) 輕鬆計算每個區域的平均訂單值。

在應用程式內部，您將於 Nested Aggregations 工作表找到標題為 Aggr() function 的表格。

請執行下列動作：

1. 選取可用的 Aggr() function 表格。  
   屬性面板會開啟。
2. 按一下新增欄，然後選取量值。
3. 按一下 the 運算式 icon 符號。  
   運算式編輯器就會開啟。
4. 輸入下列內容：Sum(Sales)/Count([Order Number])
5. 按一下套用。

表格顯示每個區域的平均訂單值。

![表格顯示每個區域的平均訂單值。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table1.png)

提示備註作為最佳做法，務必適當格式化您的資料。在此情況下，在每欄中，我們將會變更標籤以呈現計算。在具有貨幣值的欄中，我們將數字格式變更為金錢，並將格式模式變更為 $ #,##0;-$ #,##0。

我們的目標是擷取每個區域的最大平均訂單值。我們必須使用 Aggr() 告知 Qlik Sense 我們想要獲取每個區域、每個經理的平均訂單值，然後顯示最大者。若要取得每個區域、每個經理的平均訂單值，我們必須將這些維度納入 Aggr() 陳述式：

Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)

此運算式造成 Qlik Sense 產生如下的虛擬表格：

Aggr() 函數的虛擬表格顯示每個區域、每個經理的平均訂單值。

![具有 AGGR 函數的表格顯示每個區域、每個經理的平均訂單值。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table2.png)

Qlik Sense 計算每個區域、每個經理的個別平均訂單值時，將需要尋找其中的最大值。我們這麼做的方式是使用 Max() 包覆 Aggr() 函數：

Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))

請執行下列動作：

1. 按一下新增欄，然後選取量值。
2. 按一下 the 運算式 icon 符號。  
   運算式編輯器就會開啟。
3. 輸入下列內容：Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
4. 按一下套用。

表格顯示區域、平均訂單值以及每個區域、每個經理的最大平均訂單值。

![表格顯示區域、平均訂單值以及每個區域、每個經理的最大平均訂單值。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table3.png)

您在區域層級能查看所有經理的最大平均訂單值。這是兩個複雜運算式中的第一個！下一項需求是讓負責這些最大平均訂單值的經理名稱顯示在值本身旁邊。

若要這麼做，我們會使用與之前相同的 Aggr() 函數，但這次會連同 FirstSortedValue() 函數一起使用。FirstSortedValue() 函數告知 Qlik Sense 針對函數第二部分指定的特定維度，向我們提供經理：

FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))

提示備註運算式中有一個微小但重要的部分：Aggr() 運算式之前有個減號。在 FirstSortedValue() 函數當中，您可以指定資料陣列的排序順序。在此情況下，減號告知 Qlik Sense 從最大到最小排序。

請執行下列動作：

1. 按一下新增欄，然後選取量值。
2. 按一下 the 運算式 icon 符號。  
   運算式編輯器就會開啟。
3. 輸入下列內容：FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
4. 按一下套用。

表格顯示區域、平均訂單值、每個區域的最大平均訂單值以及負責該訂單值的經理。

![表格顯示區域、平均訂單值、每個區域的最大平均訂單值以及負責該訂單值的經理。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-aggr-table.png)

如需詳細資訊，請參閱 [Aggr](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/aggr.htm)

如需詳細資訊，請參閱 [FirstSortedValue](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/firstsortedvalue.htm)