Tableauでは数多くのデータソースに接続して必要なデータを抽出し、様々な形式を持つ複数テーブルをまたいで分析することができます。
本ページでは、バージョン2020.2から新たに追加されたリレーションシップを設定してフォーマットの異なる複数のテーブルを読み込み、分析する方法を紹介します。
リレーションシップを利用すると複雑な設定をしなくてもテーブルどうしを関連づけることができます。
また、Tableauが分析時に結合のタイプを自動的に決定してくれるので、フォーマットの異なる複数のテーブルも問題なく分析することができるようになります。
以下、テーブル読み込み時のリレーションシップの設定の方法と分析時に利用するフィールドによって異なる結合のタイプについて紹介します。
リレーションシップの設定
Tableauで複数テーブルのデータを読み込む際にはリレーションシップ(関係)を設定します。
リレーションシップとは複数テーブル間の関連付けのことを指し、どのフィールドで関連付けるかはTableauが自動的に選んでくれます(もちろん手動で設定することも可能です)。
具体的な例で動作を紹介したいと思います。
以下のように、スーパーストアのサンプルを超簡略化した「注文」「返品」「担当者」の3テーブルから構成されるデータを利用します。
データをTableauで読み込みます。
左側のペインにある「注文」テーブルをキャンバスにドラッグ&ドロップします。
次に「返品」テーブルも同様にドラッグ&ドロップします。
すると以下のようになります。
2つのテーブルが線で結ばれてリレーションシップが設定されました。
「注文」テーブルの「オーダーId」と「返品」テーブルの「オーダーId」を共通のキーとしてテーブルが関係づけられたことが分かります。
続けて「担当者」テーブルをキャンバスにドラッグ&ドロップします。
すると以下のようになります。
今度は「注文」テーブルの「地域」と「関係者」テーブルの「地域」を共通のキーとしてテーブルが関係づけられました。
データソース画面からワークシートに移ると以下のようになっています。
データペインにはテーブル毎にディメンションとメジャーのフィールドが表示されていて、すべてのテーブルに共通の「メジャーネーム」と「メジャーバリュー」のフィールドが一番下に表示されています。
このようにTableauでは、リレーションシップが動的に設定されて複数テーブルを読み込むことができます。ただし、この段階では関係が定義されただけで、実際には分析時に設定するフィールドの種類に応じて結合のタイプ(内部・左外部・完全外部結合)が異なります。
次はそれらを詳しくみていきましょう。
選択フィールドによる結合タイプの違い
分析時にワークシート上で設定するフィールドの種類によって、複数テーブルの結合のタイプは以下のように異なります。
ケース1:両テーブルからディメンションを選択して分析
➡︎ 内部結合
ケース2:一方のテーブルからディメンション、もう一方からメジャーを選択して分析
➡︎ 完全外部結合
ケース3:一方のテーブルからディメンションとメジャー、もう一方からディメンションを選択して分析
➡︎ 左外部結合
ケース4:両テーブルからディメンションとメジャーを選択して分析
➡︎ 完全外部結合
上と同じ例題で、それぞれのケース別に結合のタイプと分析結果を確認してみます。
両テーブルのディメンションで分析
両方のテーブルからディメンションのフィールドを選択する場合には、結合のタイプは内部結合になります。
本ケースに当てはまる例として、返品されたオーダーの一覧を見たい場合を考えてみましょう。
利用するのは注文テーブルの「オーダーId」と返品テーブルの「オーダーId」です。
それらのテーブルが内部結合すると、それぞれの「オーダーId」が共通キーとしてリレーションシップが設定されているので、両テーブルの「オーダーId」が存在する行のみが抽出されます。
実施に集計してみましょう。
データペインから注文テーブルの「オーダーId」と返品テーブルの「オーダーId」を行に、返品テーブルの「返品(返品)」をマークのテキストにドラッグ&ドロップします。
すると以下のようなビューになります。
注文テーブルからディメンション「オーダーId」、返品テーブルからディメンションの「オーダーId」を選択するので内部結合になります。
内部結合なので注文テーブルと返品テーブルの両方に存在するオーダーのみが表示されていることが分かります。
一方のテーブルのディメンション、もう一方のメジャーで分析
あるテーブルからディメンション、もう一方のテーブルからメジャーのフィールドを選択する場合には、結合のタイプは完全外部結合になります。
例題として、マネージャー毎に売上と注文数を表示する場合を考えてみましょう。
利用するのは担当者テーブルの「マネージャー」と注文テーブルの「売上」「注文(カウント)」です。
それらのテーブルが完全外部結合すると、どちらかのテーブルに存在する行が集計されます。
実施に集計してみましょう。
データペインから担当者テーブルの「マネージャー」を行に、メジャーネームを列にドラッグ&ドロップして、メジャーバリューを「合計(売上)」と「カウント(注文)」に設定します。
すると以下のようなビューになります。
担当者テーブルからディメンション「マネージャー」、注文テーブルからメジャーの「売上」と「注文(カウント)」を選択するので完全外部結合になります。
完全外部結合なので、注文テーブルにないマネージャー「F」が表示されていますし、マネージャーが不明の注文の売上も集計されていることがわかります。
一方のテーブルのディメンションとメジャー、もう一方のディメンションで分析
あるテーブルからディメンションとメジャー、もう一方のテーブルから ディメンションのフィールドを選択する場合には、結合のタイプは左外部結合になります。
具体例として、地域毎にマネージャーと売上を表示したい場合を考えてみましょう。
利用するのは注文テーブルの「地域」「売上」と担当者テーブルの「マネージャー」です。
それらのテーブルが左外部結合すると、「地域」が共通キーとしてリレーションシップが設定されているので、注文テーブルに存在するすべての行に担当者テーブルで「地域」が一致する行が紐づいて抽出されます。
実施に集計してみましょう。
データペインから注文テーブルの「地域」と関係者テーブルの「マネージャー」を行に、注文テーブルの「売上」をマークのテキストにドラッグ&ドロップします。
すると以下のようなビューになります。
注文テーブルからディメンションの「地域」とメジャーの「売上」、担当者テーブルからディメンションの「マネージャー」を選択するので、注文テーブルを網羅する左外部結合になります。
左外部結合なので、注文テーブルにない「北海道」は表示されておらず、また担当者テーブルにない「さいたま」と「茨城」のマネージャーは「NULL」になっていることが分かります。
両テーブルのディメンションとメジャーで分析
両方のテーブルからディメンションとメジャーのフィールドを選択する場合には、結合のタイプは完全外部結合になります。
具体例として、各オーダーの返品の有無と売上、返品数を表示したい場合を考えてみましょう。
利用するのは注文テーブルの「オーダーId」「売上」と返品テーブルの「オーダーId」「返品(カウント)」です。
それらのテーブルが完全外部結合すると、どちらかのテーブルに存在する行が集計されます。
実際に集計してみましょう。
データペインから注文テーブルの「オーダーId」と返品テーブルの「オーダーId」を行に、メジャーネームを列にドラッグ&ドロップして、メジャーバリューを「合計(売上)」と「カウント(返品)」に設定します。
すると以下のようなビューになります。
注文テーブルからディメンションの「オーダーId」とメジャーの「売上」、返品テーブルからディメンションの「オーダーId」とメジャーの「返品(カウント)」を選択するので、完全外部結合になります。
完全外部結合なので、注文テーブルにないオーダーid「99」の返品が表示されています。また返品テーブルにはデータのない注文も正しく集計されていることが分かります。