
Tableau のお勉強【日付関数】
このnoteでは、勉強中個人的に気になったところや復習で見返すように
つらつら書き留めていこうと思う次第です。
今回のテーマは【日付関数】です。よろしくお願いします!
日付をなんとなくで理解してないかい?
とある課題解いていたと時のこと…

上の2つの写真、課題の問いとしては右が正しい回答になるのですが、
最初に回答したときは左の画像のように回答してしまいました。
列フィールドのオーダー日をどういれているか(青か緑か)の違いだけなのですが、画像のように結果が大きく変わります。

実はこれまででも、青と緑どっちにすればいいんだろうと毎回悩み、とりあえず片方を試し、その後にもう一方も試してみて「ああ、こっちが正しいんだな。」となる訳ですが、それってちゃんと理解できてないんじゃない?と思い、改めて整理をしてみることにしました。
紛らわしい日付フィールドの正体
フィールドに持ってきたオーダー日をダブルクリックすると、
実は式が生成されているのを覗くことができます。


青:DATEPART関数 / 緑:DATETRUNC関数と、それぞれ異なった関数を使用して集計していた訳です。関数が違えば集計も変わるのは当然です。
これらの違い、つまり日付関数を理解すれば今後迷うことはないでしょう。

DATEPART関数 vs DATETRUNC関数
それではDATEPART関数とDATETRUNC関数についてみて見ていくことにします。
DATEPART関数
DATEPART(date_part (日付の単位) , date , [start_of_week])
DATEPART関数は、dateのdate_partの部分を整数として返す関数です。
2023年12月20日を例にすると、
date_part:年=2023
date_part:月=12
date_part:日=20
と返されます。
※計算フィールドで式を書くと整数値で返されるので、日付で出したい場合は日付型に変換する必要があります。
★DATEPART関数は単位ごとの集計が得意です。
DATETRUNC関数
DATETRUNC(date_part , date , [start_of_week])
DATETRUNC関数は、date_partによって指定された精度で切り捨て、新しい日付を生成する関数です。
2023年12月20日を例にすると、
date_part:年=2023年1月1日
date_part:月=2023年12月1日
date_part:日=2023年12月20日
と返されます。
★DATETRUNC関数は単位ごとにまとめられた日付の集計が得意です。
どう使い分ける?
DATEPART関数は単位ごとの集計が得意なので、月別の売上などといった
単位ごとの推移を見せたい場合はこちらを使うのがおすすめです。
→月単位でまとめると2013年の12月も2014年の12月も同じ12月で集計されます。年と月を分けたい場合は、年単位も併せてフィールドに入れると解決します。

DATETRUNC関数は単位ごとにまとめられた日付の集計が得意なので、
時系列など日付推移が見たい場合はこちらを使うのがおすすめです。

連続/不連続って?
冒頭に青:DATEPART関数 / 緑:DATETRUNC関数と書きましたが、これは正しくはありません。DETAPARTを緑に、DATETRUNCを青に変換することだってできるからです。じゃあなんやねんって話ですが、
あの色の正体は、緑=連続 / 青=不連続というデータの型を表しています。
連続
連続というのは時系列や数列など、あらかじめ順序が決まっているもの
不連続
順序が決まっているわけではなく、それぞれが独立しているもの
下はDATETRUNC関数で生成した「連続」の日付フィールドです。
このように連続した年月の推移で順番に意味を持たせています。
この順番に意味を持たせることで傾向線を引くことができます。

下は画像はDATETRUNC関数で生成した「不連続」の日付フィールドです。
連続とは反対に順番に意味を持たせていない状態です。順番に意味を持たせていないということは、グラフを自由に移動することも可能なので、
このように売上昇順で並び替えを行うことが可能です。

超ざっくりですが、このように連続/不連続でできることがそれぞれあるため、どういうグラフを作りたいかで選択していくことが大事です。
連続不連続は日付関数以外の場面でも登場しますし、ものすごくややこしいので多くの新人tableauユーザーを崖に突き落としている厄介者じゃないかと思います。その分奥が深く、しっかりと理解できればグラフ作成のイメージが付きやすくなると思います。
おまけ:頻出日付関数
今回の記事のメインはDATEPART関数とDATETRUNC関数の違いでしたが、
せっかくなので課題や実務でよく使うであろう日付関数をいくつかまとめてみました。
DATEADD関数
DATEADD ( date_part, 数値, date)
DATEADD関数は現在の日付に対して指定した数値分のdate_part(年・月・日)を追加する関数です。
数値がマイナスならその分の日付単位が引かれます。
使用場面はさまざまですが、代表的なものとしては会計年度を整合させる時にこの関数を使います。

★下記のように、DATEADD関数で年を1減らすことで会計年度を整合させることができます。

DATEDIFF関数
DATEDIFF( date_part , 開始日 , 終了日 ,[start_of_week])
こちらも超頻出です。異なる日付間の差分を出したいときにこの関数を使います。サンプルスーパーストアでは【オーダー日】と【出荷日】の差分で出荷日数を出したかと思います。
※DATEDIFF関数を使って自分がこの世に生まれてから今日まで何日たったか出してみました。
→なんと約1年前に10,000日たってました。50,000日は生きたいですね。

実務レベルでもかなり使う場面が多いと思うのでしっかり公式を頭に叩き込む必要があります。
おわりに
正直、日付関数は苦手にしていたところだったので今回のブログをまとめていく中で整理することができてよかったです。この後も気になった所や整理したいところを取り上げていきたいと思います。