QlikSenseで3つ以上のデータをLEFT JOINでつないでいこうとしたら、全然うまくいかなかったので、やり方をメモします。
※これよりもっといい方法があるのかもしれませんが、自分にはこの方法でしかうまくできませんでした。
2個のテーブルをJOINする時の書き方
Table1
COL |
---|
123 |
456 |
Table2
COL | NO |
---|---|
123 | 123 |
QLIK_TABLE_1:
LOAD
COL
FROM
Table1;
LEFT JOIN(QLIK_TABLE_1) //()部分は書かなかった場合、直前のテーブルにJOINされます。書いた方が無難。
LOAD
COL,
NO
FROM
Table2;
結果はこんな感じになります。
QLIK_TABLE_1 という名前の下記のようなテーブルができます。
COL | NO |
---|---|
123 | 123 |
456 | - |
3個以上で同じように書いた場合
下記のように3つのテーブルがある場合。
Table1
COL |
---|
123 |
456 |
Table2
COL | NO |
---|---|
123 | 123 |
Table3
COL | NO |
---|---|
456 | 456 |
欲しい結果
COL | NO |
---|---|
123 | 123 |
456 | 456 |
QLIK_TABLE_1:
LOAD
COL
FROM
Table1;
LEFT JOIN(QLIK_TABLE_1) //()部分は書かなかった場合、直前のテーブルにJOINされます。書いた方が無難。
LOAD
COL,
NO
FROM
Table2;
LEFT JOIN(QLIK_TABLE_1)
LOAD
COL,
NO
FROM
Table3;
出てくる結果は下記の通り
COL | NO |
---|---|
123 | 123 |
456 | - |
なんで・・・?
いろいろ順番入れ替えて試してみたのですが、
どうやら、一つ目のLEFT JOIN以降は無視されてるのか、思ったようにJOINされませんでした。
回避する方法
QLIK_TABLE_1:
LOAD
COL
FROM
Table1;
LEFT JOIN(QLIK_TABLE_1) //()部分は書かなかった場合、直前のテーブルにJOINされます。書いた方が無難。
LOAD
COL,
NO
FROM
Table2;
NoConcatenate
OTHER_TABLE_1 :
LOAD
*
RESIDENT
QLIK_TABLE_1;
DROP TABLES QLIK_TABLE_1;
LEFT JOIN(OTHER_TABLE_1)
LOAD
COL,
NO AS NO_3
FROM
Table3;
NoConcatenate
OTHER_TABLE_2 :
LOAD
COL,
IF(NO>0,NO,0) + IF(NO_3 > 0 ,NO_3,0) AS NO
RESIDENT
OTHER_TABLE_1;
DROP TABLES OTHER_TABLE_1;
これをすると、無事下記のような結果がでてきました。
OTHER_TABLE_2
COL | NO |
---|---|
123 | 123 |
456 | 456 |
なんでこんなことしないといけないのかはさっぱりわかりませんが。。。
JOINを3個以上したくてトラブってる方の役に立つと嬉しいです。
もっといい書き方があれば、ご指摘いただけると助かります。
※今回の例では、TABLE2とTABLE3のカラムが同じなので、
先にConcatenateしてしまって、2つのテーブルっぽくして処理することもできます。
が、TABLE3のカラム名がNO3、とか別のカラムだったとしても、
2個目以降のLEFT JOINは無視されて、値は出てきません。