【QlikView】複数のテーブルやファイルからデータを取り込む時の便利技
QlikViewは、複数のテーブルやファイルからデータを取り込んでも、
カラム名を同じにすれば、自動で関連付けてくれます。
さらに、LEFT JOINを使うと、一方の表を優先してデータを取り込むことができます。
「一方の表を優先してデータを取り込む」とは、
たとえば、売上表に会員番号をもとに顧客表の氏名を結合する場合などです。
売上表に会員番号が無い顧客の名前は取り込みません。
売上表:
商品名 |
会員no |
リンゴ |
001 |
バナナ |
002 |
みかん |
003 |
顧客表:
会員番号 |
氏名 |
001 |
山田 |
002 |
鈴木 |
003 |
佐藤 |
004 |
山下 |
上のようなテーブルがあったとして、LEFT JOINを使わない場合、ロードスクリプトは以下のように書きます。
CSVファイルを使う人は、SQL SELECT~;のところをLOAD ~に置き換えて考えてください。
売上表:
SELECT
商品名,
会員no AS 会員番号
FROM売上表;
顧客表:
SELECT
会員番号,
氏名
FROM顧客表;
データは以下のようになっています。
商品名 |
会員番号 |
氏名 |
リンゴ |
001 |
山田 |
バナナ |
002 |
鈴木 |
みかん |
003 |
佐藤 |
- |
004 |
山下 |
何にも購入していない004山下さんが、データに入っています。
購入した人の詳しいデータが知りたかっただけなら、
004山下さんは、この場合邪魔なデータになってしまいます。
ちなみに、システムテーブルで見ると、こうなっています。
$Field |
売上表 |
顧客表 |
会員番号 |
会員番号 |
会員番号 |
商品名 |
商品名 |
- |
氏名 |
- |
氏名 |
そこで、LEFT JOIN を使います。
前のテーブルとデータを結合し、
結合できないデータ(この場合、購入履歴に番号が無い004山下さん)は、
取り込まずに、捨ててしまいます。
売上表:
SELECT
商品名,
会員no AS 会員番号
FROM売上表;
LEFT JOIN (売上表)
SELECT
会員番号,
氏名
FROM顧客表;
商品名 |
会員番号 |
氏名 |
リンゴ |
001 |
山田 |
バナナ |
002 |
鈴木 |
みかん |
003 |
佐藤 |
システムテーブルで見ると、こうなっています。
$Field |
売上表 |
会員番号 |
会員番号 |
商品番号 |
商品番号 |
氏名 |
氏名 |
ちなみに、売上表のほうのデータは消えません。
売上表の会員番号が、未記入だったり、ありえない番号でも、売上表のほうのデータは減らずに、
氏名のところは空欄でデータが保存されます。
商品名 |
会員番号 |
氏名 |
リンゴ |
001 |
山田 |
バナナ |
002 |
鈴木 |
みかん |
003 |
佐藤 |
もも |
005 |
<![if !supportLists]>- <![endif]> (空) |
これでデータが減るので、QlikViewが軽くなるかも!