見出し画像

Tableauを極めるやってみた~Day3~

こんばんは。
話題のなめらかプリンパフェ食べました。

それでは『Tableauを極める Day3』さっそくやっていきましょう!

今回のお題はこちら!

画像2

またまた日付関数の問題。
土日の算出がキモということですね。

むちゃくちゃ安易な考えでは、これは「DATEPART」の出番!?
日曜を1、土曜日を7で返してくれるやつ!

画像1

・・・・・

というわけで全くできなかったので、動画見ながらやっていきます!

STEP1

お馴染みDATEDIFFで注文日から出荷日の差を取得。
複数回注文している場合があるので計算方法を「平均」にします。

DATEDIFF("day",[注文日],[出荷日])
画像3

STEP2

週をまたいでいる場合、土日の2日分を引く計算式を追加
※-2 × 週数が引かれる

DATEDIFF("day",[注文日],[出荷日])

   -2 * DATEDIFF("week",[注文日],[出荷日],"monday")
画像4

STEP3

注文日が土日の場合、引く日数が2ではなくなるので、土曜日か、日曜日か、それ以外かを判別する計算式を追加する。

画像5
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」を出したいのに出ていない。

画像6

というわけでこのように計算式を修正。

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日を引く計算式

そんなこんなで完成しました。

画像7

注文が土日で、出荷が2週目以降に伸びた場合の考え方、理解するまで時間かかりました・・。このような計算式を組む頭がないので、本当にこのような課題はためになります。

考え方や数式の組み立て方を体に染み込ませなければ!

Day3もありがとうございました!
引き続きやっていきます!

いいなと思ったら応援しよう!