# 集合分析

在應用程式中進行選取時，您會定義資料中的記錄子集。會根據此子集計算彙總函數，例如 `Sum()`、`Max()`、`Min()`、`Avg()` 和 `Count()`。

換言之，您的選項定義彙總範圍；這定義進行計算的記錄集合。

集合分析提供定義範圍的方法，與由目前選項定義的記錄集合不同。此新範圍也可被視為替代選項。

若您想要比較目前選項與特殊值，例如去年的值或全球市場占比，則這會很實用。

[Set Analysis examples](https://play.vidyard.com/xFzHJPodxxWJNV5MVizDnv)

## 集合運算式

集合運算式可用於彙總函數內部和外部，並以大括弧括住。

範例： 內部集合運算式

```
Sum( {$<Year={2021}>} Sales )
```

範例： 外部集合運算式

```
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
```

如需關於內部和外部集合運算式的詳細資訊，請參閱[內部和外部集合運算式](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm)。

集合運算式包含以下元素的組合：

* 識別碼。集合識別碼代表其他地方定義的選項。這也代表資料中的特定記錄集合。這可以是目前選項、來自書籤的選項或來自替代狀態的選項。簡單的集合運算式中包含單一識別碼，例如貨幣符號 {$}，表示目前選項中的所有記錄。

  範例：`$`、`1`、`BookMark1`、`State2`

  請參閱： [集合識別碼](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-identifiers.htm)

* 運算子。集合運算式可用來建立不同集合識別碼之間的聯集、差異或交集。以此方式，您可以建立由集合識別碼定義的選項子集或超集。

  範例：`+`、`-`、`*`、`/`

  請參閱： [集合運算子](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-operators.htm)

* 修飾詞。集合修飾詞可新增至集合識別碼以變更其選項。修飾詞也能單獨使用，這將會修改預設識別碼。修飾詞必須以角括弧 `<…>` 括起。

  範例：`<Year={2020}>`、`<Supplier={ACME}>`

  請參閱： [集合修飾詞](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers.htm)

* 空集合保留旗標。一種進階元素，可用於外部集合運算式鏈中的任何外部集合運算式 (最後一個除外)。此旗標會覆寫在這些外部集合運算式中定義的任何集合上的隱含集合清除，簡化進階運算式的組態。

  語法： `&`

  請參閱： [空集保留旗標](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/empty-set-preserve-flag.htm)

合併元素以形成集合運算式。

集合運算式中的元素

集合運算式中的元素

集合運算式中的元素 ![集合運算式中的元素。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_callout.png)

例如，以上集合運算式從彙總 `Sum(Sales)` 建置。

第一個運算元傳回目前選項的 `2021` 年銷售額，這由 `$` 集合識別碼和包含 `2021` 年選項的修飾詞指示。第二個運算元傳回 `Sweden` 的 `Sales`，並忽略目前選項，這由 `1` 集合識別碼指示。

最終，運算式傳回包含記錄的集合，這些記錄屬於兩個集合運算元的任一個，由 `+` 集合運算子指示。

有關完整語法描述，請參閱 [集合運算式的語法](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/syntax-for-sets.htm)。

## 範例

合併以上集合運算式元素的範例在下列主題中提供：

* [含搜尋的集合修飾詞](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-advanced-searches.htm)

* [含貨幣符號展開的集合修飾詞](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-dollar-sign-expansions.htm)

* [含集合運算子的集合修飾詞](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-set-operators.htm)

* [含隱含集合運算子的集合修飾詞](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-using-assignments-implicit-set-operators.htm)

* [使用集合函數的集合修飾詞](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-implicit-field-value-definitions.htm)

若要嘗試一些其他運算式，請參閱 [教學課程 - 建立集合運算式](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-analysis-tutorial.htm)。

## 自然集合

通常，集合運算式代表資料模型中的記錄集合，以及定義此資料子集的選項。在此情況下，集合稱為自然集合。

含有或不含集合修飾詞的集合識別碼一律代表自然集合。

不過，使用集合運算子的集合運算式也代表記錄子集，但通常仍無法使用欄位值的選項來描述。這樣的運算式是非自然集合。

例如，`{1-$}` 提供的集合不可永遠由選項定義。因此這不是自然集合。可以載入下列資料、新增至表格然後使用篩選窗格進行選取，以顯示此。

```
Load * Inline
[Dim1, Dim2, Number
A, X, 1
A, Y, 1
B, X, 1
B, Y, 1];		
```

為 Dim1 和 Dim2 進行選取後，就會取得顯示在下列表格中的檢視畫面。

含有自然和非自然集合的表格

含有自然和非自然集合的表格

含有自然和非自然集合的表格 ![含有自然和非自然集合的表格。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_natural.png)

第一個量值中的集合運算式使用自然集合：這對應至進行 {$} 的選項。

第二個量值則不同。這使用 {1-$}。無法選取對應至此集合的選項，因此這不是自然集合。

此差異會造成一些後果：

* 集合修飾詞只能套用至集合識別碼。這些無法套用至任意集合運算式。例如，無法使用如下的集合運算式：

  ```
  { (BM01 * BM02) <Field={x,y}> }
  ```

  在此，一般 (圓) 括弧暗示應在套用集合修飾詞之前評估 BM01 和 BM02 之間的交集。因為沒有可以修改的元素集。

* 您無法在 P() 和 E() 元素函數內部使用非自然集合。這些函數傳回元素集，但無法從非自然集合推算元素集。

* 若資料模型有許多表格，使用非自然集合的量值無法一律歸類到合適的維度值。例如，在下列圖表中，一些排除的銷售數字歸類到正確的 Country，而其他則有 NULL 作為 Country。

  含有非自然集合的圖表

  含有非自然集合的圖表

  含有非自然集合的圖表 ![含有非自然集合的表格。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_non_natural.png)

  是否正確進行指派取決於資料模型。在此情況下，若這涉及選項排除的國家，則無法指派數字。

| 識別碼 | 描述 |
| --- | --- |
| 1 | 代表應用程式中所有記錄的完整集合，不考慮任何已選取的選項。 |
| $ | 代表目前選項的記錄。因此，集合運算式 {$} 等同於未指明集合運算式。 |
| $1 | 代表前一個選項。$2 代表前面一個選項，以此類推。 |
| $\_1 | 代表下一個 (前進) 選項。$\_2 代表下面一個選項，以此類推。 |
| BM01 | 您可使用任何書籤識別碼或書籤名稱。 |
| MyAltState | 您可以按其狀態名稱引用在輪替狀態機進行的選擇。 |

| 範例 | 結果 |
| --- | --- |
| sum ({1} Sales) | 傳回應用程式的總銷售額，會忽略選項，但不會忽略維度。 |
| sum ({$} Sales) | 會傳回目前選項的銷售額，亦即與 sum(Sales) 相同。 |
| sum ({$1} Sales) | 會傳回前一個選項的銷售。 |
| sum ({BM01} Sales) | 會傳回書籤 BM01 的銷售。 |

| 範例 | 結果 |
| --- | --- |
| sum({$&lt;OrderDate = DeliveryDate&gt;} Sales) | 會傳回目前選項的銷售，其中 OrderDate = DeliveryDate。 |
| sum({1&lt;Region = {US}&gt;} Sales) | 會傳回 US 區域的銷售額，忽略目前選項。 |
| sum({$&lt;Region = &gt;} Sales) | 會傳回目前選項的銷售額，但移除 Region 選項。 |
| sum({&lt;Region = &gt;} Sales) | 會傳回與上例相同的結果。當省略要修改的集合時，會採用 $。 |
| sum({$&lt;Year={2000}, Region={“U\*”}&gt;} Sales) | 會傳回目前選項的銷售額，但為Year 和 Region 兩者中的新選項。 |

相關學習內容：

* [如何使用目前的選項狀態設定集合運算式？](https://help.qlik.com/lnk/How_configure_set_expression_using_selection_state)

## 瞭解更多資訊

* [如何使用目前的選項狀態設定集合運算式？](https://help.qlik.com/lnk/How_configure_set_expression_using_selection_state)