LoginSignup
0
0

QlikSenseで3つ以上のデータをJOINしたい

Last updated at Posted at 2023-12-14

QlikSenseで3つ以上のデータをLEFT JOINでつないでいこうとしたら、全然うまくいかなかったので、やり方をメモします。
※これよりもっといい方法があるのかもしれませんが、自分にはこの方法でしかうまくできませんでした。

2個のテーブルをJOINする時の書き方

Table1

COL
123
456

Table2

COL NO
123 123
2つのテーブルの時の一般的なLEFT JOINの書き方
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は無視されて、値は出てきません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0