# Before - 图表函数

Before() 返回使用透视表的维度值评估的表达式，因为维度值显示在透视表的行段内当前列之前的列。

语法：

Before([TOTAL] expr [, offset [, count]])

信息注释在除透视表之外的所有图表类型中，此函数会返回 NULL。

信息注释当在图表的任何表达式中使用此图表函数时，不允许对图表中的 y 值进行排序或按表中的表达式列进行排序。因此，这些排序替代项会自动禁用。当您在可视化或表格中使用此图表函数时，可视化的排序将返回到此函数的排序输入。

参数

| 参数 | 描述 |
| --- | --- |
| expr | 表达式或字段包含要度量的数据。 |
| offset | 指定 offsetn（大于 1）会将表达式评估从当前列开始向左移动 n 列。<br><br>指定 0 偏移量可以计算当前列上的表达式的值。<br><br>指定负偏移量数值后，使 Before 函数效果类似于具有相应正偏移量数值的 After 函数。 |
| count | 通过指定第三个参数 count（大于 1），函数将返回一连串值，每个值对应一个从原始单元格开始向左计数的 count 表格列。 |
| TOTAL | 如果表格是单维度或如果将 TOTAL 限定符用作参数，则当前列段数据总是与整列相等。<br><br>[定义聚合范围](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

行段的第一列会返回 NULL 值，因为其前没有列。

如果透视表有多个水平维度，则当前行片断将只包括值与所有维度行中当前列相同的列，除显示字段排序间上一次水平维度的行之外。透视表的水平维度的内部字段排序只需依据从上至下的维度顺序定义。

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `Before( Sum(Sales ))` | 返回相对于当前列紧邻左侧的上一列的 `Sales` 总和。 |
| `Before( Sum(Sales ), 2)` | 返回当前列左侧两列中的列中 `Sales` 的总和。 |
| `Before( Total Sum( Sales ))` | 返回相对于当前列紧邻左侧的上一列的 `Sales` 总和。 |
| `RangeAvg ( Before(Sum(x),1,3))` | 返回当前列左边三列内评估的 `sum(x)` 函数的三个结果的平均值。 |

## 示例 - Before 基本原理

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/before.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `Year`

  * `Quarter`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Year, Quarter, Sales
2023, Q1, 5000
2023, Q2, 4000
2023, Q3, 6000
2023, Q4, 7000
];
```

结果

加载数据并打开工作表。创建一个新的透视表，并将此字段添加为行维度：

* `Year`

将此字段添加为列维度：

* `Quarter`

创建以下度量：

* `=Sum(Sales)`，计算销售额的总和。

* `=Before(Sum(Sales))`，显示上一季度的销售额总和。

结果表

| 年 | Q1 | Q2 | Q3 | Q4 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Sum(Sales) | Before(Sum(Sales)) | Sum(Sales) | Before(Sum(Sales)) | Sum(Sales) | Before(Sum(Sales)) | Sum(Sales) | Before(Sum(Sales)) |  |
| 2023 | 5000 | - | 4000 | 5000 | 6000 | 4000 | 7000 | 6000 |

查看结果，您可以看到 `Before` 函数如何返回紧邻每个 `Quarter` 的 `Sum(Sales)` 列做侧的上一列的值。例如，在 Q4 中，该期间的 `Sum(Sales)` 值为 `7000`。`Before` 函数对于 `Q4` 的输出是 `6000`，其为紧邻 `Q4` 的 `Sum(Sales)`（即 `Q3` 的 `Sum(Sales)`）左侧的列的值。

## 示例 - 使用 Before 函数计算销售额同比增长

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/before.htm)

#### 图表表达式

概述

数据集包含几年的销售数据。该公司希望根据上一年的价值，提供每年的总销售额和销售额增长情况。

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `Year`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Year, Sales
2021, 1300
2022, 1800
2023, 2000
2024, 2100
];
```

结果

加载数据并打开工作表。创建一个新的透视表，并将此字段添加为列维度：

* ` Year
                                       `

创建以下度量：

* `=Sum(Sales)`，计算销售额的总和。

* `=(Sum(Sales) - Before(Sum(Sales))) / Before(Sum(Sales))`，计算年销售额增长。 要将此值显示为百分比，可在数字格式设定下选择数字 &gt; 简单格式 &gt; 12.34%。

结果表

| 2021 | 2022 | 2023 | 2024 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Sum(Sales) | (Sum(Sales) - Before(Sum(Sales)))/Before(Sum(Sales)) | Sum(Sales) | (Sum(Sales) - Before(Sum(Sales)))/Before(Sum(Sales)) | Sum(Sales) | (Sum(Sales) - Before(Sum(Sales)))/Before(Sum(Sales)) | Sum(Sales) | (Sum(Sales) - Before(Sum(Sales)))/Before(Sum(Sales)) |
| 1300 | - | 1800 | 38.46% | 2000 | 11.11% | 2100 | 5.00% |

`Before` 函数的输出根据上一年的销售数字返回同比增长。例如，`2022` 的销售额总和高于`2021` 的 `Sum(Sales)` 达 `38.46%`。

提示注释在这种情况下，您也可以使用 `After` 函数执行相同的销售额增长计算。当您在函数参数中指定负偏移量时，它会使 `After` 函数的工作方式与具有相应正偏移量的 `Before` 函数相同。例如，以下表达式使用 `After` 函数（负偏移值为 `-1` ）返回的年销售额增长结果与 `Before` 函数相同：   
`=(Sum(Sales)-After(Sum(Sales),-1))/(After(Sum(Sales),-1))`。