日期函数
日期是许多数据源中的常见元素。如果字段包含可识别的日期,它将具有日期或日期时间数据类型。在可视化项中使用日期字段时,它们会获得一组特殊的功能,包括自动的日期层次钻取、特定于日期的筛选器选项和专门的日期格式化选项。在计算中使用日期通常需要使用特定于日期的函数。
熟悉其他日期概念
日期函数有时引用特定于日期的元素,包括 date_part
参数、可选的l [start_of_week]
参数和日期文本 (#)。这些元素将在本主题的末尾详细介绍。
还有其他几个可能感兴趣但不属于日期函数的主题:
- 格式化日期在可视化项中的显示方式:自定义日期格式
- 设置默认日期属性:数据源的日期属性
- 使用会计日期:会计日期
- 使用 SO-8601 历:ISO-8601 基于周的日历
提示:您的字段是否已被识别为日期(它在“数据”窗格中有日期图标)并且您正在尝试控制它在可视化项中的显示方式?您可能需要对其进行格式化,而不是使用日期函数。例如,您希望将 22Sept2024 显示为 09/24。这是通过设置日期格式而不是计算来处理的。
请参见自定义日期格式和相关主题以了解如何使用日期字段。此页面上的日期函数允许您操作日期计算字段,而不是设置其显示格式。
Tableau 中的可用日期函数
DATE
将字符串和数字表达式转换为日期的类型转换函数,只要它们是可识别的格式。
语法 | DATE(expression) |
输出 | 日期 |
定义 | 在给定数字、字符串或日期 <expression> 的情况下返回日期。 |
示例 | DATE([Employee Start Date]) DATE("September 22, 2018") DATE("9/22/2018") DATE(#2018-09-22 14:52#) |
说明 | 与
|
DATEADD
将指定数量的日期部分(月、日等)添加到开始日期。
语法 | DATEADD(date_part, interval, date) |
输出 | 日期 |
定义 | 返回 <date> ,该日期的指定 <date_part> 中添加了指定的数字 <interval> 。例如,将开始日期增加 3 个月或 12 天。 |
示例 | 将所有的到期日推迟一周 DATEADD('week', 1, [due date]) 将 2021 年 2 月 20 日加上 280 天 DATEADD('day', 280, #2/20/21#) = #November 27, 2021# |
说明 | 支持 ISO 8601 日期。 |
DATEDIFF
返回两个日期之间的日期部分(周、年等)的数量。
语法 | DATEDIFF(date_part, date1, date2, [start_of_week]) |
输出 | 整数 |
定义 | 返回 <date1> 与 <date2> 之差(以 <date_part> 的单位表示)。例如,减去某人加入和离开乐队的日期,就可以知道他们在乐队里呆了多久。 |
示例 | 1986 年 3 月 25 日到 2021 年 2 月 20 日之间的天数 DATEDIFF('day', #3/25/1986#, #2/20/2021#) = 12,751 一个人在乐队里呆了几个月 DATEDIFF('month', [date joined band], [date left band]) |
说明 | 支持 ISO 8601 日期。 |
DATENAME
以离散字符串形式返回指定日期部分的名称。
语法 | DATENAME(date_part, date, [start_of_week]) |
输出 | 字符串 |
定义 | 以字符串的形式返回 <date> 的 <date_part> 。 |
示例 | DATENAME('year', #3/25/1986#) = "1986" DATENAME('month', #1986-03-25#) = "March" |
说明 | 支持 ISO 8601 日期。 一个非常类似的计算是 DATEPART,它以连续整数的形式返回指定日期部分的值。 通过更改计算结果的属性(维度或度量、连续或离散)和日期格式,可以将 反函数是 DATEPARSE,它接受一个字符串值并将其格式化为日期。 |
DATEPARSE
以日期形式返回特定格式的字符串。
语法 | DATEPARSE(date_format, date_string) |
输出 | 日期 |
定义 | <date_format> 参数将描述 <date_string> 字段的排列方式。由于可通过各种方式对字符串字段进行排序,因此 <date_format> 必须完全匹配。有关完整解释和格式设置详细信息,请参见将字段转换为日期字段(链接在新窗口中打开)。 |
示例 | DATEPARSE('yyyy-MM-dd', "1986-03-25") = #March 25, 1986# |
说明 |
|
数据库限制 |
Hive 变体不支持 |
DATEPART
以整数形式返回指定日期部分的名称。
语法 | DATEPART(date_part, date, [start_of_week]) |
输出 | 整数 |
定义 | 以整数的形式返回 <date> 的 <date_part> 。 |
示例 | DATEPART('year', #1986-03-25#) = 1986 DATEPART('month', #1986-03-25#) = 3 |
说明 | 支持 ISO 8601 日期。 一个非常类似的计算是 反函数是 |
DATETRUNC
可以将此函数视为日期舍入。它获取特定的日期,并返回该日期在所需的特定程度上的版本。由于每个日期都必须有日、月、季度和年的值,因此 DATETRUNC
将这些值设置为指定日期部分之前每个日期部分的最小值。有关详细信息,请参考见示例。
语法 | DATETRUNC(date_part, date, [start_of_week]) |
输出 | 日期 |
定义 | 按 <date_part> 指定的准确度截断 <date> 。此函数返回新日期。例如,以月份级别截断处于月份中间的日期时,此函数返回当月的第一天。 |
示例 | DATETRUNC('day', #9/22/2018#) = #9/22/2018# DATETRUNC('iso-week', #9/22/2018#) = #9/17/2018# (包含 2018 年 9 月 22 日的一周中的星期一) DATETRUNC(quarter, #9/22/2018#) = #7/1/2018# (包含 2018 年 9 月 22 日的季度的第一天) 注意:对于周和 iso 周, |
说明 | 支持 ISO 8601 日期。 例如,您不应使用 举例来说,如果在可视化项中格式为显示秒, |
DAY
以整数形式返回一个月中的第几天 (1-31)。
语法 | DAY(date) |
输出 | 整数 |
定义 | 以整数的形式返回给定 <date> 的天。 |
示例 | Day(#September 22, 2018#) = 22 |
说明 | 另请参见 WEEK 、MONTH 、QUARTER 、YEAR 以及 ISO 等效值。 |
ISDATE
检查字符串是否为有效的日期格式。
语法 | ISDATE(string) |
输出 | 布尔值 |
定义 | 如果给定 <string> 为有效日期,则返回 true。 |
示例 | ISDATE(09/22/2018) = true ISDATE(22SEP18) = false |
说明 | 所需的参数必须是字符串。ISDATE 不能用于日期数据类型的字段,计算将返回错误。 |
ISOQUARTER
语法 | ISOQUARTER(date) |
输出 | 整数 |
定义 | 以整数的形式返回给定 <date> 的基于 ISO8601 周的季度。 |
示例 | ISOQUARTER(#1986-03-25#) = 1 |
说明 | 另请参见 ISOWEEK 、ISOWEEKDAY 、ISOYEAR , 以及 -ISO 等效值。 |
ISOWEEK
语法 | ISOWEEK(date) |
输出 | 整数 |
定义 | 以整数的形式返回给定 <date> 基于 ISO8601 周的周。 |
示例 | ISOWEEK(#1986-03-25#) = 13 |
说明 | 另请参见 ISOWEEKDAY 、ISOQUARTER 、ISOYEAR , 以及 -ISO 等效值。 |
ISOWEEKDAY
语法 | ISOWEEKDAY(date) |
输出 | 整数 |
定义 | 以整数的形式返回给定 <date> 的基于 ISO8601 周的工作日。 |
示例 | ISOWEEKDAY(#1986-03-25#) = 2 |
说明 | 另请参见 ISOWEEK 、ISOQUARTER 、ISOYEAR , 以及 -ISO 等效值。 |
ISOYEAR
语法 | ISOYEAR(date) |
输出 | 整数 |
定义 | 以整数的形式返回给定 <date> 的基于 ISO8601 年份的工作日。 |
示例 | ISOYEAR(#1986-03-25#) = 1,986 |
说明 | 另请参见 ISOWEEK 、ISOWEEKDAY 、ISOQUARTER , 以及 -ISO 等效值。 |
MAKEDATE
语法 | MAKEDATE(year, month, day) |
输出 | 日期 |
定义 | 返回一个依据指定 <year> 、<month> 和 <day> 构造的日期值。 |
示例 | MAKEDATE(1986,3,25) = #1986-03-25# |
说明 | 注意,输入错误的值将被调整为一个日期,例如 可用于 Tableau 数据提取。检查在其他数据源中的可用性。
|
MAKEDATETIME
语法 | MAKEDATETIME(date, time) |
输出 | 日期时间 |
定义 | 返回合并了 <date> 和 <time> 的日期时间。日期可以是 date、datetime 或 string 类型。时间必须是 datetime。 |
示例 | MAKEDATETIME("1899-12-30", #07:59:00#) = #12/30/1899 7:59:00 AM# MAKEDATETIME([Date], [Time]) = #1/1/2001 6:00:00 AM# |
说明 | 此函数仅适用于与 MySQL 兼容的连接(对于 Tableau 为 MySQL 和 Amazon Aurora)。
|
MAKETIME
语法 | MAKETIME(hour, minute, second) |
输出 | 日期时间 |
定义 | 返回一个依据指定 <hour> 、<minute> 和 <second> 构造的日期值。 |
示例 | MAKETIME(14, 52, 40) = #1/1/1899 14:52:40# |
说明 | 由于 Tableau 不支持时间数据类型,只支持日期时间,因此输出是日期时间。字段的日期部分将是 1/1/1899。 类似于 |
MAX
语法 | MAX(expression) 或 MAX(expr1, expr2) |
输出 | 与参数相同的数据类型,或者,如果参数的任何部分为 null,则为 NULL 。 |
定义 | 返回两个参数(必须为相同数据类型)中的最大值。
|
示例 | MAX(4,7) = 7 |
说明 | 对于字符串
对于数据库数据源, 对于日期 对于日期, 作为聚合
作为比较
另请参见 |
MIN
语法 | MIN(expression) 或 MIN(expr1, expr2) |
输出 | 与参数相同的数据类型,或者,如果参数的任何部分为 null,则为 NULL 。 |
定义 | 返回两个参数(必须为相同数据类型)中的最小值。
|
示例 | MIN(4,7) = 4 |
说明 | 对于字符串
对于数据库数据源, 对于日期 对于日期, 作为聚合
作为比较
另请参见 |
MONTH
语法 | MONTH(date) |
输出 | 整数 |
定义 | 以整数形式返回给定 <date> 的月份。 |
示例 | MONTH(#1986-03-25#) = 3 |
说明 | 另请参见 DAY 、WEEK 、QUARTER 、YEAR 以及 ISO 等效值 |
NOW
语法 | NOW() |
输出 | 日期时间 |
定义 | 返回当前本地系统日期和时间。 |
示例 | NOW() = 1986-03-25 1:08:21 PM |
说明 |
另请参见返回日期而不是日期时间的类似计算 如果数据源是实时连接,则系统日期和时间可能位于另一个时区。有关如何解决此问题的详细信息,请参见知识库。 |
QUARTER
语法 | QUARTER(date) |
输出 | 整数 |
定义 | 以整数形式返回给定 <date> 的季度。 |
示例 | QUARTER(#1986-03-25#) = 1 |
说明 | 另请参见 DAY 、WEEK 、MONTH 、YEAR 以及 ISO 等效值 |
TODAY
语法 | TODAY() |
输出 | 日期 |
定义 | 返回当前本地系统日期。 |
示例 | TODAY() = 1986-03-25 |
说明 |
另请参见返回日期时间而不是日期的类似计算 NOW。 如果数据源是实时连接,则系统日期可能位于另一个时区。有关如何解决此问题的详细信息,请参见知识库。 |
WEEK
语法 | WEEK(date) |
输出 | 整数 |
定义 | 以整数形式返回给定 <date> 的周。 |
示例 | WEEK(#1986-03-25#) = 13 |
说明 | 另请参见 DAY 、MONTH 、QUARTER 、YEAR 以及 ISO 等效值 |
YEAR
语法 | YEAR(date) |
输出 | 整数 |
定义 | 以整数形式返回给定 <date> 的年份。 |
示例 | YEAR(#1986-03-25#) = 1,986 |
说明 | 另请参见 DAY 、WEEK 、MONTH 、QUARTER 以及 ISO 等效值 |
date_part
Tableau 中的许多日期函数都采用参数 date_part
,这是一个字符串常量,它告诉函数要考虑日期的哪一部分,例如日、周、季度等。您可以使用的有效 date_part
值包括:
date_part | 值 |
---|---|
'year' | 四位数年份 |
'quarter' | 1-4 |
'month' | 1-12 或 "January"、"February" 等 |
'dayofyear' | 一年中的第几天;1 月 1 日为 1、2 月 1 日为 32,依此类推 |
'day' | 1-31 |
'weekday' | 1-7 或 "Sunday"、"Monday" 等 |
'week' | 1-52 |
'hour' | 0-23 |
'minute' | 0-59 |
'second' | 0-60 |
'iso-year' | 4 位数 ISO 8601 年份 |
'iso-quarter' | 1-4 |
'iso-week' | 1-52,每周始终从星期一开始 |
'iso-weekday' | 1-7,每周始终从星期一开始 |
[start_of_week]
参数
某些函数有可选参数 [start_of_week]
。start_of_week
参数可用于指定哪一天被视为一周的第一天,例如“Sunday”或“Monday”。如果省略它,则一周的开始由数据源确定。请参见数据源的日期属性。
在下面的例子中,9 月 22 日是星期日,9 月 24 日是星期二。DATEDIFF 函数用于计算这些日期之间的周数。
DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'monday') = 1
- 由于 start_of_week 为“monday”(星期一),因此这些日期在不同的周中。
DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'sunday') = 0
- 由于 start_of_week 为“sunday”(星期日),因此这些日期在同一周内。
日期文本 (#)
示例通常在日期表达式中使用井号 (#)。这是日期文本,类似于对文本字符串使用引号,它告诉 Tableau 符号内的值是日期。
如果没有日期文本,日期可能会被解释为各种其他数据类型。例如:
格式 | 数据类型 | 值 |
'March 25, 1986' | 字符串 | 'March 25, 1986' |
#3/25/1986# | 日期 | #3/25/1986# |
03/25/1986 | 浮点小数 | 0.00006042 |
1986-03-25 | 整数 | 1,958 |
03/25/1986 | 无效 |
有关详细信息,请参见文本表达式语法。
创建日期计算
练习使用 Superstore 示例数据源创建日期计算。
- 在 Tableau Desktop 中,连接到 Tableau 附带的“Sample - Superstore”已保存数据源。
- 打开一个工作表。
- 从“数据”窗格中的“维度”下,将“Order Date”(订单日期)拖到“行”功能区。
- 在“行”功能区上,单击“YEAR(Order Date)”字段上的加号图标 (+)。
“QUARTER(Order Date)”将添加到“行”功能区,并且视图将更新。
- 在“行”功能区上,单击“QUARTER(Order Date)”字段上的加号图标 (+),以下钻到“MONTH(Order Date)”。
- 选择“分析”>“创建计算字段”。
- 在打开的计算编辑器中,执行以下操作:
- 将计算字段命名为“Quarter Date”(季度日期)。
- 输入以下公式:
DATETRUNC('quarter', [Order Date])
- 完成后,单击“确定”。
新的日期计算将出现在“数据”窗格中的“维度”下。就像其他字段一样,您可以在一个或多个可视化项中使用该字段。
- 从“数据”窗格中的“维度”下,将“Quarter Date”(季度日期)拖到“行”功能区,并将其放在“MONTH(Order Date)”右侧。可视化项将更新为包含年份值。这是因为 Tableau 将日期数据累积到最高详细级别。
- 在“行”功能区上,右键单击“YEAR(Quarter Date)”,并选择“精确日期”。
- 在“行”功能区上,再次右键单击“YEAR(Quarter Date)”,并选择“离散”。
可视化项将更新为包含表中每一行的准确季度日期。