Tableau 結合まとめ

DATA Saberで学んだ結合部分について、以下にまとめました。

Tableauでデータを合わせる方法

  • 結合(JOIN)

  • データブレンド

  • クロスデータベース結合

  • リレーションシップ

結合(JOIN)とは

あるキー項目を使って1行単位でくっつける方法です。
例えばこちらの商品情報が入ったmasterテーブルと、商品の売上情報が入ったfactテーブルがあります(chatGPTに作成してもらいました)。

これらをProductをキーとして結合(JOIN)すると、以下のような一つの大きなテーブルになります。

結合時の注意点としては、データ同士が1:1でない場合は正しい値が表示されないということです。

例えばmasterテーブルを見るとAppleの単価は100円ですが、下のグラフのように商品ごとの単価を見ようとすると、Appleは300円になってしまいます。
これは結合したfactテーブルでAppleが3回出現しているため、3回分のAppleが計算されてしまったことによるものです。

この場合は計算フィールドで{FIXED [Product]: MAX([Price])}とすることで、正しい値が表示されます。

どんな時に使う?

  • 同じデータベースにある場合

  • 粒度が同じ場合 = 1行ずつ繋ぐことができる場合

ブレンドとは

集計してからくっつける方法です。
結合と違いRIGHT JOIN / LEFT JOIN / INNER JOINなどを選択できず、全てLEFT JOINになります

  • LEFT JOINの特徴

    • 左側のデータソース(プライマリデータソース)にあるものは全て表示される

    • 右側のデータソース(セカンダリデータソース)は、プライマリにないデータは表示されない。

    • プライマリにあるが、セカンダリにないデータはNULLとして表示される。

Tableau上でのプライマリ・セカンダリは、Tableauのフィールドに入れた順に決まります。
→最初にフィールドに入れたデータソースがプライマリ、次に入れたデータソースがセカンダリ。

商品の売上情報が入ったsalesテーブルと商品のproductsテーブルをTableau上でブレンドした場合、以下のようになります(プライマリ: sales / セカンダリ: products)。

プライマリのSalesの値は、全て集計されて表示されています。
プライマリにのみ存在するPineappleは、セカンダリには存在しないためNULLとなっています。
反対に、セカンダリにのみ存在するStrawberryは、プライマリには存在しないため表示されていません

ここでAppleの「 * 」がありますね。
ブレンドは最初に書いた通り、集計してからTableau上でくっつく挙動となっています。
この集計は、数字だけでなく文字も集計されています。
プライマリから集計して取ってきた一つのAppleに対して、セカンダリにはFruitのAppleVegetableのAppleの二つが存在しますね。
このため、Tableauからどちらを表示するかわかりません〜という意味で「 * 」と表示される仕組みになります。

ブレンドでは「 * 」となった部分を結合で見てみると、以下のようになります。

上で書いたように、結合は1行単位でくっつけてから集計しているので、Appleに対してFruitとVegetableそれぞれが結合されます。ただしその分レコードも増えるため、重複データには注意が必要でしたね。

どんな時に使う?

  • 粒度が違うデータ同士を結合する場合 = 1行ずつ繋ぐことができない

クロスデータベース結合とは

横に繋げる点では結合とほとんど同じです。
行レベルの結合で、LOD表現も使うことができます。
違う点としては、データソース(データベース)が異なっていても結合ができることです。
Excelとcsv、データベースとExcelというようにデータの形式が異なる場合も結合が可能です。

クロスデータベース結合は、全てのデータが異なるデータベースからやってくるので負荷がかかることに注意が必要です(イメージは下の図)。

どんな時に使う?

  • 違うデータベースにある場合

  • 粒度が同じ場合 = 1行ずつ繋ぐことができる場合

リレーションシップとは

同じファイルでも違うファイルでもデータのブレンドが可能です。

結合で出てくるベン図はなく、線だけで結ばれているのがリレーションです(ヌードルと言われるらしい)。
リレーションは、結合の指定無しでTableauが適切な結合を考えてくれます

最初の結合では、レコードが重複してしまうことが問題でしたが、リレーションで見てみると

重複行をカウントせずに正しい数字が表示されます!

さらに、ブレンドではLEFT JOINしかできなかったのが、Tableauのドキュメントによると

関係は多対多にすることができ、完全外部結合を使用できます。

と、LEFT JOIN以外も使用できます!

どんな時に使う?

  • 結合やブレンドと同じくデータを横に繋げたい場合

リレーションは集計してから繋がる方法ではなく、LOD計算もできるため結合に近いですが、重複行をカウントしないためブレンドにも似ています。
結合とブレンドのいいとこ取り!!

しかしリレーションの使用条件は

パブリッシュされたデータ ソース間の関係を定義することはできません。

とのことなので、Tableau Serverにパブリッシュしたデータを業務で使用する私のチームではリレーションは使用できずでした、、この場合はブレンドを使用することになります。

Tableauのデータを複数接続する方法は様々ですが、それぞれのメリット・デメリットを理解して、適切な方法を選んでいきましょう!

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