Tableau:『データブレンド』機能を具体的なデータで理解する


今回はTableau特有の結合機能「データブレンド」についてご紹介します。

ブレンド機能を理解するためには本題に入る前に、まず結合の懸念点から考える必要があります。

粒度の違うデータの結合は注意が必要

具体的なデータで見ていきます。以下のようなデータがあったとしましょう。
(※数値はダミーです)

実数値テーブル

CD名 売上
夜明けまで強がらなくていい 1月 120万
夜明けまで強がらなくていい 2月 110万
黒い羊 1月 100万
黒い羊 2月 90万
こんなに好きになっちゃっていいの? 1月 80万
こんなに好きになっちゃっていいの? 2月 70万

目標値テーブル

グループ名 CD名 売上目標
乃木坂46 夜明けまで強がらなくてもいい 200万
欅坂46 黒い羊 150万
日向坂46 こんなに好きになっちゃっていいの? 100万

実績値テーブルの粒度はグループ、目標値テーブルの粒度はグループかつ日付です。

このような粒度の違うデータを紐づける時は注意が必要です。

シンプルに結合してみます。結合KEYは「CD名」ですので、結合後のテーブルは下記のようになります。

グループ名 CD名 売上 売上目標
乃木坂46 夜明けまで強がらなくていい 1月 120万 200万
乃木坂46 夜明けまで強がらなくていい 2月 110万 200万
欅坂46 黒い羊 1月 80万 150万
欅坂46 黒い羊 2月 80万 150万
日向坂46 こんなに好きになっちゃっていいの? 1月 80万 100万
日向坂46 こんなに好きになっちゃっていいの? 2月 70万 100万

ここで乃木坂46の売上と売上目標を比較してみると・・・・

230万(売上) vs 400万(売上目標)

集計するとこんな感じになりますがどうも違和感がありますね。数値がかなり乖離しています。

理由は単純で、売上目標のデータ1行に対して、売上のデータが2行結合されていて、データが重複してしまっているからです。

集計関数で解決する

Tableauで出来る解決策の一つとして、集計を駆使することが挙げられます。Tableauでは集計方式を簡単に操作できるので以下の様に、一瞬で調整は可能です。

しかし一つ懸念として「集計方式の調整し忘れ」があります。項目数が増えて複雑な時や、データを結合した人とその後の作業をする人が違った際、集計ミスが起こる可能性があります。

「AVGなのにSUMしてた」などの集計ミスです。
粒度の違うデータを結合するときは注意が必要です。

粒度の違うデータ統合に有効な「ブレンド」機能

ここで出番なのがTableauのブレンド機能です。

データブレンドとは一言で言うと、「複数のデータソースを集計してから結合する」です。
ブレンド機能の仕組みは以下の通りです。

テーブルを合体させてから集計する「データ結合」に対し、

「ブレンド」はそれぞれ集計してから結合します。

順番が逆ですね。

ですので、ブレンドをすると以下のようになります。

無事クリーンなテーブルの完成です。

Tableau上での操作

ブレンドをTableau上で行うのは簡単です。

複数のデータソースを別のデータソースとして読み込んだら、「データ」タブから「リレーションシップの編集」を選択します。

↓のような画面が出るので、ブレンドしたいデータソースを2種類選んで、KEYにしたいカラムを選択したら完了です。

カラム名が同じものは自動的に指定されます。DAYと日付など、カラム名が違うものは手動で編集なので注意です

ここまでをまとめると、

  • 結合は「テーブルを合体させてから集計する」

  • ブレンドは「集計してから合体する」

のように、順番に違いがあります。

ブレンドが絶対というわけではない

ブレンド機能は画期的で便利な機能ですが、毎回使える機能というわけではないかと思います。

何故なら、データソースが多くなるほどブレンドなのか、結合なのか、KEYは何なのかなどごちゃごちゃしてしまうからです。

なので、GCPやAWSなどのDWHにデータソースが全て格納されているならばTableau上でブレンドさせずに

あらかじめSQLを叩いて集計テーブル、マートを作ってしまうのがベターが気がします。

今回の例でいうと、

SELECT
グループ名,CD名,売上,売上目標
FROM `目標値テーブル`
INNER JOIN
(
SELECT
グループ名,CD名,SUM(売上)
FROM `実数値テーブル`
GROUP BY CD名
)
USING
(CD名)

こんなイメージです。集計されてないテーブルを集計したテーブルをjoinさせています。

Tableauに考えさせずに可視化できるのでデータ量が多い場合などはパフォーマンスが上がるかもしれませんね。

元も子もない結論ですが、なるべくTableauには考えさせずにいきたいところです。