# Index スクリプトおよびチャート関数

Index() は、文字列を検索して、指定されたサブストリングが n 回目に出現する開始位置を取得します。n の値は、オプションの 3 番目の引数で指定されます。省略されている場合は、1 になります。負の値が指定された場合は、文字列の末尾から検索を行います。文字列内での位置は、1 より左から右に番号が付けられます。

構文:

Index(text, substring[, count])

戻り値データ型： 整数

引数

| 引数 | 説明 |
| --- | --- |
| text | 元の文字列。 |
| substring | text で検索する文字の文字列。<br><br>情報メモテキスト内に部分文字列が存在しない場合、インデックスは 0 を返します。 |
| count | 検索する substring の出現を定義します。たとえば、値 2 は 2 番目の出現を検索します。負の値は文字列の末尾から始まります。 |

例: チャートの数式

| 例 | 結果 |
| --- | --- |
| `Index( 'abcdefg', 'cd' )` | `3` を返します |
| `Index(  'abcdabcd', 'b', 2 )` | `6` (`b` の 2 番目の出現) を返します |
| `Index( 'abcdabcd', 'b',-2 )` | `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` を返します (`x` は文字列 `abc` に存在しない) |
| `Index( 'abc', 'a', 2 )` | `0` を返します (`a` の 2 番目の出現はなし) |

## 例 - Index の基本

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

#### チャートの数式

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 「`Example`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の 1 つの項目は `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` を持つ 2 番目の行が次を返します:

* `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`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の 1 つの項目は `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') |
| --- | --- |
| 配送サービスに関する苦情 | その他 |
| 返金リクエストのフォローアップ | 返金 |
| 返金リクエスト - 注文 12345 | 返金 |
| 技術的な問題が解決されませんでした | その他 |
| 製品 XYZ に関する技術的な問題 | その他 |

`Index` 関数の出力により、文字列「`Refund`」を含むすべての件名が正常に識別されました。これは、ネストされた関数を使用してデータを分析および分類し、ユーザーに価値を提供する方法の例です。