フィルター、条件式、”隠す”の使い分け

今回はフィルター、計算式内での条件式でデータをフィルターする方法、「隠す」機能について取り上げます。

サブテーマは「フィルタ以外でデータをフィルタリングする(しているように見せる)方法」です。

各種フィルタでデータ、マークをビューから除外する設計は一つのビューで出来ることを制限してしまう場合があるので、今回取り上げる実装の仕方を覚えておくとWorkbookが簡潔になる(シートの数を減らせる)場合があります。


今回使用したWorkbookは以下からダウンロードできます。

https://tabsoft.co/2OkZhg8

本題の前に:Tableau操作の順序のおさらい

フィルタの話の際、おなじみTableauの操作の順序の理解は避けては通れません。

今回のテーマであるフィルタに関して言うと、以下が重要になってきます。

  • FIXED計算とSetはディメンションフィルターの前に実行される

  • INCLUDE/EXCLUDE、メジャーはディメンションフィルターを通った後のデータについて実行される

  • 表計算や総計はメジャーフィルター実行後に実施される

  • リファレンスライン、傾向線は表計算フィルタ実行後のデータについて計算される

Tableauで最終的にビュー内で描画されるものは上記のフィルター全てを通った後のデータや集計値であり、各フィルタや集計は実行される順番があるということですね。


一方でデータの表示を制御する方法がフィルターだけかというとそうではなく、計算式の中で条件式を記述しデータの出し分けをする、「隠す」機能を使うなどの方法もあります。


今回の記事は、具体例を挙げながらフィルター、条件式、隠す機能の使い分けを見ていきながら、どのような場合に何を使うべきかを考えていくことが目的です。


例1:全体 vs 選択データの比較

一部のデータを使用した集計値の、データ全体での集計値との比較を考えます。

以下ではSegmentごとのSalesを、選択Regionのみ含めた場合を全体と比較させています。

実装方法はいくつか出来ると思いますが、思いつきやすいのはFIXEDを使用し、ディメンションフィルターを使用しデータを絞ることではないでしょうか。


もしくは、計算式の中に条件文を仕込み、ビュー内でデータをフィルタしない実装も出来ます。ここではRegionを使用したSetを作成した実装としましたが、要は条件判定なら何でもいいです。


あるいはもっとシンプルに、使用するメジャーはSUM(Sales)のみ、片方の棒グラフのViz-LODを先ほど作成したRegion Setにし、そのSetのOUTを隠してしまう方法があります。


ちなみに隠したマークの再表示方法はいくつかありますが、フィールドを右クリック→再表示オプションがあります。

さて、今回のケースに対する3種類の実装方法を見てきました。

  1. FIXEDとディメンションフィルターを使用した実装

  2. 条件式を使用した計算フィールドを使用した実装

  3. 隠すを使用した実装

まず1の実装は設計思想が他の二つと「ビューに使用するデータをフィルタしている」点で大きく異なります。


例えば先ほどの図に、各SegmentのOrder IDごとのSalesを見て、選択されたRegionはどの程度のOrderごとSalesがあるかを見たいとします。

このビューを作るには、1の実装では難しいことが分かります。

ディメンションフィルターで選択されたRegion以外が除外されているので、上図の場合ではCentral内のOrder IDに関するマークが表示されません。


それでは2の実装の場合ですが、これはデータを全く除外していないので安易に実装できることが分かります。Order IDでViz-LODを作り、Region Setを色に入れるだけですね。


3の実装の場合、少々注意が必要です。

Region Setのアイテムを隠したので、Setをもう一度Viz-LODに関して使用すると、そのビュー内では隠されてしまいます。

(下図の色凡例から、OUTが隠されたままであることが分かります)


ではどうするかというと、端的に言えば同じものをそのまま使わなければ大丈夫です。

以下ではColorという、そのままRegion Setを入れた計算フィールドを使用した場合の図です。

あくまでも「隠す」機能の適応先はRegion Setそのものを使用したマークであり、別フィールドを使用した場合は隠されないことが分かります。


ということで、フィルターを使わずに一部データに関する集計などを実装する形にすると、一つのシートで表現できるものが広がります。

この形で実装しない場合、データを絞るかどうかでシートをそれぞれ作り、結果的にシート数が増えダッシュボードが重くなる、Workbookが煩雑化することを避けられます。


一方でフィルターを使用した方が簡単であることは否めないので、重要なことは「実装方法の幅を増やしておく、手札を多くしておく」ことだと思いますので、状況や要件に応じて使い分けて下さい。


例2:全体総計と一部のデータを合わせて表示

以下のようなビューの実装を考えます。

売上Top 5のStatesと全47州の合計値を比較するためのビューです。


本題に入る前に、Tableauの操作の順序で「総計」の計算がどこにあるか確認します。

メジャーフィルターの後にあるので、表計算フィルタと「隠す」以外でデータをフィルターした場合は総計に影響することが分かります。


ということで、下記のように「Top 5のディメンションフィルターを使用した後に総計」すると、数字が正しくないことが分かります。


ということでフィルターではなく、表計算か「隠す」の使用が必要になるわけです。

「隠す」を使用する場合はシンプルで、単にTop 5のSetのOUTを隠すのみです。

表計算は要件次第なのですが、今回はINDEXを使用した場合を紹介します。

下図で設定されたINDEX(Setに対して計算されたINDEX)を表計算フィルターとして使用すればOKです。

ここまでディメンション/メジャーフィルターではできないことを表計算フィルターか「隠す」機能で実装する方法について見てきました。


要件を満たすためには何を使うべきなのか、フィルターなのか計算式なのか「隠す」なのか、最適なものを選べるように知識を蓄えておくことをオススメします。


実験:「隠す」は結局どこで処理されるのか

ところで先ほどのTableauの操作の順序の図を見ると「隠す」はどのタイミングで走るのか明記されていませんね。


例えばリファレンスラインや傾向線は全てのフィルターの後に走るようですが、「隠す」を使用した場合、これらは影響を受けるのでしょうか。

確認してみましょう。


1.「隠す」を使用した前後での傾向線

Order Dateの年月ごと、Regionごとの売上を表示し、それらをまとめた傾向線と平均線を表示させています。

上は4Regionを表示、下はRegion SetがOUTのものを非表示にしています。


傾向線の終端の値が異なり、平均線は明らかに値が異なるので「隠す」は少なくともそれらより前に走っていることが分かります。


また「隠す」は表計算の後に走ることは簡単に確かめられます。

以下はOrder Dateの年月でSetを作成し、OUTを隠した状態のSalesの累計値です。

ゼロから始まっていないので、累計→隠すの順番で走っていることが分かります。


ということで、結論として「隠す」は表計算フィルターと同じタイミングで走っているという結論が得られるのかなと思います。

(ただ軽く調べた限りドキュメントが見つからないので、詳細ご存じの方は教えて下さい)


2021/4/4 追記

がねこさん(@ritz_Tableau)から、非公式ながら大変便利な資料を紹介いただきました。

https://community.tableau.com/s/idea/0874T000000H9zbQAC/detail

この図では「Manually Hidden Marks」が表計算フィルターと同じタイミングで動いているので、結論としては先述のもので問題なさそうです。


またこちらの図はTableau側で動くもの、データソース側で動くものを分けていること、CalculationとFilterを分けて記載しているので、非公式とは今後はこちらの図を紹介、参照した方が分かりやすそうですね。

がねこさんご紹介くださりありがとうございました。

最後に

今回はTableauの操作の順序を基にしたフィルター、条件式、隠す機能の使い分けについてお話しました。

Tableauで一つのチャートを表示する方法は何通りもありますが(この何通りもあるところがTableauらしいなと思いつつ)、何が最適なのか、要件を満たすのか、将来の改修がやりやすいのかを考慮しつつ方法を選んでいただければと思います。


そして方法を選ぶためには、知っている方法が多くないといけませんね。

今回の記事が皆さまの手札を増やすことに役立てば幸いです。


ご質問等はTwitter, Linkedinへよろしくお願いいたします。それでは。