【TableauTips】日付関数に関するすべて!よく使う関数式をまとめました

日付に関する計算フィールドってよく使う割に書き方を忘れますよね。
初日ってどうするんだっけとか。
かといって暗記するほどでもないです。
なので、ここにまとめておきます。

目次

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

なぜかは知らないんですが、日付関数を使うとデフォで日時になるので、すべてにDATEをつけています。
特に意味はないです。

月初と月末

月初

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

月末

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

翌月月初から1日前にすることで、月末にしています。

当月日数

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

月末の”日”を取ってきています。

月初から今日までの日数

//月初から今日までの日数
DAY(Today())

月末までの残り日数

//月初までの残り日数
DATEDIFF("day",TODAY(),
    //月末
    DATEADD('day', -1,
            DATEADD('month', 1,
                DATETRUNC('month', TODAY())
            )
    )
)

今月は月末までの残り日数で、先月以前は月日数、翌月以降は0

//今月判定
IF MONTH([日付]) = MONTH(TODAY())
    THEN
    //月初までの残り日数
    DATEDIFF("day",TODAY(),
        //月末
        DATEADD('day', -1,
                DATEADD('month', 1,
                    DATETRUNC('month', TODAY())
                )
        )
    )
//当月前判定
ELSEIF MONTH([日付]) < MONTH(TODAY())
    THEN
    //当月日数
    DAY(
        //月末
        DATEADD('day', -1,
            DATEADD('month', 1,
                DATETRUNC('month', [日付])
            )
        )
    )
ELSE 0
END

初日の曜日

//初日の曜日
DATENAME("weekday",[月初])

ちなみに英語です。Sundayとか。
単純に曜日として利用する場合はカスタム書式の方がおすすめです。

初平日

月最初の平日。

DATE(
    //月初が土日か平日か
    IF DATEPART('weekday', [月初]) = 1 THEN
        //1の場合は日曜日なので、翌日にする
        DATEADD('day', 1, [月初])
    ELSEIF DATEPART('weekday', [月初]) = 7 THEN
        //7の場合は土曜日なので、翌々日にする
        DATEADD('day', 2, [月初])
    ELSE
        [月初]
    END
)

DATENAMEではなくDATEPARTを使ったほうが数字で返ってくるので便利です。

最終平日

DATE(
    //月末が土日か平日か
    IF DATEPART('weekday', [月末]) = 1 THEN
        //1の場合は日曜日なので、一昨日にする
        DATEADD('day', -2, [月末])
    ELSEIF DATEPART('weekday', [月末]) = 7 THEN
        //7の場合は土曜日なので、前日にする
        DATEADD('day', -1, [月末])
    ELSE
        [月末]
    END
)

当月の平日の数

//総平日日数
DATEDIFF('day',[初平日],[最終平日]) + 1
//初平日から最終平日までの日数。1日分ずれるので+1する
- 2 * DATEDIFF('week',[初平日],[最終平日])
//初平日から最終平日までの-1週数分かならず土日があるので×-2

2022年の12月で考えてみると
初平日は12月1日(木曜日)、最終平日は12月30日(金曜日)です。
dayでDATEDIFFすると30-1で29になるので、1日分ずれます。
weekでDATEDIFFすると5(最終週)-1(初週)で1週分ずれて4になります。
日曜が1で土曜が7、平日は2~6なので、平日で区間設定すると初週には土曜が必ず含まれ日曜は含まれません。
逆に最終週に土曜は含まれず日曜は含まれます。
よって日曜は2、3、4、5(週)、土曜は1、2、3、4(週)になり、どっちも4週分になります。
なので-2をかけるとその期間の土日数が省けるというわけです。

隔週のx曜日

うちのプラごみの日です。(毎週火曜日)

//当火曜日
DATE(DATEADD("day",3-DATEPART("weekday",[日付]),[日付]))
//火曜日は3なので3との差を足す。

日曜は1なので差は2、1+2で3
土曜日は7なので差は-4、7+(-4)で3です。

第n週のx曜日

うちの粗大ごみの日です。(第4水曜日)

//第4水曜日
IF DATEPART("weekday",[初日]) <= 4 THEN
    DATE(
        DATEADD("day",4-DATEPART("weekday",[初日])+21,[初日])
    )

    //第4なので3週分(21)追加です。
ELSE 
    DATE(
        DATEADD("day",4-DATEPART("weekday",[初日])+28,[初日])
    )

    //初日が4以上、つまり木金土の場合はDATEADDが-になり前月の水曜になってしまうので4週分(28)ついか
END

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

先月初と先月末

先月初

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

月初から月を1引いています。

先月末

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

月初から1日引いてます。

先月の日数

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

先月末の”日”を取ってきています。

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

翌月初と翌月末

翌月初

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

月初から月を足しています。

翌月末

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

翌々月初から1日引いてます。

翌月の日数

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

先月末の”日”を取ってきています。

Comment

コメントする

目次