
Tableau 8つのハードルを越える㉔「ブレンディング(データブレンド) その5 計算式とフィルターについて」

こんにちは。
データブレンディング解説の最終回です。
今回は、計算式でのセカンダリデータソースの利用と、フィルター利用時の注意点を解説いたします。
前号「ブレンディング その4」は下記になります。
まず、計算フィールドでのセカンダリデータソース利用について考えます。
これは、プライマリデータソースに作成する計算式で、セカンダリデータソースのデータを利用した場合どうなるか、という話です。
前回まで、私たちを架空のハンバーガーチェーン「マスバーガー」の社員と仮定し、自社データと、ライバル社「モック」のデータをブレンディングで利用し、売上を比較してきました。
今、自社マスバーガーとライバル社モックの力関係をより客観的に把握するため
「対モック指数」という指標を作りたいと思います。計算式は

です。
この指数が「1」より大きければ、自社マスバーガーが優勢という事になります。
Tableauでこの計算式を作ってみようと思います。
まず、データソースをプライマリデータソースに切り替え、計算式の作成を行います。
そこに、メジャー「売上」を持っていきます。(下図)
(メジャー「売上」を右クリックし→「作成」→「計算フィールド」の操作でも可能です。)

このままだと、合計の集計にならないので
SUM()をつけて SUM([売上]) にします。

つぎに「/」を入力し、
データソースをセカンダリデータソース「モック」に切り替え、このセカンダリデータソースのメジャーの「売上」を、「/」の後ろに持っていきます。

すると

このように、計算式が完成します。
モック、つまりセカンダリデータソースの売上には、名前の前に[モック(モック)]というデータソース名がついています。
ここでのポイントは、セカンダリデータソースから持ってきた売上には、SUM()という集計が自動的についている点です。
セカンダリデータソースのフィールドを計算式に持っていくと、デフォルトで合計「sum()」の集計計算が行われるようになっています。
なぜか?疑問になりますよね。
元々、ブレンディングは、共通の切り口でプライマリデータソース、セカンダリデータソース双方を集計し、その後あわせる動作です。
そのため、当然ながらブレンディング機能を用いてセカンダリデータソースからメジャーを持ってくる場合は、集計して用いるのが大前提です。
そのため、デフォルトでSUM()と集計関数が付きます。
このSUMは、もちろん、AVG、MIN、MAX、ATTR(属性)など他の集計に変える事が可能です。
(ただし、COUNTD、MEDIANはセカンダリデータソースのメジャーの集計には利用できません。)
*補足
最初にプライマリデータソースの売上を持ってきたときに、SUM() などがつかないのは、その時点では、この計算式がプライマリデータソースで完結する計算式なのか、セカンダリデータソースのデータも利用する計算式なのか、分からないからです。セカンダリデータソースを使わない計算であれば、非集計の行レベル計算も可能です。
早速、作成した計算式「対モック比」を用いて、下図、客層別にマスバーガーとモックの優劣を示すVizを作りました。

列に、作成した計算式「対モック比」を置いています。
「サラリーマン」で「1」を超えている。つまり、自社マスバーガーが優勢なのが分かります。「学生」と「その他」では劣っています。
続いて、フィルター利用時の注意点を解説いたします。
これは、ブレンディングを利用する上で非常に重要な点です。
たった今作成した、客層別にマスバーガーとモックの優劣を示すViz

これを、関東地方だけのデータに限定したVizにしたいと思います。
もちろんフィルターを使います。
マスバーガーのデータソースから、地域をフィルターに持っていき、
「関東」のみを保持・・


これで出来ました!

このような結果です。と言いたいところですが・・
さて、結果をみると如何でしょう?どの客層でも大きく「1」を下回っています。0.35、0.21、0.19となっています。
こんなに、関東ではマスバーガーが劣勢なのでしょうか?
実は違います。今のVizの状況は下記です。
・プライマリデータソース(マスバーガー)から地域をフィルターに持っていき、関東のみを保持したので、マスバーガーの売上は関東地方のみに限定されました。
・一方、セカンダリデータソース(モック)からは、何もフィルターに置かれていません。つまり、セカンダリデータソース「モック」のデータは引き続き全国のデータが利用されています。
・表示されているのは、客層別にみた
マスバーガーの関東のみでの売上合計 / モックの全国の売上
となっています。
これでは、大きく「1」を下回るのは当然ですよね。
「おかしいな。地域は、プライマリデータソース、セカンダリデータソース共通の切り口として存在しているのに・・・片方にしか、フィルターがかからないのか」と疑問に思われるかもしれません。
ちょっと難しい話となりますが、解説いたします。
ワークシート上で、プライマリデータソースとセカンダリデータソース、共通の切り口となるディメンションを、行、列、マーク(ツールヒント以外)、ページにおいた場合、当該ディメンションには鎖が繋がったアイコンが表示され共通の集計の切り口として働いています。
この場合は、プライマリデータソース側のディメンションをフィルターに置けば、集計後にあわさるセカンダリデータソース側も、プライマリデータソースと同様にフィルターされます。
上記が当てはまらない場合、つまりディメンションが、行、列、マーク(色、サイズ、テキスト、詳細、パス)、ページのいずれにも置かれていない場合は、灰色の鎖は繋がらず(斜線が引かれたまま)共通の集計の切り口として働いていません。
そのような場合に当該ディメンションについて、プライマリ側のディメンションだけでフィルターしても、セカンダリデータソース側はフィルターされていない、という状況になります。
解決策を2つ挙げます。
【解決方法1つ目】
ブレンディング使い初めは、この1つ目の方法がお勧めです。
セカンダリデータソース側の該当するディメンションもフィルターシェルフに配置します。
上記の例の場合は、セカンダリデータソース側の「地域」もフィルターに持っていき、「関東」のみにフィルターします。

このように、フィルターシェルフに地域が二つ並んでいます。
片方は、オレンジのチェックがついていないプライマリデータソース側、
もう片方は、オレンジのチェックがついているセカンダリデータソース側のフィールドです。
これで、両者とも関東地方のデータに限定されています。
結果も「1」前後の値が得られています。
この方式を、個人的に「ダブルフィルター」と呼んでいます。
結論としては、
「ブレンディングを行っているVizにフィルターを使う場合は、
粒度になっていないディメンション(つまり、行にも、列にも、マークの色にも、サイズにも、形状にも、パスにも、テキストにも、詳細にも、ページにもないディメンション)でフィルターする場合は、ダブルフィルターが必要です。」
となります。
このフィルターの特性は、一見、気づきにくいので要注意です。
【解決方法2つ目】
2つ目の解決方法は、手動で強制的に鎖をつなぐ方法です。
上記の例で、プライマリデータソースからのフィルターを置いたあと
セカンダリデータソースに切り替え

上図、「地域」の右の灰色の鎖に斜線が入っているアイコンをクリックします。
すると、

このように、地域の右側が鎖の繋がったアイコンになります。
そして、結果が正しい数値になりました。
この方法でも、地域が共通の切り口として働くようになり、セカンダリデータソース側のフィルターとしても連動して機能します。(この時も集計自体は変わらず、客層別で行われています。)
ただ、この方法はワークシート毎に設定する必要があり、また鎖アイコンの斜線有無を確認しないと正しい設定になっているか気づきにくいという欠点があります。
一方、この方法の利点は、ダッシュボードなどを閲覧し利用する人がフィルター操作する場合に、1つのフィルターを操作するだけで、プライマリ、セカンダリの両データソースをフィルターする事が出来る点です。
例えば、下記のようなダッシュボード例です。一つのフィルターで、マスバーガー、モック、双方のデータをフィルターしVizを表示出来るようにしています。

(Tableau Publicに本記事で作成しているVizを載せています。)
https://public.tableau.com/app/profile/satoshi.ganeko/viz/____v2019_1/2
*フィルターに関する補足
フィルターに置かれたディメンジョンを右クリックすると表示される、「適用先ワークシート」の中の「関連するデータソースを使用するすべて」

この設定をすると、セカンダリデータソースにある当該ディメンションでもフィルターがかかる雰囲気がありますが、少し違います。
この設定は、
「このディメンションと共通の切り口(ブレンド関係の設定されたディメンション)を持つ他のデータソースを、他のワークシートでプライマリデータソースとして使った場合、そのワークシートでも同様のフィルターをかけます。」
という設定になります。
参考:Tableau社ヘルプページhttps://help.tableau.com/current/pro/desktop/ja-jp/filtering_global.htm
以上、数回にわたりブレンディング機能について解説いたしました。
難しい部分もあったかと思いますが、ブレンディングが使えるとTableau利用の幅がぐっと広がります。是非、試してみて下さい。
ご精読ありがとうございます。
次のハードルは下記、「表計算」です。
*連載記事すべてへのリンクは、こちらのマガジンにまとめています。
By ritz_Tableau
2020-2023 Tableau Zen Master | 2019-2021,2023 Tableau Public Ambassador |2021 certified as Tableau Certified Professional | DATA Saber
X(Twitter) : @ritz_Tableau
Tableau Public : https://public.tableau.com/profile/satoshi.ganeko#!/
*記事の中に不正確な点などありましたら、是非、X(Twitter) Direct Messageでお知らせ下さい。よろしくお願いします。m(__)m

おことわり
当記事のコンテンツについて、商用利用でない場合は許可なく転載して頂いて構いません。(ハードル画像および他のサイトから引用している画像は除く)
転載の際は、当記事へのリンクを掲載し転載であることを明記してください。商用利用の場合は許可なく転載しないで下さい。
当記事のコンテンツについて、可能な限り正確な情報を掲載するよう努めていますが、誤情報が含まれたり、情報が古くなっている可能性があります。当記事に掲載された内容、および、当記事からリンクやバナーによって移動したサイトに掲載された内容によって生じた、損害等の一切の責任を負いかねますのでご了承ください。よろしくお願いします。