在这份日期计算速查指南中,列举了与年、季度、月、周、天等不同级别进行比较的数十个场景和计算示例。
前不久,我们应数据粉需求举办了一场 Tableau 计算主题的线上分享,不仅介绍了基础计算、表计算与详细级别(LOD)表达式的计算逻辑,还通过实操演示,分享如何利用 Tableau 日期函数和参数功能实现同比、环比、YTD、MTD 等时间计算用例。
但实际上,业务分析需求可能非常复杂。就日期计算而言,围绕某一个日期值或时间粒度进行比较的计算就涉及数十种。因此,我们不妨来探索一下由资深用户 Luke Stanke 整理并分享到 Tableau Public 的工作簿——Date Calculations Cheat Sheet。
如果你是 Tableau 用户,希望快速轻松地进行日期计算,那么这份指南一定会让你爱不释手!话不多说,让我们马上开始探索吧~
TIPS:如何使用日期计算速查指南?
在这份日期计算速查指南中,Luke 基于数据集中的“最新日期”,列举了与年、季度、月、周、天等不同级别进行比较的场景和计算示例。你只需输入业务数据源中的日期字段名,并选择所需的日期计算类型,随即工作簿将更新表达式,以便你复制和使用。
如果仅参考计算示例的函数与结构,可依照以下逻辑在业务数据中对日期字段进行比较:
01 创建返回布尔值(True/False)的计算。将日期字段放在等式左侧,将比较值放在等式右侧。比如,返回今天的日期:[Date] = TODAY()
02 基于布尔值获取度量。在 IF 语句中使用上一步创建的布尔值计算,然后在 THEN 语句中指定返回的行级别度量。如有需要,可对计算结果进行聚合。比如,返回今天的某项指标值:SUM( IF [今天的日期] THEN [指标] END )
03 将度量与其他字段进行比较。这一步需确保所有字段都是聚合的。比如,比较某项指标今天与昨天的表现:[今天的指标] - [昨天的指标]。
此外,为了验证示例数据集中计算结果的准确性,工作簿右下角还提供了可观察结果范围的日历热图可视化,以便你确认计算效果是否是想要的。
日期计算示例:年度比较
为了更好进行比较,Luke 将最新日期 [Date | Max] 作为基准字段,{MAX([Date])} 表达式用于返回数据集中最近或最新的日期值。
以示例中的 [Date] 字段为例,数据范围为 2022 年 1 月 1 日至 2024 年 9 月 25 日。因此,从日历热图中可以看到 2024 年 9 月 25 日的标记被高亮显示,这意味着计算结果准确。
Y1:YTD or Current Year 年初至今或当前年份
计算字段 [CY] 表达式:
DATETRUNC(‘year’, [Date]) = DATETRUNC(‘year’, [Date | Max])
对于在当前年份内且最新日期之前的数据,返回 TRUE。当数据集中包含每一天的数据时使用效果最好。如果数据中存在空值或是实时数据,请将 [Date | Max] 替换为 TODAY()。
从日历热图中,数据整体范围是 2022 年 1 月到 2024 年 9 月。此计算的结果显示 2024 年的每个月都被高亮,表明在这一年的日期中,数据集中有相关的记录。如果你手动更改日历热图上方的日期控件,那么热图的高亮标记数量也会随之变化。
Y2:Prior Year 前一年
计算字段 [PY] 表达式:YEAR([Date]) = YEAR([Date | Max]) - 1
根据数据集中的最新日期,返回前一年的日期数据,则为 TRUE。当数据集中包含每一天的数据时使用效果最好。如果数据中存在空值或是实时数据,请将 [Date | Max] 替换为 TODAY()
如果想在最新年份的第一天,返回前一年的日期数据,则表达式如下:DATEPART(“year”, [Date]) = DATEPART(“year”, [Date | Max]) -1
在日历热图中,如果日期值为 2024 年 9 月 25 日,则前一年的日期都是被高亮。
Y3:Prior Year to Date 去年年初至某天前
计算字段 [PYTD] 表达式:
(YEAR([Date]) = YEAR([Date | Max]) - 1) AND [Date] <= DATEADD(‘year’, -1, [Date | Max])
如果返回前一年年初至某天前(不包含)的日期数据,则为 TRUE。当你试图比较某些年中的精确日期时,这个示例最有用。
在日历热图中,如果设定的日期值为 2024 年 9 月 23 日,所以在 2023 年 1 月 1 日到 9 月 22 日的数据都是被高亮的。
Y4:Prior Year to Day 去年年初至最新日期
计算字段 [PYTDay] 表达式:
(YEAR([Date]) = YEAR([Date | Max]) - 1) AND DATEPART(‘dayofyear’, [Date]) <= DATEPART(‘dayofyear’, [Date | Max])
如果返回前一年年初至最新日期(包含)的日期数据,为 TRUE。这个示例适用于比较一年中的天数(第几天),在闰年或使用 ISO8601 日期格式时,将返回不同的相对日期。