データ クレンジング
さまざまなテーブルからデータをロードする際には、同じ情報を示す項目値に必ずしも同じ名前が付けられているわけではないという点に注意してください。この一貫性の欠如は、余計な手間がかかるだけでなく関連性を見落とす原因にもなるため、対処が必要です。この問題は、項目値を比較するマッピング テーブルを作成することで解決できます。
マッピング テーブル
mapping load または mapping select からロードされたテーブルは、他のテーブルとは異なる方法で処理されます。これらのテーブルはメモリの別の領域に保存され、スクリプトの実行中にマッピング テーブルとしてのみ使用されます。また、スクリプトの実行後は、自動的に削除されます。
ルール:
- マッピング テーブルは、1 列目に比較値、2 列目にマッピング値を含む 2 列構成でなければなりません。
- 2 つの列に名前を付ける必要がありますが、名前と列に含まれる値に関連性はありません。これらの列の名前は、通常の内部テーブルの項目名とは一切関係がありません。
マッピング テーブルの使用
国をリストした複数のテーブルをロードすると、1 つの国の名前が複数の異なる名前で表示されることがあります。この例では、米国が US、U.S.、United States としてリストされています。
連結されたテーブル内で、米国を示す 3 つの異なるレコードが存在しないようにするために、表示されたものに類似したテーブルを作成し、それをマッピング テーブルとしてロードします。
スクリプト全体は、次のようになります。
CountryMap:
Mapping LOAD x,y from MappingTable.txt
(ansi, txt, delimiter is ',', embedded
labels);
Map Country using CountryMap;
LOAD Country,City from CountryA.txt
(ansi, txt, delimiter is ',', embedded labels);
LOAD Country, City from CountryB.txt
(ansi, txt, delimiter is ',', embedded labels);
mapping ステートメントは、MappingTable.txt ファイルを CountryMap という名前のマッピング テーブルとしてロードします。
map ステートメントは、ロード済みの CountryMap マッピング テーブルを使用して Country 項目のマッピングを有効にします。
LOAD ステートメントは、テーブル CountryA および CountryB をロードします。これらのテーブルは、Country を含め、同じ項目のセットを持っているため連結され、それぞれ項目値がマッピング テーブルの 1 列目の項目値と比較されます。項目値 US、U.S.、United States が検出され、マッピング テーブルの 2 列目の値 (USA) に置き換えられます。
自動マッピングは、項目が Qlik Sense テーブルに保存される一連のイベントの最後に実行されます。典型的な LOAD または SELECT ステートメントでは、イベントの順序は概ね次のようになります。
- 数式の評価
- as による項目の名前変更
- alias による項目の名前変更
- テーブル名の修飾 (該当する場合)
- 項目名が一致する場合はデータのマッピング
つまり、マッピングは数式の一部分として項目名が出現するたびに行われるのではなく、Qlik Sense テーブルの項目名に値が保存される際に実行されます。
マッピングを無効にするには、unmap を使用します。
数式レベルのマッピングの場合は、applymap 関数を使用します。
サブストリング レベルのマッピングの場合は、mapsubstring 関数を使用します。