# 集合修饰符和集合运算符

集合运算符用于包含、排除或交汇不同的图元集。它们结合了不同的方法来定义元素集。

运算符与用于集合标识符的运算符相同。

运算符

| 运算符 | 说明 |
| --- | --- |
| `+` | 并集运算符。此二元运算返回两个集合操作数中所有记录或元素构成的集合。 |
| `-` | 异或运算符。此二元运算返回由属于第一个集合操作数但不属于另一个集合操作数的记录或元素构成的集合。如用于一元运算，则结果是补集。 |
| `*` | 交集运算符。此二元运算返回两个集合操作数中所有记录或元素构成的集合。 |
| `/` | 对称差集 `(XOR)`。此二元运算返回两个集合操作数中所有记录或元素构成的集合。 |

例如，以下两个修饰符定义相同的字段值集：

* `<Year = {1997, "20*"}>`

* `<Year = {1997} + {"20*"}>`

这两个表达式都选择 `1997` 和以 `20` 开头的年份。换句话说，是这两个条件的结合。

集合运算符还允许更复杂的定义。例如：

`<Year = {1997, "20*"} - {2000}>`

此表达式将选择与上述年份相同的年份，但不包括年份 `2000`。

有关更多信息，请参阅[集合运算符](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-operators.htm)。

## 示例：带有集合运算符的集合修饰符的图表表达式

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-set-operators.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/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm)。

图表表达式

使用以下图表表达式在 Qlik Sense 工作表中创建表。

表格 - 集合修饰符和集合运算符

| 国家/地区 | Sum(Amount) | Sum({&lt;Year={"&gt;2018"}-{2020}&gt;} Amount) | Sum({&lt;Country=-{Germany}&gt;} Amount) | Sum({&lt;Country={Germany}+P({&lt;Product={Nut}&gt;}Country)&gt;} Amount) |
| --- | --- | --- | --- | --- |
| 总计 | 41 | 9 | 28 | 17 |
| 加拿大 | 14 | 0 | 14 | 0 |
| 捷克共和国 | 10 | 9 | 10 | 0 |
| 法国 | 4 | 0 | 4 | 4 |
| 德国 | 13 | 0 | 0 | 13 |

解释

* 维度：

  * `Country`

* 度量：

  * `Sum(Amount)`

    没有集合表达式的总和 `Amount`。

  * `Sum({<Year={">2018"}-{2020}>}Amount)`

    总和 `Amount`，针对 `2018` 之后的所有年份，不包括 `2020`。

  * `Sum({<Country=-{Germany}>}Amount)`

    总和 `Amount`，针对 `Germany` 之外的所有国家/地区。请注意一元排除运算符。

  * `Sum({<Country={Germany}+P({<Product={Nut}>}Country)>}Amount)`

    总和 `Amount`，针对 `Germany` 以及与产品 `Nut` 关联的所有国家。

集合修饰符和集合运算符

集合修饰符和集合运算符

集合修饰符和集合运算符 ![集合修饰符和集合运算符。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_set_operators.png)

有关表达式的更多信息，请参阅[在可视化中使用表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/use-expressions-in-visualizations.htm)。

| 实例 | 结果 |
| --- | --- |
| sum( {$&lt;Product = Product + {OurProduct1} – {OurProduct2} &gt;} Sales ) | 返回当前选择项的销售额，但将产品“OurProduct1”添加到所选产品列表中，并从所选产品列表中移除“OurProduct2”。 |
| sum( {$&lt;Year = Year + ({“20\*”,1997} – {2000}) &gt;} Sales ) | 返回当前选择项的销售额，但字段“Year”中包含附加的选择项：1997 年和以“20”开头的所有年份，但不包括 2000 年。<br><br>注意：如果当前选择项中包含 2000，它也将在修改后被包括进来。 |
| sum( {$&lt;Year = (Year + {“20\*”,1997}) – {2000} &gt;} Sales ) | 返回的结果几乎与上例相同，但同时如果 2000 年最初包含在当前选择项中，此时将排除 2000 年。该例显示的是使用括号定义优先顺序的重要性。 |
| sum( {$&lt;Year = {“\*”} – {2000}, Product = {“\*bearing\*”} &gt;} Sales ) | 返回当前选择项的销售额，但在“Year”中包含新选择项：除 2000 年以外的所有年份；并且仅针对包含字符串 'bearing' 的产品。 |