# 使用集合函数的集合修饰符

有时需要使用嵌套的集合定义定义一组字段值。例如，您可能希望选择购买了特定产品的所有客户，而不选择该产品。

在这种情况下，请使用元素集函数 `P()` 和 `E()`。它们分别返回字段的可能值和排除值的元素集。在括号内，可以指定相关字段和定义范围的集合表达式。例如：

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

这将返回 2021 年有交易的客户集。然后可以在集合修饰符中使用此选项。例如：

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

此集合表达式将选择这些客户，但不会将选择限制在 2021 年。

这些函数不能用于其他表达式。

此外，在元素集函数中只能使用自然集合。即，可通过简单选择项定义的记录集合。

例如，通过 `{1-$}` 指定的集合无法始终通过选择项进行定义，因此该集合不是自然集合。在非自然集合中使用这些函数将返回意外结果。

## 示例：使用集合函数的集合修饰符的图表表达式

[](https://help.qlik.com/en-US/sense/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-CN/sense/May2025/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)`

    总和 `Amount`，针对与年份 `2019` 相关的国家。但是，它不会将计算限制为 `2019`。

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

    总和 `Amount`，针对与年份 `2019` 相关的产品。但是，它不会将计算限制为 `2019`。

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

    总和 `Amount`，针对与产品 `Washer` 不相关的国家。

使用集合函数的集合修饰符

使用集合函数的集合修饰符

使用集合函数的集合修饰符 ![使用集合函数的集合修饰符。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_modifiers_set_functions.png)

有关表达式的更多信息，请参阅[在可视化中使用表达式](https://help.qlik.com/zh-CN/sense/May2025/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 ) | 同上。如果省略 Element 函数中的字段，该函数将返回外部任务中指定字段的正值。 |
| 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”的那些客户。元素函数 E( ) 在此返回排除的客户列表；即根据字段 Product 中的选择项“Shoe”排除的那些客户。 |