製品やブランドのシェアを算出するケースは非常に多いと思います。
今回はフィルタを使用する際のシェアの算出方法についてお話します。
使用するデータソースは「スーパーストア」です。
シェアを算出する際は「sum([売上])/WINDOW_SUM(sum(売上))」といった形で「対象/全体」を計算しますね。
全ての対象を表示している場合は問題ないですが、表示するメーカーは絞る(or一つにする)際のシェア算出方法が課題となります。
素直にフィルタで絞ってしまうと、絞った中でのシェアを表示してしまいます。
カテゴリごとのシェアを表示するといった際はいいのですが、メーカーを絞る際は問題となります。
これはディメンションフィルタでフィルタされた後に表計算が行われるため発生します。
詳しい内容はTableau online Helpを参照してください。(https://onlinehelp.tableau.com/current/pro/desktop/ja-jp/calculations_calculatedfields_lod_filters.html)
解決策は以下の3種類が考えられます。
・個々のレコードにトータルの値を持たせる
・フィルタを表計算フィルタにする
・トータル計算にFixedを使用する
各々について見ていきましょう
・個々のレコードにトータルの値を持たせる
予めデータ側にトータルの値を持たせてしまって、フィルタが掛かっても算出できるようにします。
「sum([売上])/avg(トータル売上)」
メリット
・表計算なしで算出できる為、軽い
デメリット
・フィルタを掛けても一切トータルの値が動かない為、どの単位でトータルを持たせるかが問題となる
・単純にAVGで計算できなくなるケースもあり、データの準備、扱い共に難易度が高い
・フィルタを表計算フィルタにする
表計算フィルタは表計算が行われた後に実行されるため、フィルタを表計算を使用したものに変更すれば正しく表示されます。
lookup(min([メーカー]),0)
といった計算式を作成しフィルタに入れます。
メーカーをビューに入れないと動作しない点に注意が必要です。
メリット
・手軽
デメリット
・アクションフィルタには適用できない
・表計算フィルタは実際には非表示にしているだけであるため、重い
・表計算フィルタである為、フィルタを表示する為にも表計算が行われる(重くなる)
・フィルタ対象をビューに使用しなければならない
・複数ワークシートへの適用が出来ない
・トータル計算にFixedを使用する
Fixedはディメンションフィルタの前に計算される為、トータル計算にFixedを使用すれば正しく表示されます。
「sum([売上])/sum({fixed:sum(売上)})」
メリット
・Fixedの計算を調整することで要件に柔軟に対応可能
デメリット
・Fixedはビュー表示とは別に計算が行われるため、重い
・Fixedの計算の調整が必要
どの手法もメリット、デメリットがありますので状況に応じて使い分けてください。
他にフィルタをパラメーター化する方法もありますが、こちらは非常に使い道が限定されますので割愛いたします。
Tableau_id執筆者:林 周作(Shuusaku Hayashi)