Tableauで「月末」「先週の日曜」等の取得できそうでなかなかできない系の日付を取得する #tableau

2018.02.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。DI部のtamaです。

今回は、かゆいところに手が届く感じの、日付に関する計算フィールドを紹介します。

Tableauの日付フィルタについて

Tableauには「フィルタ」シェルフという部分があり、そこにフィルタリングしたい項目をドラッグすれば、それだけでフィルタが完成します。
ドラッグする項目が日付データの場合は、日時を条件として、データを絞り込むことが出来ます。

また、そのフィルタを「表示」することで、ビューの閲覧者が好きな日時でデータを絞りこめる機能をつけることもできます。

しかし、このデフォルトの機能では、やりたくてもなかなかできない絞込も多数あると思います。

  • 「2週間前〜1週間後」で絞り込みたい
  • 「先週の○曜日」〜のデータが見たい
  • 「今日から3ヶ月後の月末」に絞り込みたい

Tableauを使用しているとき(特にKPI等の定点観測系のダッシュボードを作るとき)、意外と上記のようなことをしたい場面が出てきます。
今回は、それを計算フィールドで実現する方法を紹介したいと思います。

「X週間前〜Y週間後」を取得する

以下の計算式を作成し、フィルタとして設定します。

//X週間前
DATEADD('week',-1, TODAY()) <=[出荷日]
//Y週間後
AND DATEADD('week',2, TODAY())>=[出荷日]

解説

  • DATEADD関数で、「今日」に週単位の計算を施しています。
  • 上記の計算フィールドは「今日より1週間前〜今日から2週間後」までを指定しています。
    • 「TODAY()」を変えることで、任意の日付を起点にすることができます。
    • 数字を変えることで、X週間前〜Y週間後の数値を変えることが出来ます。

検証

Tableau付属のサンプルスーパーストアには、2018年2月のデータが無いので、「2017年11月25日」を起点として、フィルタに設定してみました。

参考

「先週の日曜日」を取得する

以下の計算式を作成し、フィルタとして設定します。

TODAY() - DATEPART("weekday", TODAY() )+1-7

解説

  • DATEPART関数で曜日の数値を算出し、起点となる日付から減算することで、先週の曜日にあたる日付を算出します。
  • 上記の計算フィールドは「今日を起点とした先週の日曜日」を返します。
    • 「TODAY()」を変えることで、任意の日付を起点にすることができます。
    • 右側の「+1」を変えることで、曜日を指定できます。(+2だと先週の月曜日)
    • 応用すると「2週間前の水曜日」等もできますね。
  • ※この計算フィールドは、「週の始まりは日曜日」を前提としています。

検証

Tableau付属のサンプルスーパーストアには、2018年2月のデータが無いので、「出荷日」を起点として、結果を確かめてみたいと思います。

出荷日を起点とした「先週の日曜日」が表示されています。
この計算フィールドをさらに他の計算フィールドに組み込み、フィルタに設定すれば、「先週の日曜日〜今日まで」といったフィルタリングが可能となります。

「月末」を取得する

以下の計算式を作成し、フィルタとして設定します。

DATETRUNC('month', DATEADD('month',2,TODAY()))-1

解説

  • 上記の計算フィールドは「今日を起点とした来月の月末」の日付を返します。
  • DATEADD関数で「今日から2ヶ月後」を取得します。その日付をDATETRUNC関数で月単位に切り捨てます。月単位で切り捨てると、日は必ず1日になるので、そこから1日減算すると「1ヶ月後の月末」が取得できる…という形です。
    • 数字を変えれば○ヶ月を変更することができます。(もちろん当月末も可能)

検証

Tableau付属のサンプルスーパーストアには、2018年2月のデータが無いので、「出荷日」を起点として、結果を確かめてみたいと思います。

次月の月末の日付が取得できています。
これも、他の計算フィールドに組み込んでフィルタに設定することで、「○ヶ月前」「○ヶ月後」といった期間でデータを絞り込むことができます。

参考

おわりに

今回は、使わなさそうで意外とありがちな日付を取得する方法を見てきました。データ分析において、良いインサイトを得るためには、「これはいつのデータなのか」をしっかりと意識する必要があります。
デフォルトの機能でうまく絞り込めない場合は、今回のような計算フィールドを使用して、うまくフィルタリングしてみてください。