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

SubField()は、元のレコード項目が区切り文字で区切られた複数の部分で構成されている文字列項目からサブストリング部分を抽出するために使用されます。

Subfield() 関数は、フルネームで構成されるレコードのリストからファースト ネームと姓、パス名のコンポーネント パーツを抽出したり、コンマ区切りのテーブルからデータを抽出したりするために使用できます。

LOAD ステートメントで、オプションの field\_no パラメータを省略して、Subfield() 関数を使用する場合、サブストリングごとに完全な 1 つのレコードが生成されます。Subfield()を使用してを複数の項目がロードされる場合、すべての組み合わせのデカルト積が作成されます。

構文:

SubField(text, delimiter[, field\_no ])

戻り値データ型： 文字列

引数

| 引数 | 説明 |
| --- | --- |
| text | 元の文字列。これは、ハードコードされたテキスト、変数、ドル記号展開、またはその他の数式となります。 |
| delimiter | 文字列をコンポーネント パーツに分割する入力 text 内の文字。 |
| field\_no | オプションの 3 番目の引数は、親文字列 text のサブストリングのどれが返されるかを指定する整数です。値 1 を使用すると最初のサブストリングが返され、値 2 を使用すると 2 番目のサブストリングが返されます。値 3 以降も同様です。<br><br><ul> <li><span>field_no</span> が正の値の場合、サブストリングは左から右に抽出されます。</li> <li><span>field_no</span> が負の値の場合、サブストリングは右から左に抽出されます。</li> </ul> |

ヒント メモ SubField() は、Len()、Right()、Left()、Mid()、およびその他の文字列関数など、複雑な関数の組み合わせの代わりに使用することができます。

例: チャートの数式

| 例 | 結果 |
| --- | --- |
| `SubField( 'abc;cde;efg',   ';' ,2 )` | `cde` を返します |
| `SubField( Null,   ';' ,1 )` | 空の文字列を返します |
| `SubField( ';',   ';' ,1 )` | 空の文字列を返します |
| `SubField( '\Users\ext_jrb\Documents\Qlik\Sense\Apps;','\',-3 )` | `Qlik` を返します |

## 例 - SubField の基本

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

#### チャートの数式

概要

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

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

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

* データ テーブル内の 1 つの項目は `Name` と呼ばれます。

ロード スクリプト

```
Example:
Load * inline [
Name
Dave Owen
Joe Tem
];
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:

* ` Name
                                   `

次の計算軸を作成します。

* `=SubField(Name, ' ',1)`、スペース `' '` 区切り記号の前に現れる最初の部分文字列を抽出します。

* `=SubField(Name, ' ',-1)`、文字列の右側から始めて、スペース `' '` 区切り記号の前に現れる最初の部分文字列を抽出します。

Results table

| Name | SubField(Name, ' ',1) | SubField(Name, ' ',-1) |
| --- | --- | --- |
| Dave Owen | Dave | Owen |
| Joe Tem | Joe | Tem |

`SubField()` 関数は、`field_no` 引数を 1 に設定することで、`Name` の最初のサブ文字列を抽出します。`field_no` の値は正なので、左から右の順にサブ文字列が抽出されます。2 番目の関数呼び出しでは、`field_no` 引数を -1 にすることで、右から左の順に 2 番目のサブ文字列を抽出します。

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

#### ロード スクリプト

ロード スクリプト

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

```
FullName:
LOAD * inline [
Name
'Dave Owen'
'Joe Tem'
];

SepNames:
Load Name,
SubField(Name, ' ',1) as FirstName,
SubField(Name, ' ',-1) as Surname
Resident FullName;
Drop Table FullName;
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `Name`
* `FirstName`
* `SurName`

Results table

| Name | FirstName | SurName |
| --- | --- | --- |
| Dave Owen | Dave | Owen |
| Joe Tem | Joe | Tem |

説明

`SubField` 関数は、`field_no` 引数を 1 に設定することで、`Name` の最初のサブ文字列を抽出します。`field_no` の値は正なので、左から右の順にサブ文字列が抽出されます。2 番目の関数呼び出しでは、`field_no` 引数を -1 にすることで、右から左の順に 2 番目のサブ文字列を抽出します。

## 例 - SubField のシナリオ

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

#### チャートの数式

概要

製品データセットには、製品テーブルが含まれます。テーブル内の各製品には、製品分野を識別するタグ項目があります。製品はタグ項目に複数の値を設定することができます。例えば、ウィジェット A には次のタグがあります: 電子機器、ガジェット、ホーム。タグの値は、区切り文字としてパイプ (｜) 文字で区切られます。この例では、`SubField` 関数を使用して特定のタグ値を抽出する方法を示します。

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

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

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

* データ テーブル内の次の項目:

  * `ProductID`

  * `ProductName`

  * `Tags`

  * `Sales`

ロード スクリプト

```
Example:
Load  *
INLINE [
ProductID, ProductName, Tags, Sales
1, Widget A, Electronics|Gadgets|Home, 150
2, Widget B, Electronics|Accessories, 200
3, Widget C, Furniture|Home, 100
4, Widget D, Gadgets|Accessories, 250
];
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* ` ProductID
                                   `

* `ProductName`

* `Tags`

次の計算軸を作成します。

* `=SubField(Tags, '|',1)`、`Tags` 項目の最初のアイテムを抽出します。

* `=SubField(Tags, '|',2)`、`Tags` 項目の 2 番目のアイテムを抽出します。

* `=SubField(Tags, '|',3)`、`Tags` 項目の 3 番目のアイテムを抽出します。

Results table

| ProductID | ProductName | Tags | SubField(Tags, '\|', 1) | SubField(Tags, '\|', 2) | SubField(Tags, '\|', 3) |
| --- | --- | --- | --- | --- | --- |
| 1 | Widget A | Electronics\|Gadgets\|Home | Electronics | Gadgets | Home |
| 2 | Widget B | Electronics\|Accessories | Electronics | Accessories | - |
| 3 | Widget C | Furniture\|Home | Furniture | Home | - |
| 4 | Widget D | Gadgets\|Accessories | Gadgets | Accessories | - |

`SubField` 関数の出力は、元の `Tags` 文字列の関連する位置からタグを正常に返しました。

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

#### ロード スクリプト

ロード スクリプト

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

```
LOAD DISTINCT
Instrument,
SubField(Player,',') as Player,
SubField(Project,',') as Project;

Load * inline [
Instrument|Player|Project
Guitar|Neil,Mike|Music,Video
Guitar|Neil|Music,OST
Synth|Neil,Jen|Music,Video,OST
Synth|Jo|Music
Guitar|Neil,Mike|Music,OST
] (delimiter is '|');
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* Instrument

* Player

* Project

Results table

| Instrument | Player | Project |
| --- | --- | --- |
| Guitar | Mike | Music |
| Guitar | Mike | Video |
| Guitar | Mike | OST |
| Guitar | Neil | Music |
| Guitar | Neil | Video |
| Guitar | Neil | OST |
| Synth | Jen | Music |
| Synth | Jen | Video |
| Synth | Jen | OST |
| Synth | Jo | Music |
| Synth | Neil | Music |
| Synth | Neil | Video |
| Synth | Neil | OST |

説明

この例では、Subfield() 関数の複数のインスタンスを、すべての組み合わせのデカルト積を作成する同じ LOAD ステートメント内から field\_no パラメータを除外して使用する方法を示しています。DISTINCT オプションを使用すると、レコードの複製が作成されるのを避けることができます。