# Before - 圖表函數

Before() 傳回以樞紐分析表的維度值評估而得的運算式值，這些值會顯示在樞紐分析表的列區段內，目前資料行之前的資料行中。

語法：

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

資訊備註此函數在所有圖表類型中都會傳回 NULL，除了樞紐分析表以外。

資訊備註當任何圖表運算式使用了此圖表函數時，就不允許在圖表中依據 Y 值排序，或在表格中依據運算式資料行排序。因此，這些排序替代選項會自動停用。若您在視覺化或表格中使用此圖表函數，視覺化的排序將還原為對此函數的排序輸入。

引數

| 引數 | 描述 |
| --- | --- |
| expr | 包含待測量之資料的運算式或欄位。 |
| offset | 將一個 offset n 指定為大於 1，則可將運算式的評估從目前欄往左移動 n 欄。<br><br>若將位移指定為 0，則會根據目前欄來評估運算式。<br><br>若指定負值的位移，會讓 Before 函數的作用相當於包含對應正值位移的 After 函數。 |
| count | 將第三個參數 count 指定為大於 1，函數會傳回一系列值，從原始儲存格往左算，每個表格欄的值最多為 count 個。 |
| TOTAL | 如果表格為單一維度或 TOTAL 限定詞作為引數，則目前資料行區段一律等於整個資料行。<br><br>[定義彙總範圍](https://help.qlik.com/zh-TW/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)` 欄左側上一欄的值。例如，在第 4 季，該期間的 `Sum(Sales)` 值為 `7000`。`Q4` 的 `Before` 函數輸出為 `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` 的銷售總和 `38.46%` 高於 `2021` 的 `Sum(Sales)`。

提示備註在此情境中，您也可以使用 `After` 函數執行相同的銷售成長計算。若在函數參數中指定負值的位移，會讓 `After` 函數的作用相當於包含對應正值位移的 `Before` 函數。例如，以下使用 `After` 函數 (負位移值為 `-1`) 的運算式會傳回與 `Before` 函數相同的年度銷售成長結果：  
`=(Sum(Sales)-After(Sum(Sales),-1))/(After(Sum(Sales),-1))`。