Tableau で Calendar その2 (全部で3か4)
続きです。
を月曜日始まりにします。
開始曜日を修正する
"weekday" の換算では、Sundayが「1」だったので、月曜日を「1」にするためには。。。
マイナス1にすると、Sundayが「0」になるだけで、変わりません。
こんなのでいけますね。
[Weekday ID 2]
if [Weekday ID] =1 then 7 else [Weekday ID]-1 END
が、なんかズブの素人っぽい ですね。もう少しエレガントに、そして[Calendar Date] から直接計算できる方法を考えます。
[Weekday ID] を計算した後に、If で条件分けするのではなく、日付そのものに手を加えます。
[Weekday ID 2.2]
datepart('weekday',dateadd('day',-1,[Calendar Date]))
[Calendar Date] の一日前の日付の曜日を持ってきてね。としました。
これをカレンダーに持っていって、[Weekday ID] と入れ替えます。
月曜日が先頭に来ました!
が、週の位置がずれてしまいました。
週の番号を修正する
ずれの原因は、
[Week number]
datepart('week',[Calendar Date])
の計算が、日曜日はじまりになっていることが原因です。
さて。。同じことができないか。。
[Week number 2]
datepart('week',dateadd('day',-1,[Calendar Date]))
できました。
基本的にこれでいいんですけど、もうちょっと突っ込みます。
「-1」 って分かりにくいんですよね。金曜日始まりにしたいときは?
「-5」で金曜日です。
これを一目で分かるようにしたいです。
開始曜日を簡単に任意の曜日にする
Date 関連の関数はいろいろあって、そのひとつに、Datetrunc っていうのがあります。
これは、単位期間(年、月、四半期、週、日、時間、分)のスタート時点の値を返す。という使い勝手の良いものです。
上のような感じです。
[Datetrunc Year]
datetrunc('year',[Calendar Date 2])
日付基準の部分(「week」)は、全て小文字である必要があります。
さて、この [datetrunc] 関数ですが、week のときだけ、さらに特別機能があります。
[Datetrunc Week Monday]
datetrunc('week',[Calendar Date 2],'Monday')
のように、後ろに曜日を入れると、直前のその曜日の日付を返してくれるのです。
年とか、月とかは同様の機能はなさそうです。
さて、カレンダーに戻ると、
[Week number 3]
datepart('week',datetrunc('week',[Calendar Date],'Monday'))
[Weekday ID 3]
[Calendar Date]-datetrunc('week',[Calendar Date],'Monday')+1
ということになります。
ID のほうは、日付から直前の月曜日をマイナスすることで日数を計算しています。+1 はおまけで、0 スタートを好むか、1 スタートにするかの差です。
なお、datetrunc は重宝する関数で、例えば月ごとの日数を算出するなどでも使えます。
[Month Days]
datetrunc('month',dateadd('month',1,[Calendar Date 2]))
-
datetrunc('month',[Calendar Date 2])
あるいは、月末の日付特定などです。
[Last Day of Month]
date(datetrunc('month',dateadd('month',1,[Calendar Date 2]))-1)
では、ご自分でトライして楽しんでください。