Tableau(タブロー) 基準日からの増減率(成長率)を計算する
基準日からの増減率(成長率)を求める
今回は、基準日からの増減率(成長率)を計算フィールドを使って求め、可視化してみます。
例)1 + ((今月の売上 – 先月の売上) / 先月の売上)
また、先月の売上に該当する部分を基準日として可変(パラメータコントロールを使う)にしてみます。
計算フィールドで使用する関数について
・基準日の売上
WINDOW_MAX(if MAX(DATETRUNC(“quarter”, [オーダー日]) = [基準日]) THEN SUM([売上]) END)
- WINDOW_MAX
- DATETRUNC
- SUM()
・増減率(成長率)
1+((SUM([売上])-[基準日の売上]) / [基準日の売上])
上記の関数に関する「違和感」について
① なぜ、MAX関数を使わなければならないのか?
if DATETRUNC(“quarter”, [オーダー日]) = [基準日] THEN SUM([売上]) END とした場合)
if 文の中では、集計関数を使った場合は、条件式、結果ともに集計関数で統一する必要があります。したがって、あたりさわりの無いMAX関数を使う必要があります。
では、SUM()関数をはずせば良いのではないか?
おっしゃる通り、SUM()関数をはずせばこの場の問題はすぐに解消されます。
ただし、後述するWINDOW_MAX関数をどうしても併用する必要があり、SUM()関数をはずせません。
例)WINDOW_MAX(SUM([売上]))
第一引数は集計関数
結果としてあたりさわりのない集計関数であるMAX関数をif文の条件式にセットしておく必要があります。
② なぜ、WINDOW_MAXを使わなければならないのか?
ウィンドウ内のすべてで、基準日の売上 を参照して計算する必要があるため、です。
WINDOW_MAXをつけない場合はどうなるか?
この場合、基準日でのみ、データ参照が可能となります。つまり、基準日以外ではこの値を参照できないため、増減率(成長率)を計算しようとしてもこの値を計算式で利用できません。
WINDOW_MAXをつけた場合はどうなるか?
基準日の売上の値が、ウィンドウ内すべてで参照可能となっております。つまり、ウィンドウ内の各地点でこの値を利用可能となります。
③ なぜ、1+ をしているのか?
単純に1(%表記の場合は100%)を基準とするためです。
それでは再現してみましょう(手順)
① メジャーを配置 :売上を行に配置
② ディメンションを配置:オーダー日を列に配置
③ パラメータコントロールを作成
④ リファレンスラインの追加
③で作った「基準日」を値で利用する
⑤ 基準日の売上を算出する計算フィールドを作成する
計算式フィールド名:基準日の売上
WINDOW_MAX(if MAX(DATETRUNC(“quarter”, [オーダー日])) = [基準日] THEN SUM([売上]) END)
解説)
パラメータコントロールで設定した基準日と、オーダー日のquaterを比較して一致したら、その時の売上合計を取得するという計算式。つまり、基準日の売上合計だけ取得できる。そして、WINDOW_MAX関数を利用することで、その基準日の売上合計値を各月でも参照・利用できるようになる。ちなみに、WINDOW_MAX関数の第二、第三引数を指定しない場合は、ウィンドウ内すべてにおける最大値を返しますが、結果的に基準日の売上しか値がないのでこれの値を返さざる終えません。
⑥ 増減率(成長率)を計算する計算フィールドを作成する
計算式フィールド名:増減率(成長率)
1+( (SUM([売上])-[基準日の売上]) / [基準日の売上] )
⑦ ⑥で作成した計算式フィールドをラベルへ配置、%表記に変更
%表記に変更しておく
⑧ 基準日と最新日の増減率(成長率)が判れば良いので調整する
ラベルから、終点をクリックして、終了行のみにチェック。
完成形)
まとめ
今回は、WINDOW_MAXと、IF文を使った時のちょっとしたルール(集計と非集計の混在する場合はエラー)を確認しながら増減率(成長率)を計算式で求めてみました。
特に、WINDOW_XXX関数については、ウィンドウ内のどこが集計対象となっているかに着目して使用する必要があります。こちらは、SQLに通じるものです。しっかりと理解しておくと今後、SQLを使用する場合にとても役に立つ概念と思いますので、ぜひ、この機会に学習を深めてみてはいかがでしょうか。
関連記事)