QlikSenseでのJOINが、SQLでのJOINと若干挙動が違うのと、
データモデルビューワで見ても正しいかわからなかったので、
メモとして残します。
以下のようなテーブルを作って試していきます。
t1
USER_ID | NAME |
---|---|
1 | A |
2 | B |
3 | C |
4 | D |
t2
USER_ID | CASH |
---|---|
1 | 123 |
2 | 453 |
3 | 987 |
5 | 1023 |
まずは単純なLOAD (JOINを明記しない)
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
LOAD
USER_ID,
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
データモデルビューワの見え方
ER図っぽい感じになって、KEYがUSER_IDなのもわかります。
OUTER JOINっぽい挙動をしました。
LEFT JOIN LOAD
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
LEFT JOIN LOAD
USER_ID,
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
データモデルビューワの見え方
一個にくっついてしまいました。
プレビューはこんな感じ。
ちゃんと結果はLEFT JOINでした。
RIGHT JOIN LOAD
LEFTを見た時点で結果はお察しですが、全部確認していきます。
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
RIGHT JOIN LOAD
USER_ID,
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
INNER JOIN LOAD
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
INNER JOIN LOAD
USER_ID,
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
データモデルビューワの見え方
OUTER JOIN LOAD
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
OUTER JOIN LOAD
USER_ID,
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
データモデルビューワがあまり役に立たないですね。。。
CROSS JOIN LOAD は存在しない
存在しないけど、JOIN_KEYがなければ勝手にCROSS JOIN っぽくなります
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
LOAD
USER_ID AS USER_ID1, //名前が違うとJOIN_KEYにならないので、名前を変えます。
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
LOADするテーブル数が増えると、データモデルビューワで1個にしちゃうこの挙動はつらい。。。
今度はデータマネージャを試してみたいと思います。
追記 JOIN LOAD
LEFT/RIGHT/OUTER/INNERを書いてないJOINの存在を忘れていました。。。
test
t1:
LOAD
USER_ID,
NAME
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet1);
t2:
JOIN LOAD
USER_ID,
CASH
FROM [lib://AttachedFiles/test.xlsx]
(ooxml, embedded labels, table is Sheet2);
OUTER JOINっぽい挙動が多いですね。
データがなくなっちゃうよりは多い方がいいっていうスタンスなんでしょうかね。