Tableau – クエリパイプライン – フィルターの適用順序とコンテキストフィルター
Tableauを使い始めのころは、自分では正しく設定したつもりでも、なぜか想定していた結果と異なる数字が表示されることがあります。そんなときは、フィルターの適用順序の違いを確認してみると良いかもしれません。
Tableauは内部で様々な操作を行なっており、その操作順序には決まりがあります。これを「クエリパイプライン」と呼び、上から下に次の順序で処理されます。
ケース1.「TopN」と「ディメンションフィルタ」の関係
以下のビズで確認しましょう。
「売上」を列に、「製品名」を行に配置し、売上の後順にソートします(グラフ下の「売上」軸の横にある記号をクリックすることでソートできます)。
売上上位5製品に絞りましょう。「製品名」をフィルターにドラックアンドドロップします。
「上位」タブを選び、下記の通り設定します。
売上上位5製品に絞られました。これが「topNフィルタ」という機能です。
さて、この状態で、さらに「地域」ディメンションでフィルタをかけてみたいと思います。
フィルタを表示し、「四国」のみを選択した状態です。5製品ではなく、さらに絞られて2製品になってしまいました。
ここで、冒頭で説明したクエリパイプラインを思い出してください。
「topN」は「ディメンションフィルター」より先に実行されるのでしたね。
この例では、先に全体を対象に売上上位5製品にしぼられた後で、ディメンションフィルターにより地域が「四国」のデータのみに絞られて、結果2製品になっています。
これを、「各地域ごとの売上TOP5製品を表示したい」場合にはどうすれば良いでしょうか。その場合には「ディメンションフィルター」を、topNより先に処理される「コンテキストフィルター」に変換することで実現できます。
やってみましょう。
フィルターの「地域」を右クリックし、「コンテキストに追加」を選択します。
すると、製品名が5つ表示されるようになりました。他の地域を選択しても、それぞれの地域ごとの売上上位5製品が表示されるようになっています。確認してみてください。
ケース2.「FIXED LOD表現」と「ディメンションフィルタ」の関係
続いて、FIXEDとディメンションフィルタの適用順序についても確認してみましょう。
「売上」をマークカードの「テキスト」に、「カテゴリ」「サブカテゴリ」を行に配置します。
計算フィールドを作成します。ディメンションを指定せず{[FIXED : SUM([売上]) }
として、全体に対する売上合計にします。
作成した計算式をbizに配置します。
メジャーバリューの中の「合計(売上)」と「合計(FIXED:SUM(売上))」の順序を変えて、下の図のようにおきましょう。
この状態から、「カテゴリ」をフィルターに追加します。
フィルターで「家具」のみに絞りましたが、FIXEDの数値は変わりません。
これは、先ほどのtopNと同様にFIXEDはディメンションフィルターより先に実行されるからです。
このケースでは、FIXED計算(全体に対する合計売上)をしたのちに、フィルターが適用されて家具のみの表示になっているため、FIXEDの計算結果部分に変更はありません。
では、こちらも先ほどと同様に「カテゴリ」を「コンテキストフィルター」に変換するとどうなるでしょうか。やってみましょう。
FIXED計算の計算結果が変わりましたね。
コンテキストフィルターに変換したことで処理の順序が変わり、まず「四国」のみにデータが絞られ、そのデータを全体としたFIXED計算となったということです。
いかがでしたか。フィルターの適用順序と、コンテキストフィルターの活用タイミングを理解いただけたら幸いです。
なお、コンテキストフィルターの活用は「パフォーマンス向上の効果」もあります。
ディメンションフィルターやメジャーフィルターは、データソース内の全ての行にアクセスして計算をするため、データ量によっては負荷の高い処理になります。
コンテキストフィルターは、各フィルターの前段階で独立してデータを絞り込む効果があるため、事前に不要なデータはコンテキストフィルターで除外しておくことで、パフォーマンス向上効果が見込めます。
詳しくは以下の公式ヘルプをご覧ください。