# Index 指令碼與圖表函數

Index() 會搜尋字串，以尋找第 n 次出現所提供子字串的開始位置。可選的第三個引數會提供 n 的值，如果省略則為 1。負數值會從字串的結尾開始搜尋。字串中的位置編號是由左至右從 1 算起。

語法：

Index(text, substring[, count])

傳回的資料類型： 整數

引數

| 引數 | 描述 |
| --- | --- |
| text | 原始字串。 |
| substring | 要在 text 中進行搜尋的字元字串。<br><br>資訊備註如果文字中不存在該子字串，則索引會傳回 0。 |
| count | 定義要搜尋的 substring 出現項目。例如，值 2 會搜尋第二個出現項目。負數值會從字串的結尾開始。 |

範例：圖表運算式

| 範例 | 結果 |
| --- | --- |
| `Index( 'abcdefg', 'cd' )` | 傳回 `3` |
| `Index(  'abcdabcd', 'b', 2 )` | 傳回 `6` (`b` 的第二個出現項目) |
| `Index( 'abcdabcd', 'b',-2 )` | 傳回 `2` (從結尾開始 `b` 的第二個出現項目) |
| `Left( Date, Index( Date,'-') -1` ) where `Date = 1997-07-14` | 傳回 `1997` |
| `Mid( Date, Index( Date, '-', 2 ) -2, 2 )` where `Date` = `1997-07-14` | 傳回 `07` |
| `Index( 'abc', 'x' )` | 傳回 `0` (字串 `abc` 中不存在 `x`) |
| `Index( 'abc', 'a', 2 )` | 傳回 `0` (`a` 沒有出現第二次) |

## 範例 - Index 基礎事項

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)

#### 圖表運算式

概述

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

載入指令碼包含：

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

* 資料表格中稱為 `InputString` 的一個欄位。

載入指令碼

```
Example:
Load * inline [
InputString
abcdefg
abcdabcd ];
```

結果

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

* ` InputString
                                   `

建立下列計算維度：

* `=Index(InputString, 'cd')`

* `=Index(InputString, 'e')`

* `=Index(InputString, 'b', -1)`

結果表格

| InputString | Index(InputString, 'cd') | Index(InputString, 'e') | Index(InputString, 'b', -1) |
| --- | --- | --- | --- |
| abcdabcd | 3 | 0 | 6 |
| abcdefg | 3 | 5 | 2 |

具有字串 `abcdabcd` 的第一列傳回：

* `3`：第一次出現 `cd`

* `0`：因為在字串中找不到 `e`

* `6`：從字串結束開始第一次出現 `b`

具有字串 `abcdefg` 的第二列傳回：

* `3`：第一次出現 `cd`

* `5`：第一次出現 `e`

* `2`：從字串結束開始第一次出現 `b`

資訊備註負的 `count` 參數反向掃描字串。但是，即使反向掃描，傳回的位置也一律由左至右表示。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)

#### 載入指令碼

以下程式碼顯示如何在載入指令碼中使用該函數。

```
Example:
Load
*,
index(String, 'cd') as Index_CD,               // returns 3  in Index_CD
index(String, 'b') as Index_B,                // returns 2 in Index_B
index(String, 'b', -1) as Index_B2;           // returns 2 or 6 in Index_B2
Load * inline [
String
abcdefg
abcdabcd ];
```

結果表格

| 字串 | Index\_CD | Index\_B | Index\_B2 |
| --- | --- | --- | --- |
| abcdefg | 3 | 2 | 2 |
| abcdabcd | 3 | 2 | 6 |

## 範例 - Index 使用情境

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)

#### 圖表運算式

概述

客戶支援中心有一個資料集，其中包含客戶電子郵件訊息的主旨行。支援中心希望根據主旨行中出現的關鍵字分類這些電子郵件，例如 `Refund`、`Complaint` 和 `Technical Issue`。主旨行儲存在資料集中名為 `EmailSubject` 的欄位。

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

載入指令碼包含：

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

* 資料表格中稱為 `EmailSubject` 的一個欄位。

載入指令碼

```
Example:
Load * inline [
EmailSubject
Request for a Refund - Order 12345
Technical Issue with Product XYZ
Complaint about delivery service
Follow-up on Refund Request
Technical Issue not resolved
];
```

結果

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

* ` EmailSubject
                                   `

建立下列計算維度：

* `=If(Index(EmailSubject, 'Refund') > 0, 'Refund', 'Other')`，用來計算哪些電子郵件主旨文字與退款相關。

結果

| EmailSubject | If(Index(EmailSubject, 'Refund') &gt; 0, 'Refund', 'Other') |
| --- | --- |
| Complaint about delivery service (關於配送服務的投訴) | 其他 |
| Follow-up on Refund Request (退款請求的後續處理) | Refund (退款) |
| Request for a Refund - Order 12345 (退款請求 - 訂單 12345) | Refund (退款) |
| Technical Issue not resolved (技術問題未解決) | 其他 |
| Technical Issue with Product XYZ (產品 XYZ 的技術問題) | 其他 |

`Index` 函數的輸出已成功識別包含字串 `Refund` 的所有主旨行。此範例說明如何使用巢狀函數對資料進行分析和分類並向使用者提供價值。