Tableau日期计算合集

本文根据 Tableau Public 上Ken Flerlage的Date Calculation Cheat Sheet进行整理翻译,基本涵盖了常用的 Tableau 日期计算。
地址:https://public.tableau.com/app/profile/ken.flerlage/viz/DateCalculationCheatSheet/Intro

  1. 当前周的第一天
  2. 当前周的最后一天
  3. 下周的第一天
  4. 下周的最后一天
  5. 上一周的第一天
  6. 上一周的最后一天
  7. 当前月的第一天
  8. 当前月的最后一天
  9. 下个月的第一天
  10. 下个月的最后一天
  11. 上个月的第一天
  12. 上个月的最后一天
  13. 当前季度的第一天
  14. 当前季度的最后一天
  15. 下一季度的第一天
  16. 下一季度的最后一天
  17. 上一季度的第一天
  18. 上一季度的最后一天
  19. 当前年的第一天
  20. 当前年的最后一天
  21. 下一年的第一天
  22. 下一年的最后一天
  23. 上一年的第一天
  24. 上一年的最后一天
  25. 当前月的天数
  26. 下个月的天数
  27. 上个月的天数
  28. 当前季度的天数
  29. 下一季度的天数
  30. 上一季度的天数
  31. 当前年的天数
  32. 下一年的天数
  33. 上一年的天数
  34. 当前月的工作日数量
  35. 下个月的工作日数量
  36. 上个月的工作日数量
  37. 当前季度的工作日数量
  38. 下一季度的工作日数量
  39. 上一季度的工作日数量
  40. 当前年的工作日数量
  41. 下一年的工作日数量
  42. 上一年的工作日数量
  43. 当月的最后一个特定日(例如:星期日,星期一)
  44. 当月的第N个特定日(例如:星期日,星期一)
  45. 当前日期的世纪
  46. 当前日期的十年

1. 当前周的第一天

原字段名

Week – Current – First Day

基准日期

2026-01-26

计算结果

2026-01-25

公式

// 1) 截断到周的第一天
// 2) 转换为日期
DATE(
    DATETRUNC('week', [基准日期])
)

2. 当前周的最后一天

原字段名

Week – Current – Last Day

基准日期

2026-01-26

计算结果

2026-01-31

公式

// 1) 截断到周的第一天
// 2) 添加1周。
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('week', 1, 
            DATETRUNC('week', [基准日期])
        )
    )
)

3. 下周的第一天

原字段名

Week – Next – First Day

基准日期

2026-01-26

计算结果

2026-02-01

公式

// 1) 添加1周
// 2) 截断到周的第一天
// 3) 转换为日期
DATE(
    DATETRUNC('week', 
        DATEADD('week', 1, [基准日期])
    )
)

4. 下周的最后一天

原字段名

Week – Next – Last Day

基准日期

2026-01-26

计算结果

2026-02-07

公式

// 1) 截断到周的第一天
// 2) 添加2周
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('week', 2, 
            DATETRUNC('week', [基准日期])
        )
    )
)

5. 上一周的第一天

原字段名

Week – Previous – First Day

基准日期

2026-01-26

计算结果

2026-01-18

公式

// 1) 减去1周
// 2) 截断到周的第一天
// 3) 转换为日期
DATE(
    DATETRUNC('week', 
        DATEADD('week', -1, [基准日期])
    )
)

6. 上一周的最后一天

原字段名

Week – Previous – Last Day

基准日期

2026-01-26

计算结果

2026-01-24

公式

// 1) 截断到周的第一天。
// 2) 减去1天
// 3) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATETRUNC('week', [基准日期])
    )
)

7. 当前月的第一天

原字段名

Month – Current – First Day

基准日期

2026-01-26

计算结果

2026-01-01

公式

// 1) 截断到月的第一天
// 2) 转换为日期
DATE(
    DATETRUNC('month', [基准日期])
)

8. 当前月的最后一天

原字段名

Month – Current – Last Day

基准日期

2026-01-26

计算结果

2026-01-31

公式

// 1) 截断到月的第一天
// 2) 添加1个月
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('month', 1, 
            DATETRUNC('month', [基准日期])
        )
    )
)

9. 下个月的第一天

原字段名

Month – Next – First Day

基准日期

2026-01-26

计算结果

2026-02-01

公式

// 1) 截断到月的第一天
// 2) 添加1个月
// 3) 转换为日期
DATE(
    DATEADD('month', 1, 
        DATETRUNC('month', [基准日期])
    )
)

10. 下个月的最后一天

原字段名

Month – Next – Last Day

基准日期

2026-01-26

计算结果

2026-02-28

公式

// 1) 截断到月的第一天
// 2) 添加2个月
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('month', 2, 
            DATETRUNC('month', [基准日期])
        )
    )
)

11. 上个月的第一天

原字段名

Month – Previous – First Day

基准日期

2026-01-26

计算结果

2025-12-01

公式

// 1) 截断到月的第一天
// 2) 减去1个月
// 3) 转换为日期
DATE(
    DATEADD('month', -1, 
        DATETRUNC('month', [基准日期])
    )
)

12. 上个月的最后一天

原字段名

Month – Previous – Last Day

基准日期

2026-01-26

计算结果

2025-12-31

公式

// 1) 截断到月的第一天
// 2) 减去1天
// 3) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATETRUNC('month', [基准日期])
    )
)

13. 当前季度的第一天

原字段名

Quarter – Current – First Day

基准日期

2026-01-26

计算结果

2026-01-01

公式

// 1) 截断到季度的第一天
// 2) 转换为日期
DATE(
    DATETRUNC('quarter', [基准日期])
)

14. 当前季度的最后一天

原字段名

Quarter – Current – Last Day

基准日期

2026-01-26

计算结果

2026-03-31

公式

// 1) 截断到季度的第一天。
// 2) 添加1个季度
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('quarter', 1, 
            DATETRUNC('quarter', [基准日期])
        )
    )
)

15. 下一季度的第一天

原字段名

Quarter – Next – First Day

基准日期

2026-01-26

计算结果

2026-04-01

公式

// 1) 截断到季度的第一天
// 2) 添加1个季度
// 3) 转换为日期
DATE(
    DATEADD('quarter', 1,
        DATETRUNC('quarter', [基准日期])
    )
)

16. 下一季度的最后一天

原字段名

Quarter – Next – Last Day

基准日期

2026-01-26

计算结果

2026-06-30

公式

// 1) 截断到季度的第一天
// 2) 添加2个季度
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('quarter', 2, 
            DATETRUNC('quarter', [基准日期])
        )
    )
)

17. 上一季度的第一天

原字段名

Quarter – Previous – First Day

基准日期

2026-01-26

计算结果

2025-10-01

公式

// 1) 截断到季度的第一天
// 2) 减去1个季度
// 3) 转换为日期
DATE(
    DATEADD('quarter', -1,
        DATETRUNC('quarter', [基准日期])
    )
)

18. 上一季度的最后一天

原字段名

Quarter – Previous – Last Day

基准日期

2026-01-26

计算结果

2025-12-31

公式

// 1) 截断到季度的第一天
// 2) 减去1天
// 3) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATETRUNC('quarter', [基准日期])
    )
)

19. 当前年的第一天

原字段名

Year – Current – First Day

基准日期

2026-01-26

计算结果

2026-01-01

公式

// 1) 截断到年的第一天
// 2) 转换为日期
DATE(
    DATETRUNC('year', [基准日期])
)

20. 当前年的最后一天

原字段名

Year – Current – Last Day

基准日期

2026-01-26

计算结果

2026-12-31

公式

// 1) 截断到年的第一天
// 2) 添加1年
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('year', 1, 
            DATETRUNC('year', [基准日期])
        )
    )
)

21. 下一年的第一天

原字段名

Year – Next – First Day

基准日期

2026-01-26

计算结果

2027-01-01

公式

// 1) 截断到年的第一天
// 2) 添加1年
// 3) 转换为日期
DATE(
    DATEADD('year', 1,
        DATETRUNC('year',  [基准日期])
    )
)

22. 下一年的最后一天

原字段名

Year – Next – Last Day

基准日期

2026-01-26

计算结果

2027-12-31

公式

// 1) 截断到年的第一天
// 2) 添加2年
// 3) 减去1天
// 4) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATEADD('year', 2, 
            DATETRUNC('year', [基准日期])
        )
    )
)

23. 上一年的第一天

原字段名

Year – Previous – First Day

基准日期

2026-01-26

计算结果

2025-01-01

公式

// 1) 截断到年的第一天
// 2) 减去1年
// 3) 转换为日期
DATE(
    DATEADD('year', -1,
        DATETRUNC('year', [基准日期])
    )
)

24. 上一年的最后一天

原字段名

Year – Previous – Last Day

基准日期

2026-01-26

计算结果

2025-12-31

公式

// 1) 截断到年的第一天
// 2) 减去1天
// 3) 转换为日期
DATE(
    DATEADD('day', -1, 
        DATETRUNC('year', [基准日期])
    )
)

25. 当前月的天数

原字段名

Month – Current – Number of Days

基准日期

2026-01-26

计算结果

31

公式

// 获取当前月的最后一天,然后获取日期。
// DAY()内的公式与[Month - Current - Last Day]相同
DAY(
    DATEADD('day', -1, 
        DATEADD('month', 1, 
            DATETRUNC('month', [基准日期])
        )
    )
)

26. 下个月的天数

原字段名

Month – Next – Number of Days

基准日期

2026-01-26

计算结果

28

公式

// 获取当前月的最后一天,然后获取日期。
// DAY()内的公式与[Month - Next - Last Day]相同
DAY(
    DATEADD('day', -1, 
        DATEADD('month', 2, 
            DATETRUNC('month', [基准日期])
        )
    )
)

27. 上个月的天数

原字段名

Month – Previous – Number of Days

基准日期

2026-01-26

计算结果

31

公式

// 获取当前月的最后一天,然后获取日期。
// DAY()内的公式与[Month - Previous - Last Day]相同
DAY(
    DATEADD('day', -1, 
        DATETRUNC('month', [基准日期])
    )
)

28. 当前季度的天数

原字段名

Quarter – Current – Number of Days

基准日期

2026-01-26

计算结果

90

公式

// 查找当前季度第一天和最后一天之间的差值。
// 公式与[Quarter - Current - First Day]和[Quarter - Current - Last Day]相同
DATEDIFF('day', 
    DATETRUNC('quarter', [基准日期]), 
    DATEADD('day', -1, DATEADD('quarter', 1, DATETRUNC('quarter', [基准日期])))
)+1

29. 下一季度的天数

原字段名

Quarter – Next – Number of Days

基准日期

2026-01-26

计算结果

91

公式

// 查找下一季度第一天和最后一天之间的差值。
// 公式与[Quarter - Next - First Day]和[Quarter - Next - Last Day]相同
DATEDIFF('day', 
    DATETRUNC('quarter', DATEADD('quarter', 1, [基准日期])),
    DATEADD('day', -1, DATEADD('quarter', 2, DATETRUNC('quarter', [基准日期])))
)+1

30. 上一季度的天数

原字段名

Quarter – Previous – Number of Days

基准日期

2026-01-26

计算结果

92

公式

// 查找上一季度第一天和最后一天之间的差值。
// 公式与[Quarter - Previous - First Day]和[Quarter - Previous - Last Day]相同
DATEDIFF('day', 
    DATETRUNC('quarter', DATEADD('quarter', -1, [基准日期])),
    DATEADD('day', -1, DATETRUNC('quarter', [基准日期]))
)+1

31. 当前年的天数

原字段名

Year – Current – Number of Days

基准日期

2026-01-26

计算结果

365

公式

// 获取当前年的最后一天,然后获取日期。
// DATEPART()内的公式与[Year - Current - Last Day]相同
DATEPART('dayofyear', 
    DATEADD('day', -1, 
        DATEADD('year', 1, 
            DATETRUNC('year', [基准日期])
        )
    )
)

32. 下一年的天数

原字段名

Year – Next – Number of Days

基准日期

2026-01-26

计算结果

365

公式

// 获取下一年的最后一天,然后获取日期。
// DATEPART()内的公式与[Year - Next - Last Day]相同
DATEPART('dayofyear', 
    DATEADD('day', -1, 
        DATEADD('year', 2, 
            DATETRUNC('year', [基准日期])
        )
    )
)

33. 上一年的天数

原字段名

Year – Previous – Number of Days

基准日期

2026-01-26

计算结果

365

公式

// 获取当前年的最后一天,然后获取日期。
// DATEPART()内的公式与[Year - Previous - Last Day]相同
DATEPART('dayofyear', 
    DATEADD('day', -1, 
        DATETRUNC('year', [基准日期])
    )
)

34. 当前月的工作日数量

原字段名

Month – Current – Number of Weekdays

基准日期

2026-01-26

计算结果

22

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Month - Current - Fist Weekday], [Month - Current - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Month - Current - Fist Weekday], [Month - Current - Last Weekday])

35. 下个月的工作日数量

原字段名

Month – Next – Number of Weekdays

基准日期

2026-01-26

计算结果

20

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Month - Next - Fist Weekday], [Month - Next - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Month - Next - Fist Weekday], [Month - Next - Last Weekday])

36. 上个月的工作日数量

原字段名

Month – Previous – Number of Weekdays

基准日期

2026-01-26

计算结果

23

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Month - Previous - Fist Weekday], [Month - Previous - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Month - Previous - Fist Weekday], [Month - Previous - Last Weekday])

37. 当前季度的工作日数量

原字段名

Quarter – Current – Number of Weekdays

基准日期

2026-01-26

计算结果

64

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Quarter - Current - Fist Weekday], [Quarter - Current - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Quarter - Current - Fist Weekday], [Quarter - Current - Last Weekday])

38. 下一季度的工作日数量

原字段名

Quarter – Next – Number of Weekdays

基准日期

2026-01-26

计算结果

65

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Quarter - Next - Fist Weekday], [Quarter - Next - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Quarter - Next - Fist Weekday], [Quarter - Next - Last Weekday])

39. 上一季度的工作日数量

原字段名

Quarter – Previous – Number of Weekdays

基准日期

2026-01-26

计算结果

66

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Quarter - Previous - Fist Weekday], [Quarter - Previous - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Quarter - Previous - Fist Weekday], [Quarter - Previous - Last Weekday])

40. 当前年的工作日数量

原字段名

Year – Current – Number of Weekdays

基准日期

2026-01-26

计算结果

261

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Year - Current - Fist Weekday], [Year - Current - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Year - Current - Fist Weekday], [Year - Current - Last Weekday])

41. 下一年的工作日数量

原字段名

Year – Next – Number of Weekdays

基准日期

2026-01-26

计算结果

261

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Year - Next - Fist Weekday], [Year - Next - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Year - Next - Fist Weekday], [Year - Next - Last Weekday])

42. 上一年的工作日数量

原字段名

Year – Previous – Number of Weekdays

基准日期

2026-01-26

计算结果

261

公式

// 计算两周之间工作日的公式。
// 使用将开始和结束日期移至工作日的计算字段。
// https://kb.tableau.com/articles/howto/calculating-the-number-of-business-days-in-a-month
DATEDIFF('day', [Year - Previous - Fist Weekday], [Year - Previous - Last Weekday]) + 1
- 2 * DATEDIFF('week', [Year - Previous - Fist Weekday], [Year - Previous - Last Weekday])

43. 当月的最后一个特定日(例如:星期日,星期一)

原字段名

Last Specific Day of Month

基准日期

2026-01-26

计算结果

2026-01-25

公式

// 我们将从当月的最后一天开始。
// 然后我们将添加天数以到达指定的星期几。
[Month - Current - Last Day]
-
IF [Last Day - Helper Calc 1] = [Parameters].[Day of Week] THEN
// 第一天是正确的工作日,因此无需添加天数。
    0
ELSEIF [Parameters].[Day of Week] > [Last Day - Helper Calc 1] THEN
// 我们需要的日期在第一天之后。
    7-[Parameters].[Day of Week]+[Last Day - Helper Calc 1]
ELSE
// 我们需要的日期在第一天之前。
    [Last Day - Helper Calc 1]-[Parameters].[Day of Week]
END

44. 当月的第N个特定日(例如:星期日,星期一)

原字段名

Nth Specific Day of Month

基准日期

2026-01-26

计算结果

2026-01-04

公式

// 如果选择了第5周,第n天可能在下个月。
// 如果是这种情况,将值设为null。
IF DATETRUNC('month', [Nth Day - Helper Calc 2]) <> DATETRUNC('month', [Month - Current - First Day]) THEN
    NULL
ELSE
    [Nth Day - Helper Calc 2]
END

45. 当前日期的世纪

原字段名

Century

基准日期

2026-01-26

计算结果

2000

公式

// 截断到世纪。
INT(YEAR([基准日期])/100)*100

46. 当前日期的十年

原字段名

Decade

基准日期

2026-01-26

计算结果

2020

公式

// 截断到十年。
INT(YEAR([基准日期])/10)*10

类似文章