今回のテーマは「日付関数を使って、任意の日付期間の数字を取得しよう」です。
目標は、下記のようなダッシュボードを作成できるようになることです。
(クイックに作ったので、フォーマットをもっと頑張れるだろ、という点はご容赦を。)
Basis Dateはパラメータで、任意の日付を選択できるようになっています。
このダッシュボードは「今年度・今期・今月・今週の売り上げ状況を把握でき、また前年度同時期との比較状況が分かる」ことを目的に作られています。
このダッシュボードのポイントは以下の3点です。
・現在のある期間での数字(例:今年度累計(YtD, Year to Date)と、昨年度同時期の数字(例:前年度同日までの累計)を比較できる。
・前年比などが表示できる。
・色付きの▼▲のインジケータが表示されるので、増減が分かりやすい。
【日付関数のモチベーション】
ところで、任意の期間の数字を取得するのに一番簡単な方法は「フィルタ―」です。
例えば、5月27日(もしくはダッシュボードを開いた時点での最新日付)までの今年度累計が欲しい場合、おなじみ日付フィルターをワークシートに設定すればOKです。
昨年度同日までの累計が欲しい場合も同様です。
一方で、この方法の問題点は
1.まず第一に、一つのワークシートに、例えば「今年度累計」と「昨年度同日までの累計」の両方を表示させることができない(なぜならフィルタ―で期間を絞っているため)。
2.Tableauの日付フィルターを手動で更新しないといけない。アンカー日を「今日」にすれば今年度累計はいいかもしれないが、前年度同日までの累計は、知る限りデフォルトのフィルターでは難しい、はず。
1について、基本的に一つのダッシュボードで用いるワークシートは少ない方が良いです。なぜなら
・表示させるワークシート数はダッシュボード表示までの時間に影響する。
・ダッシュボードの作成、メンテナンス、改善にかかる工数が少なくできる。
2について、
・特に頻繁に見るダッシュボードなら、基本的に手動でデータ範囲をフィルタ―しないように設計した方が良いと思います。
・手動作業はヒューマンエラーを招きますし、何より計算フィールドを用いたフィルターで自動化できるなら、そちらの方が良さそうですよね。
・また、変更するフィルターは少ない方が、ダッシュボード使用者にもフレンドリーです。
ここに日付関数を用いるモチベーションがあります。
計算フィールドで、「自動的に」「任意の」期間から数字を持ってくる方法を覚えれば、これからのダッシュボードはもっとスマートになります。
【日付計算を用いた計算式】
まずは例としてYtD、YtD Previous(前年度同日までの累計)の計算式を記します。ここでBasis Dateはパラメータで、任意の基準日です。
(赤字部分をquarter, month, weekにすると、それぞれ対応する期間に用いることができます。)
YtD
DATEDIFF('year',[Order Date],[Basis Date]) = 0 AND DATEDIFF('day',[Order Date],[Basis Date]) >= 0
YtD Previous
DATEDIFF('year',[Order Date],[Basis Date]) = 1 AND DATEDIFF('day',[Order Date],DATEADD('year',-1,[Basis Date])) >= 0
【DATEDIFF()について】
DATEDIFF(日付単位, 開始日, 終了日)は"開始日"と"終了日"の差を、"日付単位"で計算したものを返します(出力は整数)。
例えば、開始日2018/4/10と終了日2018/5/27を日付単位"year"で計算すると、両方とも2018年なので、そのDATEDIFFは0です。"month"の場合は1です。
したがって、YtD, YtD Previousの計算式が意味するところは
・DATEDIFF('year', [Order Date], [Basis Date] = 0 で「今年」を、DATEDIFF('day',[Order Date],[Basis Date]) >= 0で「基準日までの全ての日」を参照します。この組み合わせで「今年の1月1日から基準日まで」を参照できます。
・DATEDIFF('year', [Order Date], [Basis Date] = 1で「去年」を参照します。DATEDIFF('day',[Order Date],DATEADD('year',-1,[Basis Date])) >= 0で「基準日から1年前までのすべての日」を参照します。この組み合わせで「去年の1月1日から、基準日の1年前の日付まで」を参照できます。
これを用いることで、例えば「YtD Sales」「YtD Previous Sales」「YoY」「YoY %」などの指標を計算できます。作り方はシンプルです。
YtD Sales
IF [YtD] THEN [Sales] END
YtD Previous Sales
IF [YtD Previous] THEN [Sales] END
YoYなどは上記2つの数字を用いた計算なので割愛します。
日付計算をIF文と組み合わせることで、任意の期間の数字をフィルターを使わずに取得できる。
こういうテクニックがあると便利かと思います。
【余談】
実はこの辺りの計算は、特に計算フィールドを新たに作らずとも、表計算を用いればワークシート内で使える場合があります。
ただ、それを使いこなすには
・表計算それ自体への理解
・表計算フィルタ―の実行順序の理解(Tableau Operation Orderの理解)
が必要なので、まずは比較的分かりやすい日付関数を用いた方法を紹介しました。
【まとめ】
日付関数を用いた計算フィールド、いかがだったでしょうか。
今回の記事に用いたワークシートは以下にあります。
YtD, MtDとその比較はよく使われる数字だと思うので、これであなたのTableauライフが楽になれば幸いです。