特定期間の数字を取得:日付関数Ver.

最終更新: 2019年3月30日


今回のテーマは「日付関数を使って、任意の日付期間の数字を取得しよう」です。

目標は、下記のようなダッシュボードを作成できるようになることです。

(クイックに作ったので、フォーマットをもっと頑張れるだろ、という点はご容赦を。)


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です。

(参考:https://onlinehelp.tableau.com/current/pro/desktop/ja-jp/functions_functions_date.html)

したがって、YtD, YtD Previousの計算式が意味するところは

・DATEDIFF('year', [Order Date], [Basis Date] = 0 で「今年」を、DATEDIFF('day',[Order Date],[Basis Date]) >= 0で「基準日までの全ての日」を参照します。この組み合わせで「今年の11日から基準日まで」を参照できます。

・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の理解)

が必要なので、まずは比較的分かりやすい日付関数を用いた方法を紹介しました。

【まとめ】

日付関数を用いた計算フィールド、いかがだったでしょうか。

今回の記事に用いたワークシートは以下にあります。

https://public.tableau.com/profile/yoshitaka6076#!/vizhome/DateCalculationForMyBlog/1

YtD, MtDとその比較はよく使われる数字だと思うので、これであなたのTableauライフが楽になれば幸いです。

もしご質問などがあれば、TwitterLinkedinへメッセージをよろしくお願いします。

#Tableau

© 2023 by Actor & Model. Proudly created with Wix.com