Tableau

【Tableau】表示範囲可変なウォーターフォールチャートを作る方法

数値の増減の流れを時系列方向で可視化したいときにウォーターフォールチャートを使うことがあります。このチャートは Tableau でも作ることができますが、累計計算を利用していることからフィルターの制御と相性が悪いです。そこで、今回はそれを無理やりなんとかする方法を共有します。

データ

今回のデータはエクセルの RANDOM 関数で適当に値を設定したものを使用します。カラムは以下の三種類です。各日付には値の増減を表す列 2行(フロー)と、加えて最初日付には初期段階の値(スタック)が入っています。

  • [日付]:年月日、期間は2022/3/1~2022/4/30
  • [値]:数値
  • [区分]:値の種類(初期値 or 増加 or 減少)

Tableau でのウォーターフォールチャートの作り方

ではまず、普通のウォーターフォールチャートの作り方を復習していきます。

まず列シェルフに[日付](週)を不連続で、行シェルフに[値]を置き、マークを「ガントチャート」にします。

そして、マークの「サイズ」に「-SUM([値])」を置き、行シェルフの[値]を表計算の累計にします。

加えて、[区分]をマークの「色」のドラッグし、列シェルフにも追加します。

最後に行シェルフの[値]を右クリックし、「表計算の編集…」を選択し、[次を使用して計算:] で [特定のディメンション] を選択し、両ディメンションの横のボックスにチェックを入れます。おまけでラベルも追加しました。

 

これで、ウォータフォールチャートが完成しました。2022/3/1の週で 100,000あった値が日付方向の増減を経て二か月後に 83,130になっています。

ここでウォーターフォールチャートを描画する要素は次のようになっています。

  • ある日付での増減反映値(変動を考慮した値)をガントチャートと累計計算で表現
  • ある日付での変動の度合いをマークのサイズで表現(このとき増減反映値から変動前の値まで帯を引きたいのでマイナスがかかる)

ここまでは他のページでも紹介されている技術ですが、このチャートでは表現できない次のようなケースがあります。

ウォーターフォールチャートの日付をフィルターして表示期間を変更してみる

前項では、日付の粒度を「週」にしましたが、それを「日」にしてみます。すると、横幅が足りなくてぎちぎちになってしまいます。

しかし、こんなことで日次での観察をあきらめたくないのでフィルターに[日付]をいれて最後の一週間の 2022/4/24~2022/4/30 に設定します。

すると、今度は値の最終値が 83,130から -5,200 になってしまいました。これの原因は、累計計算がフィルターで参照している範囲でしか計算してくれないので、参照外になった初期値と表示範囲以前の日付の値が反映されないからです。では、このケースはあきらめるしかないのかというと、実はなんとかなります。

解決策

前述したとおり、ウォーターフォールを構成する要素は次の二つです。

  • ある日付での増減反映値(変動を考慮した値)をガントチャートと累計計算で表現
  • ある日付での変動の度合いをマークのサイズで表現

なので、ガントチャートのラインの高さ(増減反映値)がフィルター参照外の日付も反映できるようになれば上手くいきそうです。

そうするために、まず日付範囲の制御をフィルターからパラメータに変更します。日付形式のパラメータ二つ([表現期間(~から)][表示範囲(~まで)])を作成します。

そして、計算フィールドから次のような[調整日付]を作成します。

IF [区分] = '初期値'
THEN DATE(DATEADD('day', -1, [表示期間(~から)]))
ELSEIF [日付] < [表示期間(~から)]
THEN DATE(DATEADD('day', -1, [表示期間(~から)]))
ELSE [日付]
END

ここでは、初期値と表示期間前の日付のデータをまとめて表示期間前日とし、残りは日付そのままとします。そうすることで表示期間より前の日付のデータはまとめて初期値(スタック)として制御できます。

そして、次の計算フィールド[パラメータ可変値]を作成します。表計算の設定は[調整日付]にします。

SUM({FIXED :SUM(IIF([調整日付]<[表示期間(~から)], [値], NULL))})
+RUNNING_SUM(SUM([値]))

一行目の部分でスタックの合計を計算し、二行目の部分で表示期間内の増減フローを計算します。一行目の効果でガントチャートのラインの高さ(増減反映値)がフィルター参照外の日付も反映できるようにしています。

そして、実際に表示期間内のデータのみを表示させるために次の計算フィールド[表示期間]を作成します。

[調整日付] >= [表示期間(~から)]
AND [調整日付] <= [表示期間(~まで)]

ここまで準備できたら後はグラフを作るだけです。

上で作成したウォーターフォールチャートの列シェルフ[日付]を[調整日付]に、行シェルフ[値]を[パラメータ可変値]に変更しましょう。[パラメータ可変値]の表計算を編集し、フィルターに[表示期間]の真を追加します。最後にマークの「ラベル」も[パラメータ可変値]に差し替えます。すると、どうでしょう。

表示期間を最後の一週間のみにしているのに値の最終値が 83,130になっています。表示期間のパラメータを色々変えてみても大丈夫なはずです。

最初にこの壁に当たったときには頭を抱えましたが、しっかり原因を考えてみたら何とかなりました。Tableauは BIツールの中でもかなり柔軟な方なので、表現に困ったら原因を整理すると何とかなるケースが多いです(そして解答が大体公式に載っています)。

ウォーターフォールチャートを作る際に是非使ってみてください!最後まで読んでいただきありがとうございました。

 

Yasui
アナリティクス&デベロップメント所属 特技はPCR