Tableau クエリパイプラインについて 後編

はじめに


こんにちは!コグラフ株式会社のTです!
今回はクエリパイプライン後編です。おさらいとしてクエリパイプラインの画像を貼っておきます。

画像1


それでは実例を出しながらパイプラインによる結果の変化の説明をしていきます!
※Tableauインストール時についてくる「サンプルスーパーストア」のデータを使用。

クエリパイプラインの罠

前回と同じワークブックを使用しています。パイプラインで結果が変わる例を見ていきましょう!
特殊なフィルタになる上位/下位のフィルタを試してみましょう。クエリパイプライン上ではコンテキストフィルタとディメンションフィルタの間にあるフィルタですね。
ディメンションのサブカテゴリで利益が下位3件のものを表示させてみましょう。フィルタ内のサブカテゴリ右クリック→上位タブ→フィールド指定で表示するものを決定


画像18

このフィルタリングはクエリパイプラインのtopN(上位/下位)と呼ばれるもので、クエリパイプラインで言うと、ContextとDimensionの間にあるものなのです。ディメンションより本当に優先順位が高いか見ていきます。上の図からテーブル、本棚、電話機が下位3件だとわかります。次に家具を除いたワースト3を見たいので家具をカテゴリのフィルタから除外してみます。期待される出力は家電と事務用品カテゴリのワースト3が出ることなのですが、結果はどうでしょうか?

画像17

画像18

1件になってしまいました・・・。なぜでしょうか?
今回で言うと上位フィルタ(topN)は上図のパイプラインではディメンションフィルタの前にあります。したがって、ワースト3を出す→家具を除外するという順番で処理が行われたので、3件の表示ができなくなってしまいました。このようにパイプラインを意識して設計ができていないと期待した出力がでてきません🥲
「え、じゃあどうしたらええん?」となった方、大丈夫です!対処法はあります!
先に3件に絞ってから家具を除外するから上手くいかないので、後から3件に絞るように変えましょう!= 表計算でワースト3が出せるようにする!で上手く表示できます!

まずはctrl+ドラッグで列にある、利益を複製します。そしてどちらかの利益を右クリックして表計算の追加を押します。計算タイプは「ランク」を選び、ワーストを表示したいので分かりやすい「昇順」でランク付けにしましょう。次を使用して計算は「表」で大丈夫です。

画像21

画像24

順位が付けができましたね!これをフィルタに使用しましょう!フィルタに入れ値の範囲を1~3に変えてあげるとワースト3を表示できます!

画像23

画像24

表示できましたね。これで表計算フィルタはできました。クエリパイプライン上では表計算フィルタはディメンションフィルタやメジャーフィルタより後なので、カテゴリで家具を除外してもワースト3は表示されるはずです!検証してみましょう!

画像25

できました!!!パイプラインを知ることで解決ができました!

もう一つLOD計算をして起こりがちな事例を見てみましょう。
まず、利益/売上をし赤字利益率とい新しいメジャーを作成します。

画像9

各利益率が表示されました。ここでサブカテゴリをフィルタに追加しテーブルの項目を除外してみましょう。

画像10

家具の値が変動したのが分かるかと思います。このことからTable calcs(計算フィールドでの計算)はクエリパイプラインに記載の通り、ディメンションより後というのがわかります。もちろんメジャーの後でもあります。試しにメジャーでフィルタを適用すると数値が変動します!試してみてください。
ここからが重要なのですが、LOD計算を行うと期待した値が出ないことがよくあります。なぜなのかをFIXEDを使って説明していきます。(IncludeやExcludeは今回省略しますが、普通の表計算と違う認識を持てれば対処できると思います。LODについて)
FIXEDはContext FiltersとDimension Filtersの間にあります。なので、ディメンションフィルタの適用前に計算がされてしまっているので、期待した出力がされないことがあります。意味がよく分からないと思うので実際にやってみましょう!
まず赤字利益率をLODで書き直して表示させます。「家具」-29.8%、「家電」-32.8%、「事務用品」-30.9%となっています。

画像11

これを先ほどのようにサブカテゴリをフィルタに追加し、テーブルを除外してみましょう。

画像12

数字が変わりませんでした、、、!
LODの計算のが先なのでディメンションフィルタリングしても意味がないんですよね。下記の図のようにLOD計算をするとこんなカラムが作られているとイメージするとわかりやすいかと思います。

画像13

ただ、それだと「FIXEDって便利やけど、フィルタリングしたいってなったとき不便やな・・・」と考えた方に朗報です!対処法があります!
ここでContext FIltersの出番です!コンテキストフィルタはLODより順番がが先なので適用すればLODもフィルタリングができます。テーブルを除外したサブカテゴリのフィルタをコンテキストに追加すると数値が変わります。

画像14

画像15

変わりましたね!
「あれ、これって、1つ前の上位でも使えへん?」と考えた方鋭いです。あなたはパイプラインマスターです。上位のフィルタでも実はカテゴリをコンテキストフィルタに追加することで対処できます!試してみてください!

ディメンションやメジャーだけでフィルタリングをする場合は、特に順番を意識せずとも問題ないですが、計算や上位などのフィルタリングが入ってきたときには意識することが大事ですね。出力されるものが大きく変わる可能性があるので十分に理解し検証していきましょう!

最後に

沢山のフィルターを使ったりする時や表計算、LOD計算、上位などの特殊なフィルタを使用する時はクエリパイプラインを理解しないと意図しない数値や表示になることがあるので、クエリパイプラインをしっかりと意識した設計を心がけましょう!

参照

・Tableauの公式チャンネル「Get Your Tableau Operations in Orders 」
操作の順序
今回作成したWB





この記事が気に入ったらサポートをしてみませんか?