こんにちは。Deckです。
今回はMappingを使い、文字列の変換規則をテーブルの形で記述します。
Mappingを使った変換はあらかじめ用意した規則でデータを置き換えるというときに非常に便利です。
文字列の置換機能はほかにReplaceがありますが、Mappingには一度に複数の規則を適用できるという特徴があります。
新規アプリからデータ ロード エディタを開いてスクリプトをコピーし、次の2つのテーブルを読み込んでみましょう。
国コード:
Mapping LOAD * inline
[
国コード,国名
US,アメリカ
JP,日本
CN,中国
KR,韓国
FR,フランス
]
;出席簿:
LOAD 出席番号,
名前,
ApplyMap('国コード',国籍) as 国籍
inline
[
出席番号,名前,国籍
1,Masato,JP
2,Jhon,US
3,Kim,CN
4,Han,KR
5,Rika,JP
6,George,FR
7,Richard,US
]
;
通常のLOAD文の前に Mapping キーワードを入力するとそのテーブルはマッピングテーブルになります。
マッピングテーブルには文字列を置き換えるときの規則を登録します。
インラインで入力した左側カラムは置き換え前、右側カラムは置き換え後を表します。カラム名には特に規則はありませんがわかりやすい名前を付けておきましょう。
1番目のテーブルでUS→アメリカ、JP→日本,……として変換が登録されたことになります。
重要な点としてテーブル名は後から規則を適用する際に参照するため名前を付ける必要があります。
また、マッピングテーブルはスクリプトの最後に自動で削除されます。
2番目のテーブル読み込みで実際に置き換えの規則を適用して読み込みを行います。
上のスクリプトで大事なのはこの部分です。
ApplyMap('国コード',国籍) as 国籍
ApplyMap(項目,'マッピングテーブル名',['変換元が見つからなかったとき'])関数を使ってマッピングテーブルの文字列を置き換える規則を適用します。
ApplyMapによる文字列変換は文字列を完全一致で検索します。
部分一致で置換する場合はMapSubstring()関数を使いましょう。
スクリプトからロードを行うとインラインテーブルにあった国コードが国名に変換されます。
ここまでの記事でも少し触れましたが、文字列を置換する場合は完全一致よりも部分一致のほうが好ましい場合もあります。部分一致の場合はMapSubstring()関数がありますので例を挙げながら解説します。
マッピングテーブルは前回と同じものを使用します。
国コード:
Mapping LOAD * inline
[
国コード,国名
US,アメリカ
JP,日本
CN,中国
KR,韓国
FR,フランス
]
;
変換対象のテーブルとしてそれぞれの人が行ったことのある国のリストを読み込むことにしましょう。
渡航記録:
LOAD 名前,
MapSubstring('国コード',渡航歴) as 渡航歴
inline
[
名前,渡航歴
Masato,JP US CN
Jhon,US FR
Kim,CN KR
Han,KR JP
Rika,JP US
George,FR US KR
Richard,US CN
]
;
最初の記事の内容で扱ったデータと比較して変化している点として以下のポイントがあります。
MapSubstring()関数は読み込んだマッピングテーブルを使い、文字列を部分一致で検索します。
以上のスクリプトをロードすると結果は以下のようになります。
渡航歴に複数の国が入っていてもすべて変換してくれていますね。
このように「部分一致で文字列を置換する」そして「変換規則が複数ある」データを扱うときはMapSubstring()関数を使ってみましょう。
なお、1つのカラムに複数の国が入っているテーブルは分析上あまり好ましくありません。
(「韓国に行ったことのある人は何人いるかカウントする」などの分析が少し不便です)
【データ整形】1つのセルに複数のデータが入っているときはSubFieldで分割するを参照して、Qlik Senseで分析しやすいテーブルにしてみましょう。