見出し画像

Tableauのデータの関連付け方法(結合・リレーション・ブレンド)

Tableauの学習を進めていると様々なデータの関連付け方法があることが分かりました。
以下のブログを知人とディスカッションしつつ、自分なりに各関連付けの方法によってデータテーブルがどのように変わるのか整理してみました。

なお、今回は以下の「注文」と「返品」という2つのデータソースを関連付けるという前提で述べていきます。
データを関連付けるキーとなる関連フィールドは「商品名」を用います。

今回使用する2つのデータソース

1.結合

■内部結合

・両方のテーブルに一致する値を含む行でテーブルを作成

内部結合後のテーブル

結合は行レベルの関連付けになるため、重複する関連フィールドのデータがあると、その分増えていくのが特徴です。
今回の例では、返品側に「A」が2つあるため、それぞれ注文側の「A」に関連付く形になり、注文データが増えてしまいました。

■左結合

・両方のテーブルに一致する値を含む行と、左のテーブルの全ての行でテーブルを作成。左のテーブルに対応する値が右のテーブルにない場合は、NULLが表示される。

左結合後のテーブル

「A」が増えてしまうのは、内部結合のときと同じ理由です。
今回は左側つまり注文側にしか「C」がないため、返品側の値はNULLになっています。

■右結合

・両方のテーブルに一致する値を含む行と、右のテーブルの全ての行でテーブルを作成。右のテーブルに対応する値が右のテーブルにない場合は、NULLが表示される。

右結合後のテーブル

「A」が増えてしまうのは、内部結合のときと同じ理由です。
今回は右側つまり返品側にしか「D」がないため、注文側の値はNULLになっています。

■完全外部結合

・両方のテーブルの全ての行でテーブルを作成

完全外部結合後のテーブル

「A」が増えてしまうのは、内部結合のときと同じ理由です。
左側つまり注文側にしか「C」がないため、返品側の値はNULLになり、そして右側つまり返品側にしか「D」がないため、注文側の値はNULLになっています。

2.リレーション

リレーションは、集計後のデータソース同士を関連付けるため、今回のケースでは「返品」データが変化します。後述するブレンドでも同じです。
集計されてから関連付くため、結合のときのように重複する関連フィールドでデータが複製されるという現象は起こりません。

リレーション・ブレンド時は集計後のデータソースを用いる

リレーションでは、プライマリデータ及びセカンダリデータをどちらにするのかで、結果が変わってきます。
プライマリデータにない値であっても、セカンダリデータのメジャー集計をNULLとして行うところが特徴です。

■プライマリ:注文-セカンダリ:返品

返品側には「C」はないため、NULLとなります。

注文側(=プライマリ)にない値としては「D」があります。注文側の商品名(ディメンション)と数量(メジャー)、返品側の商品名(ディメンション)はその結果NULLになりますが、返品側のNULLは集計され、「D」に該当する10が計上されます。

■プライマリ:返品-セカンダリ:注文

注文側には「D」はないため、NULLとなります。

返品側(=プライマリ)にない値としては「C」があります。返品側の商品名(ディメンション)と数量(メジャー)、注文側の商品名(ディメンション)はその結果NULLになりますが、注文側のNULLは集計され、「C」に該当する50が計上されます。

3.ブレンド

ブレンドもリレーションと同じく、集計されてからデータソース同士が関連付くため、結合のときのようなデータの複製は起こりません。

リレーションの違いとして私が今回理解した点は2つあります。

①データソースが同一ファイル内にある場合は、リレーション。データソースが別々のファイルである場合は、ブレンド。
例)エクセル:ブック内のシート同士を関連付けたいときはリレーション。ブック同士を関連付けたい場合はブレンド

②プライマリデータにはない関連フィールドがあった場合でもNULLとして関連付けられ、セカンダリ側のメジャーが集計されるのがリレーションNULLとしての関連付けは行われないのがブレンド。ブレンドの場合は左結合と似ています。

①はさておき、②はリレーションとの比較をするために、さきほどのリレーションの説明と同様、プライマリとセカンダリの組み合わせごとにお示ししたいと思います。

■プライマリ:注文-セカンダリ:返品

返品側には「C」はないため、NULLとなります。

注文側(=プライマリ)にはDはないため、関連付け後のデータテーブルには含まれません。

■プライマリ:返品-セカンダリ:注文

注文側には「D」はないため、NULLとなります。

返品側(=プライマリ)にはCはないため、関連付け後のデータテーブルには含まれません。


Tableauを触り始めた頃は、存在する単体のデータをどのようにビューで表現するかという使い方に終始していましたが、様々なデータを結びつけていきたいとなると表現するデータをどのように事前に準備・整理するかという使い方に発展していくことを感じています。

難しいところに入っていきますが、理解できればデータ分析のパターンがますます増えていくことになるため、データドリブンカルチャーを浸透させていく上では避けては通れない道かなとも思います。

また、今回知人とのディスカッションのおかげで頭の中を整理することができました。言語化することを通じて理解が深まるということを改めて認識した次第です。

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