【Tableau備忘録】(その1) Tableau 内部結合 左結合 右結合 完全外部結合 どれが優先される?
Tableauで複数のデータソースを結合するとき
欲しいデータがなかったり、謎のnullが発生することってありませんか?
最初の方は何となく見過ごしていても
ダッシュボードの最終確認の際に
「この地区のデータがごっそりないけどどうして?」
「なんか数値おかしくない?」
「このnullってなに?」
って聞かれて焦ったり・・・
色々な要因はあると思いますが、
今回は「結合」にフォーカスしてお話します。
結合の仕方を間違えると、
欲しいデータが消えたり、謎のnullが発生します。
また正しく計算式を組んだとしても、
結合の仕方によっては、欲しい数値が出てこないなど
様々な問題が起きます。
Tableauの仕様さえ理解してしまえば、難しい作業ではありません。
では最初に各結合のおさらいから。
(本題は下の方)
内部結合

お互いに共通の項目が残ります。
左結合

左側がすべて残り、該当しない要素はnullになります。
右側にしかない要素は消えます。
右結合

右側がすべて残り、該当しない要素はnullになります。
左側にしかない要素は消えます。
完全外部結合

左も右もすべて残ります。
該当しない要素はnullになります。
ではどれが優先される?(本題)
どのデータが、
どの結合で結びついているか
ここを考えれば簡単です。
結論から言うと、
除外された要素は、どのテーブルからも消える
ことになります。
試してみましょう。
以下がテストデータになります。
サンプルスーパーストアのデータの一部を取り出して、
売上、地域、顧客、製品、オーダー日ごとに
別シートに分けてあります。





製品・・・9要素
地域・・・20要素
顧客名・・・20要素
売上・・・20要素
オーダー日・・・10要素
では、顧客名(20要素)に対してオーダー日(10要素)を内部結合します。

オーダー日すべての要素が残りましたね。
では結合したオーダー日に売上データを左結合します。

元々オーダー日が10個しかないので10個残るのは容易に想像できますね。
では結合する順番を変えます。
顧客名と売上を左外部結合。
その後売上データに対してオーダー日を内部結合します。

結合の順序は関係なく、
内部結合の結果が優先されるので要素は10個になります。
顧客名に対して売上とオーダー日を結合しても結果は同じです。
顧客名に売上を左外部結合
顧客名にオーダー日を内部結合

なので、顧客名を全て残したい場合は
顧客名に対してオーダー日は左外部結合にします。

また、結合の順序を考えないといけません。
まとめ
外部にすると、nullが残り、内部にするとnullが消えます。
結合の順序は関係なく、より条件の厳しいテーブルが優先されます。