[Tableau Tips]表計算の順位とディメンションフィルタを両立する方法

●やりたいこと:フィルタしても順位を保持したい

ある商品についてサブカテゴリ内の順位と売上を表現したいとする。
例としてサンプルスーパーストアを上げよう。
表示させたいのが家具カテゴリだけだとして
家具でフィルタすると、表計算の結果が絞られたものになってしまう。

左のようにカテゴリ全体での順位を表現したいが
ディメンションフィルタを入れると右のようになる

これはTablaeu の計算順がディメンションフィルタ→表計算となっている
からである。詳細は「クエリパイプライン」で検索してほしい。
右のようなレイアウトでも家具を10位とする方法はないのだろう?
結論からいうと3つの方法が考えられる

①表計算を使ってフィルタをする

少しややこしいが、以下の計算式をフィルタに入れてほしい。
こうすると順位は保持されたままになる。

lookup(min([カテゴリ]),0)

コピペ用計算式
順位は維持されたまま

lookupは表計算の関数なのでフィルタ順序も遅くなるためこうなる。
min()に意味はない。データの粒度を揃えるためのおまじないである。
ちなみに公式もこの方法を推奨している。

メリット:応用が色々効く。indexとかfirst使うともっと高度な表現が出来る
デメリット:面倒。いちいち計算式を作る必要あり

②非表示を使う

少しトリッキーだが、他のカテゴリを非表示にすれば同じ結果が得られる。
この場合は家電と事務用品を非表示にすればいい。

家電と事務用品をCtrl押しながら選択

元に戻したい場合はカテゴリを右クリックし、
「非表示のデータを表示」から復活させる

カテゴリを右クリック

メリット:楽。自由度も高い。特にダッシュボード作りで活躍
デメリット:ぱっと見で分からないためメンテナンス性が下がる

③予め計算しておく

データソース側で計算していれば順位は保持できる。
Tablaeu Prepでも表計算が出来るようになったためそちらがおすすめ
実機検証できてないが、多分こんな感じで通る・・はず。

{PARTITION [カテゴリ][サブカテゴリ]: {ORDERBY SUM([売上]DESC): RANK() }}

Prep計算式

メリット:複雑な計算でも大丈夫。これも自由度が高い。
デメリット:事前準備が必要。任意の順位計算はできない

●余談

今回業務で必要になり考えたのだが、結局は③の事前計算方式を採用した。
全体に占める某カテゴリの順位だったので事前計算できたし
複数フィルタがあると①の表計算フィルタの作成が面倒だったためである。

ただ色々な方法を覚えていると検討の幅が広がるので
覚えておいて損はないと思う。参考になればうれしいです。

もし他の方法があればTwitterで共有いただけると助かります。
ついったー→ https://twitter.com/minoru_tech


いいなと思ったら応援しよう!