Tableauで営業日(平日数)を計算する!

はじめに

Tableauを利用して営業日を計算したい時があると思います。
お仕事されている方なら、土日を含めた日付を計算するよりも営業日の日付計算をすることの方が多いのではないでしょうか。

今回は、Tableauで日付計算を行う際に、単なる日付の差分を計算するのではなく、
営業日(平日数)を計算
したいと思います。

なお、今回ご紹介する方法では、祝日を考慮しない営業日の計算となりますので、
ご利用の際には、その点を注意していただけると幸いです。

対象データ

Tableauでよく利用されるサンプルスーパーストアのデータを利用します。
このデータに含まれる オーダー日出荷日 を対象に平日数を計算していきましょう。

ちなみに、普通に日付の差分を計算するときには、 DATEDIFF('day', オーダー日, 出荷日) とすれば計算ができます。

【準備】対象のデータを変換する

はじめにデータの下ごしらえが必要になります。
営業日を計算するにあたって、起点となる日(オーダー日)と終点の日(出荷日)で、
少し処理が異なるので、気をつけてください。

起点日の準備

それでは、営業日計算のスタートとなる日付を対象に、下ごしらえです。
Tableauの計算フィールドを開いて、以下のスクリプトを記入してください。

IF DATEPART('weekday', オーダー日) = 1 THEN DATEADD('day', 1, オーダー日)
ELSEIF DATEPART('weekday', オーダー日) = 7 THEN DATEADD('day', 2, オーダー日)
ELSE オーダー日
END

IF文の中でややこしい計算をしていますね。
分解して見ていきましょう。

DATEPART('weekday', オーダー日)にて、計算対象の日を曜日に変換しております。
また、曜日と言っても月曜火曜と文字列ではなく、曜日を数値に変換しております。

日曜日が1で土曜日は7となる計算を実行しております。

DATEPART('weekday', オーダー日) = 1
これは、計算対象の日付が日曜日の場合を判定しております。

DATEPART('weekday', オーダー日) = 1 THEN DATEADD('day', 1, オーダー日)
そして、日曜日だった場合には、1日追加しております。
つまり、日曜日の日付を月曜日に変換しているんですね。

2行目も同じような処理をしております。

ELSEIF DATEPART('weekday', オーダー日) = 7 THEN DATEADD('day', 2, オーダー日)
こちらは、土曜日の場合、2日追加して月曜日に変換しております。

3行名は、一番シンプルですね。

ELSE オーダー日
IF文の中で、日曜と土曜日を月曜日に変換してきました。
残るは平日のため、変換をせずにそのままの日付を返しております。

さて、これで起点となる日の準備は完了です。

終点日の準備

次に、計算の終点となる日付の準備に入ります。
起点日のときと計算式はよく似ていますね。

待ちえないように気をつけてください。

IF DATEPART('weekday', 出荷日) = 1 THEN DATEADD('day', -2, 出荷日)
ELSEIF DATEPART('weekday', 出荷日) = 7 THEN DATEADD('day', -1, 出荷日)
ELSE 出荷日
END

DATEPART('weekday', 出荷日) = 1 THEN DATEADD('day', -2, 出荷日)
1行目のIF文で出てきた処理です。
何をしているかというと出荷日が日曜日だった場合、2日さかのぼって先週の金曜日に変換しております。

ELSEIF DATEPART('weekday', 出荷日) = 7 THEN DATEADD('day', -1, 出荷日)
2行目も同様の処理を行っております。
出荷日が土曜日だった場合、1日さかのぼって金曜日に変換しております。

さて、ここまでで準備は完了しました。

【計算】営業日(平日日)を計算

営業日を計算するにあたっての、起点となる日と終点となる日の準備をしてきました。
次は、いよいよ営業日の数を計算しましょう。

営業日(平日数)を計算

MIN(DATEDIFF('day', 起点日, 終点日)) +1 -2 * DATEDIFF('week', 起点日, 終点日))

DATEDIFF('day', 起点日, 終点日)) +1
起点日と終点日の日付差分を取得してプラス1日をしております。

-2 * DATEDIFF('week', 起点日, 終点日)
起点日と終点日の週の違いを取得して、その差にマイナス2をかけております。

上記2つを合わせて、最小値を計算することで営業日を計算することが可能なのです。

【結果】正しく計算できているか確認しよう

さて、実際に計算までやってみました。
実際に営業日の計算ができているか確認してみましょう。

f:id:gotto50105010:20190320234702p:plain

例えば、1番上に表示されている行を見てください。

起点日:2018年10月6日
終点日:2018年10月8日
営業日:1日

計算した日付を取り上げると、10/8(月)のみ営業日と計算しております。
10/6(土),10/7(日)は、平日ではないため営業日の計算には入っておりません。

もっとTableauについて、いろいろ学びたい。使いこなしたいという方には、
以下の書籍をオススメします。

計算フィールドのことから、fixedの使い方まで網羅的に載っているので、
Tableauを利用される際には、お手元に1冊あっても損はないでしょう。

参考書

Tableauデータ分析 ~実践から活用まで~

Tableauデータ分析 ~実践から活用まで~

Tableauデータ分析~入門から実践まで~

Tableauデータ分析~入門から実践まで~