【学びメモ】Tableau カテゴリ別に売上と上位Nの製品の売上を一緒に出す
WOW2022 Week50に挑戦し得た学びをまとめます。
登場するのは、パラメータ、RANK関数、WINDOW計算、LOD計算、INDEX関数、スタックマークともりもりです。
本日のお題
サンプルスーパーストアのデータを利用して、サブカテゴリ別に売上と上位Nの製品の売上を一緒に出し、TopNの製品の売上がどれくらいを占めているか分かるように表現するになります。完成イメージは下記です。
作り方
①TopNを指定するパラメータを作ります
TopNを指定できるようにパラメータを作ります。
②売上TopNかどうかを判断する計算式を作ります
今回はRANK関数を利用しTopNの売上かどうかを判断する計算式を作りました。売上合計を降順にランキングし、そのランクが①のパラメータで指定した順位以下であれば「真」を返す計算式になります。サブカテゴリ、製品Idに対し計算させることで、サブカテゴリ毎にTopNの製品に「真」が返されていることがわかります。
③TopNの売上合計を算出する計算式を作ります
次に②を利用してTopNの売上合計を算出するための計算式を作ります。WINDOW_SUM関数を利用して作成します。
WINDOW関数は1行1行評価しながら集計を行ってくれる関数です。
今回の式では、②で作成した売上TopNの製品かどうかを判断の計算式が「真」であれば売上合計を、「偽」(TopNの製品ではない)であれば0を返すように1行1行評価したうえでSUMをとってくれるということになります。
④TopNの売上合計だけを表示させます
③でTopNの売上合計を出せたので各カテゴリ毎にTopNの売上合計だけが表示されるようにします。合計(売上)の列をなくし、製品Idを詳細に移動させます。
そうすると上記のような各製品のTopNの売上合計を積み上げたグラフになってしまいます。そこで上位Nの売上合計は同じサブカテゴリであればどの製品の値も同じになります。製品Idに対しindex()を作成しフィルタを設定し1行分に絞ってあげたうえで詳細に製品Idを移動させることで解消することができます。
⑤サブカテゴリ毎の売上を表示させるためサブカテゴリ毎の売上を計算します
Vizには製品Idが詳細に選択されているため、単純に売上の追加で選択するだけでは下記のようにINDEX()=1の製品の売上が計算されるだけになってしまいます。合計(売上)の詳細から製品Idを抜く対処でもいいのですがその場合、次の工程で上位Nの売上合計とグラフを重ねて表示する際には詳細から製品Idを抜く対処ができません。そこでFIXED関数を利用しサブカテゴリ毎の売上を算出する計算式を作っておきます。
⑥サブカテゴリ毎の売上とTopNの売上を一緒に表示
「サブカテゴリ毎の売上」を上位Nの売上合計の上にドラッグアンドドロップします。
すると下記のようなグラフになるため「メジャーネーム」を色に移します。
そうすると下記のような積み上げグラフになってしまうため、スタックマークをオフに修正します。
⑦細かい設定
あとは淡々と下記を実施すれば本日のお題のグラフの完成です。詳細説明は割愛します。
・サブカテゴリ毎の売上の降順に並ぶように並び替え設定
・色の割り当て設定
・TopN製品の売上割合を算出する計算式を作ったうえでツールヒントを設定
参考情報を記載します。
・今回の学びを得た、#WOW2022 Week50のリンクはこちら
・やり方を考えるうえで参考にしたのはこちら
今回は下記記事を参考にRANK関数を利用してTopNの売上判定を行ったが、ソート&index()の組み合わせでもできるだろうなと思っています。