# 在表达式中使用变量的示例

Qlik Sense 中的变量是一个已命名实体，包含一个数据值。当在表达式中使用变量时，它将会被其值或变量的定义所取代。

## 在表达式中使用变量的方法

一个变量可以用两种不同的方式用于直接引用或货币符号扩展。如果使用直接引用，则变量值将用于计算。如果使用货币符号扩展，则在解析表达式之前，整个货币符号扩展将替换为变量值。因此，两种不同的方法可能会返回不同的结果。

### 示例：使用具有货币符号扩展的变量

变量 x 包含文本字符串 Sum(Sales)。

您可在图表中定义表达式 $(x)/12。效果与拥有图表表达式 Sum(Sales)/12 完全相同。

但是，如果您将变量 x 的值更改至例如 Sum(Budget)，图表中的数据将立即使用解释为 Sum(Budget)/12 的表达式重新计算。

提示注释在表达式中使用变量时，只需编辑变量即可同时更改图表范围中使用的表达式。

### 示例：透视表中具有货币符号扩展的变量

假设您有一个透视表或透视对象，其中包含以下内容：

* 维度为 Product Type 和 Product Name。

* 度量为 Sum(Sales) 和 Count (distinct InvoiceNumber)。

* 列下的项目是值（默认）和字段 Quarter。

您可使用变量来促进交互性分析。假设您还创建了一个定义为空白的变量 vUserInteraction。然后，您在工作表上创建于两个按钮图表，并配置设置变量值操作：

* 显示更多详细信息：单击此按钮可将 vUserInteraction 设置为 `='Yes'` 的值。

* 显示更少详细信息：单击此按钮可将 vUserInteraction 设置为 `='No'` 的值。

在透视表中，您可以为图表添加一些额外的度量，例如 Count(Quantity) 和 Sum(Cost)。然后，在以下情况下，将每个度量值列配置为对显示列的条件具有以下值：

```
'$(Reference)'='Yes'
```

这样，图表就能自行确定用户是否需要另外的信息。如果用户单击显示更多详细信息按钮，额外的度量就会被添加到表中。若非如此，或如果单击显示更少详细信息，则将移除额外的度量。

### 更多示例：在货币符号扩展中使用变量

美元符号扩展是 Qlik Sense 中一个多功能和强大的工具，有许多可能的用途。有关更多示例，请参阅[美元符号扩展](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/dollar-sign-expansions.htm)。

### 示例：直接引用表达式中的变量

使用变量作为直接引用不太常见，但仍然有用。例如：

假设您的数据模型中有一个字段 TransactionSummary 包含事务的自由文本摘要。此字段可能包含有关交易的补充信息。例如，事务可以有一个摘要，记录客户使用商店信用购买的商品，或记录销售过程中出现的任何问题。

在您的应用程序中，您可能想使用 TransactionSummary，但您想在不影响数据模型或加载脚本的情况下将数据放入上下文中，也不想将其存储在图表的其他地方。

您可以采取以下措施：

1. 使用以下定义在变量对话框中创建一个名为 vIntroStatement 的变量：

   ```
   ='The following summary was provided by the vendor: '
   ```

2. 将以下度量添加到文本和图像图表中：

   ```
   vIntroStatement & TransactionSummary
   ```

将介绍性语句存储为变量，可以集中控制值的使用。例如，变量 vIntroStatement 可以在多个图表中使用，也可以在许多不同的指标中使用（例如，可能有一个单独的图表，有时包含描述交易期间售出多少单位的文本）。通过使用变量，您可以简化在应用程序中更新表达式的过程。要更改措辞，只需更新变量，更改就会反映到整个应用程序中。

## 如何解释名称

建议不对 Qlik Sense 中的字段和函数将变量命名为相同的名称。 但如果您这样执行，则必须知道如何在表达式中使用它们。

示例：

字符串 XXX 表示字段、变量、函数或度量。XXX 可以解释为这些之一，具体取决于您创建表达式的方式。

如何解释名称的示例

| 表达式 | XXX 可以解释为 |
| --- | --- |
| XXX | 度量、变量或字段 |
| $(XXX) | 变量 |
| Count(XXX) | 字段或变量 |
| XXX() | 函数 |

命名实体时，避免将同一名称指定给多个字段、变量或度量。解决同名实体之间的冲突有严格的优先顺序。这种顺序反映在使用这些实体的任何对象或上下文中。该优先顺序如下：

* 在聚合中，字段优先于变量。度量标签在聚合中不相关，并且没有排定优先级。

* 在聚合外部，度量标签优先于变量，而变量又优先于字段名称。

* 此外，在聚合外部，度量可以通过引用其标签来重用，除非标签实际上是计算标签。在这种情况下，度量的重要性降低，以减少自引用的风险，并且在这种情况下，名称将始终首先解释为度量标签，其次解释为字段名称，再次解释为变量名称。

作为最佳实践，可以考虑对在应用程序中创建的变量使用标准化的命名约定。例如，您可以确保所有变量名都以 v 开头。例如：vUserText。这有助于确保变量被快速识别为变量，并与度量、字段和函数区分开来。

## 变量计算

可以通过多种方法在 Qlik Sense 中使用变量计算值，结果取决于定义变量以及在表达式中调用变量的方式。

此例需要以下数据加载到数据加载编辑器中：

LOAD \* INLINE [ Dim, Sales A, 150 A, 200 B, 240 B, 230 C, 410 C, 330 ];

我们来从变量对话框定义两个变量：

* 名称 vSales 定义'Sum(Sales)'
* 名称 vSales2 定义'=Sum(Sales)'

在第二个变量中，在表达式前面添加一个等号。这可以使得在扩展变量和计算表达式之前计算变量。

如果按此方法使用 vSales 变量（如在度量中），则结果将为字符串 Sum(Sales)，即没有执行任何计算。

如果在表达式中添加货币符号扩展和调用 $(vSales)，则该变量已扩展且显示Sales的总和。

最后，如果调用 $(vSales2)，则将会在扩展变量之前计算其值。这意味着所显示的结果是Sales的总和。使用 =$(vSales) 和 =$(vSales2) 作为度量表达式之间的区别如此图表显示的结果所示：

结果

| Dim | $(vSales) | $(vSales2) |
| --- | --- | --- |
| A | 350 | 1560 |
| B | 470 | 1560 |
| C | 740 | 1560 |

如图表所示，$(vSales) 生成维度值的部分和，而 $(vSales2) 却生成总和。

## 了解详情

* [变量对话框](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Sheets/variables-dialog.htm)
* [在表达式中使用变量](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Variables/work-with-variables.htm)
* [在数据加载编辑器中使用变量](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)
* [使用表达式编辑器](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Expressions/work-with-expression-editor.htm)
* [在可视化中使用表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/use-expressions-in-visualizations.htm)