すべて展開 / 折りたたむ
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 オプションを使用すると、レコードの複製が作成されるのを避けることができます。