# 集合修饰符和货币符号扩展

美元符号扩展是在解析和计算表达式之前计算的结构。然后将结果注入到表达式中，而不是注入 `$(…)`。然后使用美元符号扩展的结果计算表达式。

表达式编辑器显示美元符号扩展预览，以便您可以验证美元符号扩展的计算结果。

表达式编辑器中美元符号扩展预览

表达式编辑器中美元符号扩展预览

表达式编辑器中美元符号扩展预览 ![表达式编辑器中美元符号扩展预览。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_dollar_expansion_preview.png)

如果要在元素集中使用计算，请使用美元符号扩展。

例如，如果只想查看上一个可能的年份，可以使用以下构造：

`<Year = {$(=Max(Year))}>`

`Max(Year)` 首先被计算，结果将注入表达式中，而不是 `$(…)`。

货币符号扩展后的结果将是如下表达式：

`<Year = {2021}>`

美元符号扩展中的表达式是基于当前选择计算的。这意味着，如果在另一个字段中进行了选择，则表达式的结果将受到影响。

如果希望计算独立于选择，则在美元符号扩展中使用集合分析。例如：

`<Year = {$(=Max({1} Year))}>`

## 字符串

当您希望美元符号扩展生成字符串时，将应用正常的报价规则。例如：

`<Country = {'$(=FirstSortedValue(Country,Date)'}>`

货币符号扩展后的结果将是如下表达式：

`<Country = {'New Zealand'}>`

如果不使用引号，将出现语法错误。

## 数字

如果希望美元符号扩展生成数字，请确保扩展的格式与字段的格式相同。这意味着您有时需要将表达式包含到格式化函数中。

例如：

`<Amount = {$(=Num(Max(Amount), '###0.00'))}>`

货币符号扩展后的结果将是如下表达式：

`<Amount = {12362.00}>`

使用散列强制扩展始终使用小数点，并且不使用千位分隔符。例如：

`<Amount = {$(#=Max(Amount))}>`

## 日期

如果希望美元符号扩展生成日期，请确保扩展设定正确格式。这意味着您有时需要将表达式包含到格式化函数中。

例如：

`<Date = {'$(=Date(Max(Date)))'}>`

货币符号扩展后的结果将是如下表达式：

`<Date = {'12/31/2015'}>`

与字符串一样，您需要使用正确的引号。

一个常见的用例是，您希望将计算限制在最后一个月（或一年）。然后可以将数字搜索与 `AddMonths()` 函数结合使用。

例如：

`<Date = {">=$(=AddMonths(Today(),-1))"}>`

货币符号扩展后的结果将是如下表达式：

`<Date = {">=9/31/2021"}>`

这将选出上个月发生的所有事件。

## 示例：带美元符号扩展的集合修饰符的图表表达式

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-modifiers-dollar-sign-expansions.htm)

#### 示例 - 图表表达式

加载脚本

将以下数据作为数据加载编辑中的内联加载载入，以创建以下图表表达式示例。

```
Let vToday = Today();
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
2021-10-15, 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;US\_Date={'$(vToday)'}&gt;} Amount) | Sum({&lt;ISO\_Date={"$(=Date(Min(ISO\_Date),'YYYY-MM-DD'))"}&gt;} Amount) | Sum({&lt;US\_Date={"&gt;=$(=AddYears(Max(US\_Date),-1))"}&gt;} Amount) |
| --- | --- | --- | --- | --- |
| 总计 | 41 | 1 | 6 | 1 |
| 加拿大 | 14 | 0 | 6 | 0 |
| 捷克共和国 | 10 | 0 | 0 | 0 |
| 法国 | 4 | 1 | 0 | 1 |
| 德国 | 13 | 0 | 0 | 0 |

解释

* 维度：

  * `Country`

* 度量：

  * `Sum(Amount)`

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

  * `Sum({<US_Date={'$(vToday)'}>}Amount)`

    总和 `Amount`，针对和变量 `vToday` 中 `US_Date` 一样的所有记录。

  * `Sum({<ISO_Date={"$(=Date(Min(ISO_Date),'YYYY-MM-DD'))"}>}Amount)`

    总和 `Amount`，针对 `ISO_Date` 和第一个（最小）可能的 `ISO_Date` 相同的所有记录。`Date()` 函数用于确保日期的格式与字段的格式匹配。

  * `Sum({<US_Date={">=$(=AddYears(Max(US_Date),-1))"}>}Amount)`

    总和 `Amount`，针对 `US_Date` 在最新（最大）可能 `US_Date` 的之前的年份的日期之后或之时的所有记录。`AddYears()` 函数将返回日期，其格式由变量 `DateFormat` 指定，并且这需要匹配字段 `US_Date` 的格式。

集合修饰符和货币符号扩展

集合修饰符和货币符号扩展

集合修饰符和货币符号扩展 ![集合修饰符和美元符号扩展。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_gen_setanalysis_dollar_expansion.png)

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

| 实例 | 结果 |
| --- | --- |
| sum( {$&lt;Year = {$(#vLastYear)}&gt;} Sales ) | 返回与当前选择项相关的上一年的销售额。此处，将包含相关年份的变量 vLastYear 用于美元符号扩展。 |
| sum( {$&lt;Year = {$(#=Only(Year)-1)}&gt;} Sales ) | 返回与当前选择项相关的上一年的销售额。在这里，货币符号扩展被用于计算上一年份。 |