見出し画像

Tableau のリレーションシップ機能 その1 ~ 復習: 結合(JOIN) ~

予告通り、Tableauのリレーションシップについて書いていきます。

リレーションシップは、Tableauのデータ接続のところにある機能です。Tableauを使う方なら誰もが通る道です。何回も登場する言葉なので、このブログの中では断り書きがない限り "リレーション" と略していきます。また、これに対する「結合 (JOIN) 」は "結合" とし、一般的なデータの結び付きを示す場合は "突合" と表現していきます。
"リレーション" は、Tableau の 2020.2 から登場した比較的新しい機能です。Tableauで複数のテーブル (表) を扱う時、従来は "結合" という方法を使っていました。"リレーション" が登場した当時、実は少し混乱がありました。「"結合" と何が違うの?」「"リレーション" によってビューの結果が変になる」など。一部には「危ないから使うな!」なんて話もありました。現在も従来の "結合" は使えるので、リレーションの使用を思いとどまっている方もいらっしゃるのではないでしょうか?(私もその一人でした)。 "リレーション" のほうが既定になっているので、新しいユーザーは特に気にすることなく「そういうものだ」と思って "リレーション" を使われている方も多いように見受けます。

このブログではシリーズで "リレーション" の奥底を解明していきたいと思います。なぜなら、正しく理解している人がほとんどいないから。そのため誤解している人が多いから。そしてリレーションによって広がる未来があるから。何回かに分けていきますが、全部で何回になるか?解りません(それ位奥が深い話になります)。ゴールもまだ明確ではありませんが、私が解析して知ったことを発信していこうと思います。やや上級者向けの内容になります。出来るだけ解りやすく説明していこうと思ってますが、Tableau初級の方は、時に、頭痛、眠気、気分が悪くなる場合があるかも知れません、、、
ご注意下さい (笑)

ということで、そろそろ内容に入っていきます。先ずは "結合" の復習です。

Tableau 2020.2 以降のバージョンをご使用の方も、従来の "結合" を使用出来ます。データ接続画面で、テーブルを画面中央にドラッグ&ドロップした後、画面上部に表示される "論理テーブル" をダブルクリックすると従来の結合画面が出てきます。

話を解りやすくするため、簡単なサンプル・テーブルを使って "結合" を確認してみましょう。サンプルデータは、以下のリンク先 (Google Drive)に置いておきます。
TRAN_01.csv  (トランザクションデータ)
CST_01.csv  (顧客データ)

それぞれのCSVファイルの中身は以下のようになっています。コンピューターのデータは、一般的にこのようにいくつかの表 (テーブル) に別れて保管されています。"サンプルスーパーストア" のように1行に全てのデータが書き込まれていることは、ほとんどありません。データを収集する過程では、このほうが効率が良いからです。例えば、注文を入力する時に毎回顧客情報を入力するのは大変です。注文データに顧客コードを入力すれば、氏名や住所を入力しなくても顧客マスターにあるデータを参照して利用出来るようになっているわけです。ところがデータ分析やデータ活用する時は、注文データも顧客データも同時に見る必要があるので、今度は、別々に保管されているデータを予めくっ付けておくか、突合して使う必要があるのです。Tableau にもこのデータを突合する機能が "データ接続" に備わっているわけです。では、この2つのデータを "結合" してみましょう。

TRAN_01.csv (トランザクションデータ)
CST_01.csv (顧客データ)

TRAN_01 は注文実績みたいなデータとお考え下さい。注文番号(ORD_CD)、顧客コード(CST_CD)、商品コード(PRD_CD) 、注文数(QTY) があります。CST_01 は顧客マスターで、顧客コード(CST_CD)、顧客名(CST_NAME)、性別(CST_GENDER)、年齢(CST_AGE) があります。この2つのテーブルを 顧客コード(CST_CD) で結合してみましょう。 

"結合" をしようとすると、4つの選択肢があります。「内部」「左」「右」「完全外部」の4つです。リレーションを使っているとこの結合の種類が出てこないので、あまり意識したことがない方も多いかも知れません (それがTableauの意とするところです)。しかし、結合の種類はデータを扱う上でとても大切なことです。結合を復習していきましょう。

最初に、2つのデータを CST_CD で「内部結合 (INNER JOIN) してみましょう。"TRN_01" にある "T_CST_CD" と "CST_01" にある "C_CST_CD" を結合。
下に表示されるサンプルデータで結果を確認すると3行だけ表示されてます。

内部結合

"TRN_01" の "T_CST_CD" には、a, b, c, d があり、"CST_01"の  "C_CST_CD" には、b, c, d, e があります。「内部結合」の場合、2つのテーブルに共通で存在する b, c, d のみが結果に表示されています。

次に「結合

左結合

今度は、"TRN_01" にある a, b, c, d が表示されるようになりました。CST_CD が a の行 (上記の図では一番下の行) を見ると、右の方にある "CST_01" のデータが全て NULL になっていることが確認できます。"CST_01" には a という顧客が存在しないので、何も表示されないわけです。

次に「結合

右結合

今度は "CST_01" にある b, c, d, e が表示され、顧客: a は表示されなくなりました。CST_CD が e の行 (上記の図では一番下の行) を見ると、左の方にある "TRN_01" のデータが全て NULL になっています。"TRN_01" には e という顧客が存在しないので、何も表示されないわけです。

最後に「完全外部結合

完全外部結合

a ~ e 全ての顧客が表示されています。「」と「」をミックスしたような状態です。

結合の種類の選択は重要です。データの状況によっては、このようにデータに含まれる内容が変わってきます。例えば、ORD_CD: 1 は未確定の注文で、顧客情報を処理中だから、注文実績に含めてはいけないデータなのかも知れません。逆にその状態であることを知る必要があるためデータに含めたほうが良いかも知れません。また、注文実績だけを把握したいなら CST_CD: e は不要です。しかし、CST_CD: e の注文がなかったことを意図的に知りたい場合もあります。データソースの作成者は、このように分析や用途の意図を汲み取って、どの接続が適切か?を選択する必要があります。そしてこの結合の種類の設定は、データ接続画面でしか出来ません。

話は変わりますが、この4つの結合を SQLで書くとどうなるか? 確認しておきましょう。Tableauユーザーであれば一度は ”SQL” という言葉を聞いたことがあるでしょう。もしかしたら「SQLも一緒に勉強するといいよ」などと言われたことがあるかも知れません。ここではSQLの詳細は説明しませんが、リレーション機能を紐解いていくにあたり、SQLで確認していくことが今後とても重要になってきます。 結合のシーンで Tableau からどんな SQLが発行されているか?一緒に確認していきましょう。

以下は、サンプルデータと同じものをデータベース (Snowflake) に置き、Tableau側から発行される SQLを確認したものです。Tableau のパフォーマンスモニターでも確認できますが、こちらのほうが簡単に確認できるので Snowflake のクエリーの履歴で確認してみることにします。

内部結合 (INNER JOIN) の場合
左結合 (LEFT JOIN) の場合
右結合 (RIGHT JOIN) の場合
完全外部結合 (FLL OUTER JOIN) の場合

違いは、それぞれの最後の行だけです。全て、TRAN_01 に CST_01 の結合が行われていますが、選択した結合の種類によって、INNER → LEFT → RIGHT → FULL に変わっていることが解ります。

今回は復習を兼ねて、Tableau の結合を見てきました。また、その時発行される SQLを確認して頂きました。次回は、リレーションシップによってこの SQL がどう変化していくか?を見ていきます。

Youtube チャンネルで動画配信も準備中です。配信が開始したら当ブログや Twitterでお知らせしますので楽しみにお待ち下さい。


この記事が気に入ったらサポートをしてみませんか?