データ可視化のアイデア帳

データ可視化にまつわるあれこれ

何かと便利な Tableau での日付ずらしテクニック

Excel で 2 つの日付の差を計算するのが上級テクニックという記事を先日 Facebook で見かけて目をむきました。Tableau だと初級ハンズオンの次くらいに日付計算を扱ったりするので特に難しいという印象はなかったのですが、関数そのものの使い方ではなく利用シナリオをもっと知っていたら適用できる場面がもっと増えるかもしれません。ということで今回は最近私が使って便利だなと思った日付計算のシナリオをご紹介します。と言ってもタイトル通り日付をずらすシナリオです。


そもそも何がやりたかったかというと、これ。今度沖縄に行くことになったので、そのタイミングで梅雨が明けているかどうかを調べてみようと思ったわけです。気象庁では 1951 年以降の梅雨入りと梅雨明けのデータを公開しており、*1これを利用して今年の梅雨明けを予測できる Viz を作成したかったんです。

f:id:zkn360:20190613151809p:plain

前処理は置いておいて、*2単純に梅雨の日数を比較するだけなら日付の比較で解決します。計算式はこんな感じ。


梅雨の日数
DATEDIFF("day", [梅雨入り], [梅雨明け])


ところが、私は梅雨入りの日付と梅雨明けの日を結んで線の長さで梅雨の日数を表示したかったんです。*3この場合、Tableau で使用するチャートはガントチャートです。ガントチャートの場合は軸の値が連続である必要があります。日付を日の連続にすると 「2019 年 6 月 13 日」といったように年月日まで考慮されます。通常の連続日付を使用するとこんな感じになります。

f:id:zkn360:20190613151307p:plain


これだと軸の範囲もさることながら比較したいのは月日の部分だけなのに年まで考慮されてしまっているがために、ずれた形での表示になります。これをずらさずに月日だけで比較したい。そんな時は日付をずらす (新たに作る) テクニックが有効です。例えば、今回はすべてを同じ年とみなしてしまえばいいので年を強制的に作ってしまいます。計算式はこちら。


軸用日付
MAKEDATE(1900, MONTH([年月日]), DAY([年月日]))


※年を 1900 に設定しているのは、元データに干渉しない適当な値を入れているだけです。
この軸用の日付を利用すれば、年が同じですので、月日だけを並べることができます。実際の Viz は ↓ を参照ください。


この日付をずらす (作る) テクニック、以外と役に立ちます。例えば前年同期間比較。

前年と今年 (だけに限った話ではないですが) の同日あるいは同週などを比較したいときに使うパターンです。同週比較の場合、日付の週数を使えばいいのではと思いきや週の始まりが日曜日に設定されているため同週と言っても日付にかなりずれが出ます。

ちなみに週や会計年度の始まりは変更することができます。*4データソース名を右クリックして「日付のプロパティ」を確認ください。


f:id:zkn360:20190613153409p:plain


さて、前年と今年の同日もしくは同期間を比較したいときには日付 (年) を強制的に揃えます。梅雨 Viz で解説したのと同じ方法ですね。ただ梅雨 Viz と違うのは相対日付が使えるよう最新の日付に揃える必要があるということ。この場合、計算式はこんなものが使えます。


① 今年と日付の年差
DATEDIFF("year", [日付], TODAY())

② 日付を今年に揃える
DATEADD("year", , [日付])


※もちろん ① と ② をまとめて記述しても大丈夫です。

複雑そうに見えますが、元データの日付と今日の日付の年数の差を元データの日付の年部分に足して、日付をすべて今年に揃えているだけです。これで相対日付フィルターを使って、特定の期間だけを年をまたいで分析できるようになります。

具体的なサンプルは Tableau Public に置いておきましたので、適宜ご利用ください。
public.tableau.com

*1:気象庁|過去の梅雨入りと梅雨明け

*2:もちろん Tableau Prep Builder でやりました。

*3:雨っぽい表現にしたかった

*4:データソースによって異なります。