# alt 指令碼與圖表函數

alt 函數會傳回參數中第一個具有效數字表示法的參數。如果找不到符合的參數，則會傳回最後一個參數。可使用任意數目的參數。

語法：

alt(expr1[ , expr2 , expr3 , ...] , else)

傳回的資料類型： 整數

引數

| 引數 | 描述 |
| --- | --- |
| expr1 | 要檢查數字表示的有效性的第一個運算式。 |
| expr2 | 要檢查數字表示的有效性的第二個運算式。 |
| expr3 | 要檢查數字表示的有效性的第三個運算式。 |
| else | 在前面參數的數字表示均無效的情況下要傳回的值。 |

alt 函數通常與數字或日期解譯函數搭配使用。使用此方法，Qlik Sense 可以按照優先順序測試不同的日期格式。它也可以用來處理數值運算式中的 NULL 值。

範例：圖表運算式

| 範例 | 結果 |
| --- | --- |
| `alt( date#(<br>						dat , 'YYYY/MM/DD' ),` `date#( dat<br>						, 'MM/DD/YYYY' ),` `date#( dat<br>						, 'MM/DD/YY' ),` `'No valid<br>						date' )` | 此運算式將測試 date 欄位是否包含按照三個指定日期格式中任何一個的日期。如果是，則會傳回一個雙值，其中包含原始字串和日期的有效數字表示法。如果找不到符合的項目，則會傳回 `No valid date` 文字 (並且不會傳回有效的數字表示法)。 |
| `alt(Sales,0) + alt(Margin,0)` | 此運算式會新增欄位 `Sales` 和 `Margin`，並將所有遺漏值 (NULL) 取代為 `0`。 |

## 範例 - alt 基礎事項

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/alt.htm)

#### 圖表運算式

概述

資料集包含不完整的銷售和預測資料。您想要用有效的替代值取代缺漏值，以填補空白。

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 載入到稱為 `Example` 之資料表格的資料集。

* 資料表格中的欄位如下：

  * `ID`

  * `Sales`

  * `Forecast`

載入指令碼

```
Example:
LOAD * INLINE [
ID, Sales, Forecast
1, 500, 450
2, , 300
3, 200, 250
4, , 400
5, 350,
];
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `ID`

* `Sales`

* `Forecast`

建立下列量值：

* `=Sum(alt(Sales, Forecast))` 用有效的替代值取代缺漏值，以傳回有效的數字呈現。

結果表格

| ID | Sales | Forecast | Sum(alt(Sales, Forecast)) |
| --- | --- | --- | --- |
| Totals |  |  | 1750 |
| 1 | 500 | 450 | 500 |
| 2 |  | 300 | 300 |
| 3 | 200 | 250 | 200 |
| 4 |  | 400 | 400 |
| 5 | 350 |  | 350 |

`alt` 函數傳回缺少 `Sales` 值的 `ID` 列在量值計算中的 `Forecast` 值。用有效的替代值取代缺漏值，藉此可以產生完全填入的資料集。

## 範例 - 使用 alt 取代缺漏值

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/alt.htm)

#### 圖表運算式

概述

一家公司從多個感測器收集溫度資料。您想要用某個感測器的資料取另一個感測器的缺漏資料。

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 載入到稱為 `Example` 之資料表格的資料集。

* 資料表格中的欄位如下：

  * `Time`

  * `Temp_Sensor1`

  * `Temp_Sensor2`

載入指令碼

```
Example:
LOAD * INLINE [
Time, Temp_Sensor1, Temp_Sensor2
08:00, 23.5, 24.0
09:00, , 23.8
10:00, 24.1,
11:00, , 24.5
12:00, 23.9, 24.1
];
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `Time`

* `Temp_Sensor1`

* `Temp_Sensor2`

建立下列量值：

* `=Sum(alt(Temp_Sensor1, Temp_Sensor2))`，用來傳回有效的數字呈現。

結果表格

| Time | Temp\_Sensor1 | Temp\_Sensor2 | Sum(alt(Temp\_Sensor1, Temp\_Sensor2)) |
| --- | --- | --- | --- |
| Totals |  |  | 119.8 |
| 08:00 | 23.5 | 24.0 | 23.5 |
| 09:00 |  | 23.8 | 23.8 |
| 10:00 | 24.1 |  | 24.1 |
| 11:00 |  | 24.5 | 24.5 |
| 12:00 | 23.9 | 24.1 | 23.9 |

查看結果，`alt` 函數已用來自其他感測器的有效替代結果取代了缺漏的感測器資料。這就填補了空白，完成了資料集。

## 範例 - alt 使用情境

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/alt.htm)

#### 圖表運算式

概述

此情境顯示了使用 `alt` 函數取代缺失值或 Null 值的不同方式。

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 載入到稱為 `Example` 之資料表格的資料集。

* 資料表格中的欄位如下：

  * `ProductID`

  * `ProductName`

  * `SalesAmount`

  * `ReturnAmount`

  * `Profit`

  * `Discount`

  * `Category`

  * `Year`

  * `Region`

  * `CustomerRating`

載入指令碼

```
Set NullInterpret = '';
Example:
LOAD * INLINE [
ProductID, ProductName, SalesAmount, ReturnAmount, Profit, Discount, Category, Year, Region, CustomerRating
101, "Laptop", 1200, 200, 500, , "Electronics", 2023, "North",
102, "Tablet", 800, , 300, 50, "Electronics", 2023, "South", 4
103, "Smartphone", 1500, , 600, 100, , 2022, "East", 5
104, "Printer", 400, , , 20, "Accessories", 2021, , 3
105, , 1000, 100, , 30, "Electronics", 2023, "West", 4
106, "Monitor", , 150, 250, , "Accessories", 2022, "North", 5
107, "Keyboard", 200, , 80, 5, , 2022, "South", 2
108, "Mouse", , 50, , , "Accessories", , "East",
109, , 600, , , , "Electronics", 2023, , 4
110, "Headphones", 300, 30, 100, , "Accessories", 2021, "West", 3
];
```

結果

載入資料並開啟工作表。建立新的表格並將此欄位新增為維度：

* `ProductID`

建立下列計算維度：

* `=Coalesce( ProductName,  'Unknown Product')`，用來為所有沒有 `ProductName` 值的產品提供描述 `Unknown Product`。

建立下列量值：

* `=Sum(alt(SalesAmount, ReturnAmount, Profit))`，如果找不到 `SalesAmount`，則用來傳回有效數字。

* `=avg(alt(CustomerRating, 3))`，如果最初沒有提供，則用來傳回有效的標準化客戶評等。

* `=Sum(alt(Discount, SalesAmount * 0.05))`，用來傳回有效折扣。

* `=Sum(alt(Profit, SalesAmount * 0.1))`，用來傳回有效的利潤值。

* `=Sum(alt(SalesAmount, avg(TOTAL SalesAmount)))`，用來傳回有效的銷售值。

* `=Sum(alt(Discount, avg(TOTAL Discount)))`，用來傳回有效折扣值。

結果表格

| ProductID (產品 ID) | Coalesce( ProductName, 'Unknown Product') | Sum(alt(SalesAmount, ReturnAmount, Profit)) | avg(alt(CustomerRating, 3)) | Sum(alt(Discount, SalesAmount \* 0.05)) | Sum(alt(Profit, SalesAmount \* 0.1)) | Sum(alt(SalesAmount, avg(TOTAL SalesAmount))) | Sum(alt(Discount, avg(TOTAL Discount))) |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 總計 |  | 6200 | 3.6 | 310 | 2030 | 7500 | 410 |
| 101 | 筆記型電腦 | 1200 | 3 | 60 | 500 | 1200 | 41 |
| 102 | 平板電腦 | 800 | 4 | 50 | 300 | 500 | 50 |
| 103 | 智慧型手機 | 1500 | 5 | 100 | 600 | 800 | 100 |
| 104 | 印表機 | 400 | 3 | 20 | 40 | 400 | 20 |
| 105 | 未知產品 | 1000 | 4 | 30 | 100 | 1000 | 30 |
| 106 | 監控 | 150 | 5 | 0 | 250 | 750 | 41 |
| 107 | 鍵盤 | 200 | 2 | 5 | 80 | 200 | 5 |
| 108 | 滑鼠 | 50 | 3 | 0 | 0 | 750 | 41 |
| 109 | 未知產品 | 600 | 4 | 30 | 60 | 600 | 41 |
| 110 | 耳機 | 300 | 3 | 15 | 100 | 300 | 41 |

`alt` 函數確保如果缺漏了值，可以計算並傳回替代值。觀察以下結果：

* 第 2 欄使用 `Coalesce` 函數傳回所有 Null 值的值 `Unknown Product`。`Alt` 函數無法使用，因為這只適用於數值。

* 第 3 欄傳回 `SalesAmount` 的值。如果找不到值，則傳回 `ReturnAmount` 值。如果找不到 `ReturnAmount` 值，則傳回 `Profit` 值。這有助於確保如果 `SalesAmount` 沒有值，則該欄會填入一個值。

* 第 4 欄傳回 `CustomerRating`。如果找不到值，則這會預設為 `3` 的值。例如，產品 `Laptop` 沒有客戶評等，因此傳回 `3`。然後，該量值會計算該欄的平均。

* 第 5 欄傳回折扣值。如果沒有可用的值，則按 `SalesAmount` 值的 5% 來計算。

* 第 6 欄傳回 `Profit` 值。如果沒有可用的值，則傳回 `SalesAmount` 的 10%。

* 第 7 欄傳回 `SalesAmount`。如果沒有提供值，則傳回整個資料集的平均 `SalesAmount`。例如，產品 `Monitor` 和 `Mouse` 沒有 `SalesAmount` 的值，因此都傳回 `750`，即所有 `SalesAmount` 值的平均。

* 第 8 欄傳回 `Discount` 值。如果找不到值，則系統會計算並傳回整個資料集的平均折扣。