【完全保存版】Tableauで「月初・月末・平日・特別な日」まで全部計算できる日付フィールド集

Tableauで日付の計算はよく使うのに、毎回書き方を忘れがちです。
特に「月初ってどう書いたっけ?」「今月の平日って何日?」といった処理は繰り返し出てきます。

この記事では、実務で頻出する日付関連の計算フィールドを、
すべてベストプラクティスに基づいた形式で、意味と背景付きでまとめました。

目次

基本方針:Tableauの日付関数は常にDATEでキャストする

TableauのDATETRUNCDATEADDなどの関数は、デフォルトで「日時型」になります。
日付だけ欲しい場面では、DATE()で明示的にキャスト
しましょう。

// 月初を取得(ベストプラクティス)
DATE(DATETRUNC('month', [日付]))

当月に関する計算フィールド

月初と月末

// 月初
DATE(DATETRUNC('month', [日付]))

// 月末
DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付]))))

当月の日数

// 当月最終日の日にち = 当月日数
DAY(DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付])))))

月初から今日までの日数

DATEDIFF('day', DATE(DATETRUNC('month', TODAY())), TODAY()) + 1

月末までの残り日数

DATEDIFF('day', TODAY(), DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', TODAY())))))

月によって日数を変える動的処理(当月・先月・翌月対応)

IF DATETRUNC('month', [日付]) = DATETRUNC('month', TODAY()) THEN
    DATEDIFF('day', TODAY(), DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', TODAY())))))
ELSEIF DATETRUNC('month', [日付]) < DATETRUNC('month', TODAY()) THEN
    DAY(DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付])))))
ELSE
    0
END

曜日や平日の処理

月初の曜日(英語)

DATENAME('weekday', DATE(DATETRUNC('month', [日付])))

月初の平日(初日が土日の場合スキップ)

DATE(
    IF DATEPART('weekday', DATE(DATETRUNC('month', [日付]))) = 1 THEN
        DATEADD('day', 1, DATE(DATETRUNC('month', [日付])))
    ELSEIF DATEPART('weekday', DATE(DATETRUNC('month', [日付]))) = 7 THEN
        DATEADD('day', 2, DATE(DATETRUNC('month', [日付])))
    ELSE
        DATE(DATETRUNC('month', [日付]))
    END
)

月末の平日(最終日が土日の場合前倒し)

DATE(
    IF DATEPART('weekday', DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付]))))) = 1 THEN
        DATEADD('day', -2, DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付])))))
    ELSEIF DATEPART('weekday', DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付]))))) = 7 THEN
        DATEADD('day', -1, DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付])))))
    ELSE
        DATE(DATEADD('day', -1, DATEADD('month', 1, DATETRUNC('month', [日付]))))
    END
)

当月の平日数(営業日数)

// 初平日〜最終平日までの日数(+1で初日を含む)から土日を除く
DATEDIFF('day', [初平日], [最終平日]) + 1
- 2 * DATEDIFF('week', [初平日], [最終平日])

※祝日除外は別にカレンダーデータをJOINする必要があります。

ゴミ出しロジックに応用できる構文

隔週の火曜日(例:プラごみ)

DATE(DATEADD('day', 3 - DATEPART('weekday', [日付]), [日付]))

第n週のx曜日(例:第4水曜日)

IF DATEPART('weekday', DATE(DATETRUNC('month', [日付]))) <= 4 THEN
    DATE(DATEADD('day', 4 - DATEPART('weekday', DATE(DATETRUNC('month', [日付]))) + 21, DATE(DATETRUNC('month', [日付]))))
ELSE
    DATE(DATEADD('day', 4 - DATEPART('weekday', DATE(DATETRUNC('month', [日付]))) + 28, DATE(DATETRUNC('month', [日付]))))
END

先月に関する計算フィールド

先月初・先月末・日数

// 先月初
DATE(DATEADD('month', -1, DATETRUNC('month', [日付])))

// 先月末
DATE(DATEADD('day', -1, DATETRUNC('month', [日付])))

// 先月日数
DAY(DATE(DATEADD('day', -1, DATETRUNC('month', [日付]))))

翌月に関する計算フィールド

翌月初・翌月末・日数

// 翌月初
DATE(DATEADD('month', 1, DATETRUNC('month', [日付])))

// 翌月末
DATE(DATEADD('day', -1, DATEADD('month', 2, DATETRUNC('month', [日付]))))

// 翌月日数
DAY(DATE(DATEADD('day', -1, DATEADD('month', 2, DATETRUNC('month', [日付])))))

補足:祝日を除く営業日を求めるには?

Tableauだけでは祝日カレンダーを持っていないため、Googleカレンダーや自社カレンダーをExcel連携やデータベース結合で読み込む必要があります。

  1. 祝日列(例:「営業日フラグ = 1 or 0」)を持つマスターデータを用意
  2. それを[日付]とJOIN
  3. IF [営業日フラグ] = 1 THEN 1 ELSE 0 ENDで日数カウント

まとめ

日付処理はTableauダッシュボードの根幹です。

※2025年最新版のTableau構文に準拠。公式ドキュメントやTableau Community Forumも参考にしています。

Comment

コメントする

目次