
Tableau 8つのハードルを越える⑯「クエリパイプライン その5 コンテキストフィルター後編」

前号に続き「 コンテキストフィルター」解説、後編です。
前号「コンテキストフィルター前編」は下記になります。
まず前回の振り返りです。コンテキストフィルター(Context Filters)は、下図、クエリパイプラインの図で赤丸の部分にありました。「Context」という単語には、「状況、環境」といった和訳があります。コンテキストフィルターは、これからワークシートでデータを扱う上で前提となる「状況、環境」を決めるものと考えると理解しやすくなります。そのような事を意識しながら、読んで頂けると幸いです。

このコンテキストフィルターの説明をする前に、前号では上図、青四角の、セット(Sets)、コンディショナルフィルター(conditional filters)、Top Nフィルター(top N)について解説いたしました。
今回は、本題のコンテキストフィルターの解説に入ります。
さて、今、同僚から「売上上位5位のサブカテゴリだけの、売上グラフ作って!」と言われました。
なので、まず、フィルターでサブカテゴリを売上上位5位に絞る設定を行いました。前号で説明した「Top N フィルター」です。下図になります。

次にサブカテゴリ毎の売上を横棒グラフで表示してみました。

当然ですが、売上上位5位のサブカテゴリのみ表示されています。
ここでViz作成依頼者の同僚から、「実は売上上位5位というのは、カテゴリが事務用品の中で売上上位5位って話でした。」と言われたと仮定しましょう。
「あ、そうなんですね。」という事で、

このように、ディメンション「カテゴリ」をフィルターに持っていき事務用品だけに絞る設定を行いました。すると・・

なぜか、表示されているのが「アプライアンス」のみになってしまいました。
明らかにこれでは、事務用品の中での売上上位5位サブカテゴリのグラフにはなっていないです。
どうしてか?もう一度、クエリパイプラインの図を振り返って考えてみます。

まず、サブカテゴリのうち売上上位5位に絞ったフィルター「Top N フィルター」は、このクエリパイプラインの図の中で、緑四角で囲ったところにあります。
続いて、カテゴリを事務用品だけに絞るフィルターは、ディメンションを使ったフィルター、つまり「ディメンションフィルター(Dimension Filter)」と呼ばれ、青丸で囲まれた場所にあります。
ポイントは、上から順番を考えると「緑四角→青丸」の順に並んでいるという事です。
つまり、まず、緑四角のTop Nフィルターで、データ全体からサブカテゴリを売上上位5位に絞ります。
その後に、青丸の事務用品だけに絞るフィルターが働いています。
全体の中で売上上位5位に入るサブカテゴリのうち、カテゴリ「事務用品」に含まれるのは、アプライアンスだけなので、最終的に表示されるのがアプライアンスだけになってしまったのです。
同様の理由で、カテゴリを「家電」だけに絞ると、

このように、コピー機と電話機だけが表示されます。
では、本来の目的、「カテゴリが事務用品の中で上位5位」を表示させるためにはどうすれば良いでしょうか?
ここで、活躍するのがコンテキストフィルターです。
下のクエリパイプラインの図を見ると、赤丸で囲まれたコンテキストフィルターは、緑四角で囲まれたTop N Filterよりも手前で働いているのが分かります。

なので、カテゴリを事務用品に絞ったディメンションフィルターを赤丸のコンテキストフィルターに変更し、緑色のtop Nフィルターの前で働くように変化してあげれば良いのです。そうすれば、カテゴリを事務用品に絞った後に、売上上位5位の判定が行われるわけです。
その方法を解説します。
フィルターに置かれているフィルター「カテゴリ:事務用品」を右クリック、「コンテキスト」に追加と進みます。

すると

まず、フィルターに置かれていたカテゴリのフィルターが、灰色に変化しました。
そして、それまでアプライアンスしか表示されてなかった部分に、上図のように5つサブカテゴリが表示されました。
これが、「カテゴリが事務用品の中での売上上位5位」になります。
流れを分解して考えると
・「カテゴリが事務用品の中で」 ← これをコンテキストフィルターで実施
・「売上上位5位」 ← これをTop Nフィルターで実施
という流れです。
なお、一度コンテキストフィルターにしたものを元に戻す場合は、下図のように右クリック「コンテキストから削除」を選びます。

このように、ワークシートの中で最初の段階で作動させるフィルター、つまり前提条件、環境を作ってあげるフィルターがコンテキストフィルター、と考えるとイメージしやすいかと思います。
さて、ここから重要な話です。
ここまで説明してきた例では、Vizがアプライアンスだけになってしまったという事で、何か違うとすぐ気づくことが出来ました。
しかしながら、「事務用品の中で・・」という依頼が、例えば「静岡県だけで」というものであった場合は、どうでしょう。「静岡県だけで考えて、売上上位5位のサブカテゴリを表示したい」という意味です。
下図、サブカテゴリ上位5位を表示した状態に、

都道府県のフィルターを加え、静岡県に絞ってみます。

すると、

このようになります。
よし、出来た!と思いたいところですが、実は間違っています。
これでは、「静岡県だけで考えて、売上上位5位のサブカテゴリを表示したい」にはなっていません。
出来たVizがどのようなVizかというと、
「全国で見て売上上位5位のサブカテゴリについて、それらの静岡県での売り上げを表示したViz」となっているのです。
サブカテゴリの数は、変わらず5個となっているので、一見、間違っている事を見逃しがちです。
正しく、「静岡県だけで考えて、売上上位5位のサブカテゴリを表示したい」を行うためには、都道府県のフィルターをコンテキストフィルターに変更しなければなりません。
やってみましょう。

ると、椅子がなくなり代わりにテーブルが表示されました。
実は椅子は静岡県だけで考えると、上位5位には入っていなかったのです、テーブルが4位に入っていました。
これが、正しいVizです。
コンテキストフィルターが関係するのは、
セット、コンディショナルフィルター、Top N フィルターを利用した時です。
(加えて、LOD計算のFIXED関数を利用した場合も同様に関わってきますが、この点は今後の記事で触れたいと思っています。)
これらと別のフィルターを組み合わせて使う場合は、適宜、コンテキストフィルターを利用すると意図通りのVizが作成出来ます。
以上が、コンテキストフィルターの解説となります。
ご精読ありがとうございます。
連載記事続き「クエリパイプライン その6」は下記になります。
*連載記事すべてへのリンクは、こちらのマガジンにまとめています。
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

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