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 以降も同様です。
- field_no が正の値の場合、サブストリングは左から右に抽出されます。
- field_no が負の値の場合、サブストリングは右から左に抽出されます。
|
ヒント メモ
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 の基本
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
Example:
Load * inline [
Name
Dave Owen
Joe Tem
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:
次の計算軸を作成します。
-
=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 番目のサブ文字列を抽出します。
ロード スクリプト
データ ロード エディター を開き、次のロード スクリプトを新しいタブに追加します。
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;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
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 のシナリオ
概要
製品データセットには、製品テーブルが含まれます。テーブル内の各製品には、製品分野を識別するタグ項目があります。製品はタグ項目に複数の値を設定することができます。例えば、ウィジェット A には次のタグがあります: 電子機器、ガジェット、ホーム。タグの値は、区切り文字としてパイプ (|) 文字で区切られます。この例では、SubField 関数を使用して特定のタグ値を抽出する方法を示します。
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
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 文字列の関連する位置からタグを正常に返しました。
ロード スクリプト
データ ロード エディター を開き、次のロード スクリプトを新しいタブに追加します。
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 オプションを使用すると、レコードの複製が作成されるのを避けることができます。