# 集合分析與集合運算式

集合分析提供定義資料值集合 (或群組) 的方法，與由目前選項定義的一般集合不同。

通常進行選取時，Sum、Max、Min、Avg 和 Count 等彙總函數會彙總您已選取的選項：目前選項。您的選項會自動定義要加以彙總的資料集。使用集合分析，您可定義獨立於目前選項的群組。若想要顯示特定值，這項功能會非常實用，例如，某項產品跨所有地區的市占率，不考慮目前選項。

進行不同比較時 (例如與滯銷產品相較下哪些是暢銷產品，或是今年與去年相比)，集合分析的功能也很強大。

試想以下範例：您在列表框中選取了 2010 年並開始使用一份文件。彙總接著就會以該選項為依據，而圖表只會顯示那一年的值。選取新選項時，圖表會隨之更新。系統會將目前選項所定義之一組可能記錄加以彙總。使用集合分析，您可定義一個您感興趣的集合，且不會取決於選項。

## 建立集合運算式

探討集合分析範例的不同部分之前，必須先定出集合運算式和集合分析之間的一項差異：

定義欄位值集合亦即定義集合運算式；而使用集合運算式分析資料即為集合分析。因此，本節其餘內容將集中說明集合運算式和其元件。

此為集合分析範例：`sum( {$<Year={2009}>} Sales )`，其中 `{$<Year={2009}>}` 為集合運算式。

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

範例： 內部集合運算式

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

範例： 外部集合運算式

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

如需關於內部和外部集合運算式的更多資訊，請參閱 [內部和外部集合運算式](https://help.qlik.com/zh-TW/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm)。

集合運算式包含以下部分的組合：

* 識別碼。一或多個識別碼可定義集合運算式與所評估運算式其餘內容之間的關係。簡單的集合運算式中包含單一識別碼，例如貨幣符號 `{$}`，表示目前選項中的所有記錄。

* 運算子。例如，如果有一個以上的識別碼，系統會指定以識別碼代表的資料集結合以建立子集合或超集合的方式，藉此使用一個運算子或一個運算子來縮小資料集。

* 修飾詞。修飾詞或修飾詞可新增到集合運算式以變更選項。修飾詞可單獨使用，或用來修改識別碼以篩選資料集。

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

  語法：`&`

  請參閱： [空集合保留旗標](https://help.qlik.com/zh-TW/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/empty-set-preserve-flag.htm)

資訊備註集合運算式只能用於圖表的運算式，不能用於指令碼運算式。

以下小節將更詳細說明識別碼、運算子和修飾詞。

### 識別碼

識別碼會定義集合運算式與所評估欄位值或運算式之間的關係。

在範例 `sum( {$<Year={2009}>} Sales )` 中，識別碼是貨幣符號 $，代表要評估的記錄集合包含目前選項的所有記錄。接著會用集合運算式部分修飾詞進一步篩選此集合。在更複雜的集合運算式中，可使用運算子結合兩個識別碼。

$ 集合識別碼與不陳述集合識別碼相同。例如，在上面的範例中，運算式 `Sum( {$<Year = {2009}>} Sales )` 相當於 `Sum( {<Year = {2009}>} Sales )`。

此表格顯示一些常見識別碼。

常見識別碼

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

範例：

範例與結果

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

### 運算子

運算子可用來包含、排除或交集部分或全部資料集。所有運算子都將集合作為運算元使用，並傳回一個集合作為結果。

此表格顯示可在集合運算式中使用的運算子。

集合運算子

| 運算子 | 描述 |
| --- | --- |
| `+` | 聯集。此二元運算會傳回一個集合，其中包含的記錄屬於兩個集合運算元中的任一個集合。 |
| `-` | 差集。此二元運算會傳回一組記錄，這些記錄屬於兩個集合算元中的第一個集合，但不屬於第二個集合。此外，當作為一元運算子時，會傳回補集。 |
| `*` | 交集。此二元運算會傳回一個集合，其中包含的記錄同時屬於兩個集合運算元。 |
| `/` | 對稱差 (XOR)。此二元運算會傳回一個集合，其中包含的記錄屬於兩個集合運算元中的任一個集合，但不同時屬於這兩個集合。 |

範例：

範例與結果

| 範例 | 結果 |
| --- | --- |
| `sum( {1-$} Sales )` | 會傳回選項所排除之一切記錄的銷售。 |
| `sum( {$*BM01} Sales )` | 會傳回選項和書籤 BM01 之交集的銷售。 |
| `sum( {-($+BM01)} Sales )` | 會傳回選項和書籤 BM01 所共同排除的銷售。 |
| `Sum({$<Year={2009}>+1<Country={'Sweden'}>} Sales)` | 會傳回與當前選擇相關的 2009 年銷售，並新增與國家 Sweden 所有年份相關的全套資料。<br><br>此運算式使用下列集合識別碼：`$`。因此，這等同於此運算式，這沒有陳述集合識別碼：`Sum({<Year={2009}>+1<Country={'Sweden'}>} Sales)`。 |

### 修飾詞

修飾詞可用來新增或變更選項。這類修改可編寫於集合運算式中。修飾詞包含一個或多個欄位名稱，每一項後面都接著一個或多個可在欄位中選取的選項。修飾詞的開頭與結尾是角括弧 &lt;&gt; 。

集合修飾詞可修改前面的集合識別碼選擇。如果沒有引用集合識別碼，則目前選項狀態是隱含的。

範例：

範例與結果

| MyField | 結果 |
| --- | --- |
| `sum({$<OrderDate = DeliveryDate>} Sales)` | 會傳回目前選項的銷售，其中 OrderDate = DeliveryDate。<br><br>此運算式使用下列集合識別碼：`$`。因此，這等同於此運算式，這沒有陳述集合識別碼：`sum({<OrderDate = DeliveryDate>} Sales)`。 |
| `sum({1<Region = {US}>} Sales)` | 會傳回 US 區域的銷售額，忽略目前選項。 |
| `sum({$<Region = >} Sales)` | 會傳回目前選項的銷售額，但移除 Region 選項。<br><br>此運算式使用下列集合識別碼：`$`。因此，這等同於此運算式，這沒有陳述集合識別碼：`sum({<Region = >} Sales)`。 |
| `sum({<Region = >} Sales)` | 會傳回與上例相同的結果。省略要修改的組識別碼時，會假定為已繼承狀態。 |
| `sum({$<Year={2000}, Region={"U*"}>} Sales)` | 會傳回目前選項的銷售額，但為 Year 和 Region 兩者中的新選項。<br><br>此運算式使用下列集合識別碼：`$`。因此，這等同於此運算式，這沒有陳述集合識別碼：`sum({<Year={2000}, Region={"U*"}>} Sales)`。 |

請參閱 [集合修飾詞](https://help.qlik.com/zh-TW/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-modifiers.htm) 瞭解修飾詞的更多詳細說明，以及如何在更複雜的集合分析中使用它們。