Tableauを極めるやってみた~Day3~
こんばんは。
話題のなめらかプリンパフェ食べました。
それでは『Tableauを極める Day3』さっそくやっていきましょう!
今回のお題はこちら!
またまた日付関数の問題。
土日の算出がキモということですね。
むちゃくちゃ安易な考えでは、これは「DATEPART」の出番!?
日曜を1、土曜日を7で返してくれるやつ!
・・・・・
というわけで全くできなかったので、動画見ながらやっていきます!
STEP1
お馴染みDATEDIFFで注文日から出荷日の差を取得。
複数回注文している場合があるので計算方法を「平均」にします。
DATEDIFF("day",[注文日],[出荷日])
STEP2
週をまたいでいる場合、土日の2日分を引く計算式を追加
※-2 × 週数が引かれる
DATEDIFF("day",[注文日],[出荷日])
-2 * DATEDIFF("week",[注文日],[出荷日],"monday")
STEP3
注文日が土日の場合、引く日数が2ではなくなるので、土曜日か、日曜日か、それ以外かを判別する計算式を追加する。
CASE DATEPART('weekday', [注文日])
WHEN 7 THEN
DATEDIFF("day",[注文日],[出荷日])
-1 * DATEDIFF("week",[注文日],[出荷日],"monday")//注文日が土曜日
WHEN 1 THEN
DATEDIFF("day",[注文日],[出荷日])
-2 * DATEDIFF("week",[注文日],[出荷日],"monday")//注文日が日曜日
ELSE
DATEDIFF("day",[注文日],[出荷日])
-2 * DATEDIFF("week",[注文日],[出荷日],"monday")//注文日がそれ以外
END
STEP4
2週間以上出荷が伸びた場合、計算ができていないので修正します。
具体的な日付を例にした場合、STEP3の計算式で算出すると、
10 - 1 * 2となり、「8」が返ってきてしまいます。
例)
注文日:2021/9/11
出荷日:2021/9/21
経過日数:10日
経過週数:2週
土日の数は3日なので、10日 -3日 で「7」を出したいのに出ていない。
というわけでこのように計算式を修正。
CASE DATEPART('weekday', [注文日])
WHEN 7 THEN
DATEDIFF("day",[注文日],[出荷日])
-2 * (DATEDIFF("week",[注文日],[出荷日],"monday") -1) -1//注文日が土曜日
WHEN 1 THEN
DATEDIFF("day",[注文日],[出荷日])
-2 * (DATEDIFF("week",[注文日],[出荷日],"monday") -1) -0//注文日が日曜日
ELSE
DATEDIFF("day",[注文日],[出荷日])
-2 * DATEDIFF("week",[注文日],[出荷日],"monday")//注文日がそれ以外
END
土曜を1日、日曜を2日としていたところを、一律で2日分を引くように修正
土曜:最初の週は1日引いて、翌週からマイナス2日を引く計算式
日曜:最初の週は0日引いて、翌週からマイナス2日を引く計算式
そんなこんなで完成しました。
注文が土日で、出荷が2週目以降に伸びた場合の考え方、理解するまで時間かかりました・・。このような計算式を組む頭がないので、本当にこのような課題はためになります。
考え方や数式の組み立て方を体に染み込ませなければ!
Day3もありがとうございました!
引き続きやっていきます!