見出し画像

【Viz】営業ダッシュボードで頻出の売上前年比の作り方

何の記事?

営業関連のdashboradで頻出の前年比とそのフィルターの出し方の備忘録(実装はTableau)

結論

  • 前年比成長率:デフォルトの簡易表計算で選択

  • フィルター:フィルター用の別の計算フィールドを作る

    • サンプルスーパーストアを例にとると、Order Date をそのままフィルタすると前年のデータも無くなる

    • そのため、フィルター用の別のディメンションを作成

LOOKUP(MIN(DATEPART('year', [Order Date])),0)

〇〇の前年比の出し方は?

営業成績の分析をしているとき、前年比を出したいと思うことがあります。これ自体は難しくなく、Tableauに既に組まれている計算式で簡単に実装できます。

例えば売上の前年比を出したい場合には、フィールドを右クリック > 簡易表計算 > 前年比成長率 をクリックします。

すると、計算フィールドを新たに自ら作らなくても、前年比成長率が表現できます。今回は以下のように、年度ごとの売上合計と並べて表示してみます。

なお、前年比成長率という指標の定義上、以下の2つに注意してください。

  • Vizにある日付(ここではオーダー日)は年単位になっている必要があります。月次単位でまとまっている場合は前年比成長率が選択できません

  • 前年のデータがない場合には、前年比成長率は計算できずNULLとなります(上のVizでは2012年のデータがないので、2013年に「1個のNULL」の表示が出ています)

日付フィルターの落とし穴

ここから、2014年と2015年のデータだけ表示したいと考えたとします。直感的には、オーダー日をフィルタに持ってきて、2014年と2015年を選択すれば良さそうです。どうなるかみてみましょう。

すると、売上合計の方は思った通りに2014年と2015年のみが表示されていますが、前年比成長率は2015年しか表示されていません(2015年の1つしかないので、折れ線グラフが線を形成できておらず点になっています)。

これは、Tableauのクエリパイプラインという概念が影響しています。要するに、今回のようなフィルターをかけると、まずはデータが2014年と2015年に絞られ、その上で前年比成長率を出す、という順番になります。

2014年の前年比成長率を出すには2013年のデータがないと出せないのですが、既にフィルタされてしまっているので、今回のVizの世界では存在しないものとして扱われてしまっています。

ではどうしたらいいのでしょうか?

フィルター用のオーダー日を作る

改めて要件を整理すると以下になります

  • 最終的に表示したいのは2014年と2015年の2年分のみ

  • しかし、前年比成長率を出すためには少なくとも2013年、2014年、2015年の3年分のデータがある必要がある

そのため、扱うデータ自体は特に絞らず、最終的に表示させる時だけのためにフィルターを作れないのか?というアプローチをとります。

そこで、今回は以下のような式を計算フィールドで作ります。

LOOKUP(MIN(DATEPART('year', [Order Date])),0)

すると、以下の通り2014年と2015年のみの表示に切り替えることができました!

個人的には、計算ロジックが少々ややこしいので、とりあえずは上記の方法で解決するのだ、ということを知っておくだけでも一旦はいいかなと思います。ロジックが気になる方はAppendixをご参照ください。

Appendix

  • 今回の式は以下の構成です。自分が最初に見た時、LOOKUPとMINが意味わからなかったので、その2つに絞って解説します。

    • LOOKUP関数

    • MIN関数

    • DATEPART関数

  • LOOKUP関数は指定したフィールドに対して、表の中で相対的にどの程度離れているかを指定して、その指定した値を取ってくる関数です。詳細の説明はTableauの公式FAQに譲るのですが、ここでは自分の年度を自分で参照する、という使い方です。

  • LOOKUPの中に表計算関数を入れる場合には、集計されている必要がある。なので、MAXでもMINでも何でもいいのだですが、集計計算を入れる必要があるので、MINとしました。

  • なお、前年比成長率は今回記載した通りネイティブの計算式があります。が、式を理解しておくとそのほかの場面でも応用が効きそうです。

(ZN(SUM([Sales])) - LOOKUP(ZN(SUM([Sales])), -1)) / ABS(LOOKUP(ZN(SUM([Sales])), -1))
  • 本編でも記載しましたが、フィルタするために別の計算フィールドを作るというのは、クエリパイプラインの順序を利用したものです。

    • Order dateをそのままフィルターに入れると、Demension Filtersとして働きます

    • しかし、上記で作ったのはTable Calc Filtersで、Demension Filters 及び Measure Filtersが機能したに働きます

    • 今回、オーダー日をDemension Filtersで絞ってしまうと、それ以降このVizで扱われるデータが2014年と2015年の2年に絞られてしまい前年比成長率の表現に意図しない影響が出てしまいました。なので、フィルタを働かせる順番を遅らせて、Table Calc Filtersで実装する、という思想になります

Tableauを学ぶにつれてクエリパイプラインの奥深さを知る


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