# 使用集合函數的集合修飾詞

有時候您需要使用巢狀集合定義來定義欄位值集合。例如，您可能希望選取已購買特定產品的所有客戶，而不選取該產品。

在這類情況下，使用元素集函數 `P()` 和 `E()`。這會分別傳回欄位可能值和排除值的元素集。在括弧內，可以在問題中指定欄位，以及定義範圍的集合運算式。例如︰

`P({1<Year = {2021}>} Customer)`

這將會傳回在 2021 年曾有交易的客戶集合。然後您可以在集合修飾詞中使用此。例如︰

`Sum({<Customer = P({1<Year = {2021}>} Customer)>} Amount)`

此集合運算式將會選取這些客戶，但不會將選項限制為 2021。

這些函數無法用於其他運算式。

此外，在元素集函數內部只能使用自然集合。即可由單一選項定義的一組記錄。

例如，`{1-$}` 指定的集合無法一直透過選取來定義，因此不是自然集合。將這些函數用於非自然集合會傳回非預期的結果。

## 範例：使用集合函數的集合修飾詞的圖表運算式

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-implicit-field-value-definitions.htm)

#### 範例 - 圖表運算式

載入指令碼

在資料載入編輯器中載入下列資料作為內嵌載入，以建立以下的圖表運算式範例。

```
MyTable:
Load 
Year(Date) as Year,
Date#(Date,'YYYY-MM-DD') as ISO_Date, 
Date(Date#(Date,'YYYY-MM-DD'),'M/D/YYYY') as US_Date, 
Country, Product, Amount 
Inline
[Date, Country, Product, Amount
2018-02-20, Canada, Washer, 6
2018-07-08, Germany, Anchor bolt, 10
2018-07-14, Germany, Anchor bolt, 3
2018-08-31, France, Nut, 2
2018-09-02, Czech Republic, Bolt, 1
2019-02-11, Czech Republic, Bolt, 3
2019-07-31, Czech Republic, Washer, 6
2020-03-13, France, Anchor bolt, 1
2020-07-12, Canada, Anchor bolt, 8
2020-09-16, France, Washer, 1];	
```

如需更多關於使用內嵌載入的資訊，請參閱 [使用內嵌載入以載入資料](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm)。

圖表運算式

透過下列圖表運算式在 Qlik Sense 工作表中建立表格。

表格 - 使用集合函數的集合修飾詞

| 國家/地區 | Sum(Amount) | Sum({&lt;Country=P({&lt;Year={2019}&gt;}Country)&gt;} Amount) | Sum({&lt;Product=P({&lt;Year={2019}&gt;}Product)&gt;} Amount) | Sum({&lt;Country=E({&lt;Product={Washer}&gt;}Country)&gt;} Amount) |
| --- | --- | --- | --- | --- |
| 總計 | 41 | 10 | 17 | 13 |
| 加拿大 | 14 | 0 | 6 | 0 |
| 捷克 | 10 | 10 | 10 | 0 |
| 法國 | 4 | 0 | 1 | 0 |
| 德國 | 13 | 0 | 0 | 13 |

解釋

* 維度：

  * `Country`

* 量值：

  * `Sum(Amount)`

    不含集合運算式的 `Amount` 總和。

  * `Sum({<Country=P({<Year={2019}>} Country)>} Amount)`

    與年份 `2019` 相關國家的總和 `Amount`。不過，這不會將計算限制為 `2019`。

  * `Sum({<Product=P({<Year={2019}>} Product)>} Amount)`

    與年份 `2019` 相關產品的總和 `Amount`。不過，這不會將計算限制為 `2019`。

  * `Sum({<Country=E({<Product={Washer}>} Country)>} Amount)`

    與產品 `Washer` 相關國家的總和 `Amount`。

使用集合函數的集合修飾詞

使用集合函數的集合修飾詞

使用集合函數的集合修飾詞 ![使用集合函數的集合修飾詞。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_modifiers_set_functions.png)

如需關於運算式的詳細資訊，請參閱[在視覺化中使用運算式](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/use-expressions-in-visualizations.htm)。

| 範例 | 結果 |
| --- | --- |
| sum( {$&lt;Customer = P({1&lt;Product={'Shoe'}&gt;} Customer)&gt;} Sales ) | 會傳回目前選項的銷售額，但僅針對曾經買過「Shoe」產品的客戶。元素函數 P( ) 在此會傳回可能客戶的清單，亦即以欄位 Product 中選項為「Shoe」所表示的客戶。 |
| sum( {$&lt;Customer = P({1&lt;Product={'Shoe'}&gt;})&gt;} Sales ) | 同上。如果省略元素函數中的欄位，則函數會傳回外部指派中所指定之欄位的可能值。 |
| sum( {$&lt;Customer = P({1&lt;Product={'Shoe'}&gt;} Supplier)&gt;} Sales ) | 會傳回目前選項的銷售額，但僅針對曾經供應過產「Shoe」品的客戶，亦即客戶也是供應商。元素函數 P( ) 在此會傳回可能客戶的清單，亦即以欄位 Product 中選項為「Shoe」所表示的供應商。應商的清單接著會做為欄位 Customer 中的選項。 |
| sum( {$&lt;Customer = E({1&lt;Product={'Shoe'}&gt;})&gt;} Sales ) | 會傳回目前選項的銷售額，但僅針對不曾買過「Shoe」產品的客戶。元素函數 P( ) 在此會傳回已排除客戶的清單，亦即以欄位 Product 中選項為「Shoe」所排除的客戶。 |