内容:

日期函数

  • 版本 :2022.1 及更高版本

适用于: Tableau Desktop, Tableau Online, Tableau Public, Tableau Server

本文介绍 Tableau 中的日期函数及其用途。它还演示如何使用示例创建日期计算。

创建日期计算

按照下面的步骤进行操作以了解如何创建日期计算。

  1. 在 Tableau Desktop 中,连接到 Tableau 附带的“Sample - Superstore”已保存数据源。

  2. 导航到工作表。

  3. 从“数据”窗格中的“维度”下,将“Order Date”(订单日期)拖到“行”功能区。

  4. 在“”功能区上,单击“YEAR(Order Date)”字段上的加号图标 (+)。

    “QUARTER(Order Date)”将添加到“行”功能区,并且视图将更新。

  5. “行”功能区上,单击“QUARTER(Order Date)”字段上的加号图标 (+),以下钻到“MONTH(Order Date)”。

  6. 选择“分析”>“创建计算字段”

  7. 在打开的计算编辑器中,执行以下操作:

    • 将计算字段命名为“Quarter Date”(季度日期)。

    • 输入以下公式:

      DATETRUNC('quarter', [Order Date])

    • 完成后,单击“确定”

      新的日期计算将出现在“数据”窗格中的“维度”下。就像其他字段一样,您可以在一个或多个可视化项中使用该字段。

  8. 从“数据”窗格中的“维度”下,将“Quarter Date”(季度日期)拖到“行”功能区,并将其放在“MONTH(Order Date)”右侧。

    可视化项将更新为包含年份值。这是因为 Tableau 将日期数据累积到最高详细级别。

  9. 在“行”功能区上,右键单击“YEAR(Quarter Date)”,并选择“精确日期”

  10. 在“行”功能区上,再次右键单击“YEAR(Quarter Date)”,并选择“离散”

    可视化项将更新为包含表中每一行的准确季度日期。

为何使用日期函数

日期函数允许您对数据源中的日期进行操作。

例如,您可能有一个各个值为年、月、日的日期字段 (2004-04-15)。您可以使用日期函数(例如 DATETRUNC 函数)依据这些现有值创建新的日期值。例如,您可以查找任何现有日期值的季度开始日期。

日期计算可能如下所示:

DATETRUNC('quarter', [Order Date])

因此,如果原始日期为“3/27/2011”,则使用上面的计算会返回“1/1/2011”,指明 1 季度的开始日期为 1 月 1 日。如果原始日期为“5/3/2011”,则计算将返回“4/1/2011”,指明 2 季度的开始日期为 4 月 1 日(一年过去四个月)。

有关示例,请参见下面的创建日期计算部分。

公历与 ISO 8601 标准

如果使用 .hyper 数据提取,则可以使用传统的公历或 ISO 8601 标准计算日期函数。有关创建 .hyper 数据提取的详细信息,请参见数据提取升级为 .hyper 格式(链接在新窗口中打开)

ISO 8601 格式是一种用于计算日期和时间的国际标准,它在一年的起始周(第 1 周)的计算方式上与公历不同。在公历中,用户可以定义一周从哪一天开始。在 ISO 8601 标准中,一周始终从星期一开始。

在公历中,在新的一年开始时,该年的第 1 周计为在 1 月 1 日开始,而不管 1 月 1 日是一周中的哪一天。如果 1 月 1 日为星期六,则第 1 周将有一天在该周,并且第 2 周将在下一个星期日开始。

在 ISO 8601 格式中,新年的第 1 周在星期一开始,并且该周在 1 月份有四天以上。举例来说,如果 1 月 1 日为星期六,则第 1 周将不会开始,而是直到下一个星期一(1 月 3 日)才开始。通过这种方式计算日期可确保新年的第 1 周有一致的天数。

有关使用 ISO 8601 日期的详细信息,请参见ISO-8601 基于周的日历(链接在新窗口中打开)

Tableau 中的可用日期函数

函数

语法

描述

DATEADD

DATEADD(date_part, interval, date)

返回指定日期,该日期的指定 date_part 中添加了指定的数字 interval

支持 ISO 8601 日期。

示例:

DATEADD('month', 3, #2004-04-15#) = 2004-07-15 12:00:00 AM

该表达式会向日期 #2004-04-15# 添加三个月。

DATEDIFF

DATEDIFF(date_part, date1, date2, [start_of_week])

返回 date1date2 之差(以 date_part 的单位表示)。

start_of_week 参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为“monday”、“tuesday”等。如果省略,一周的开始由数据源确定。请参见数据源的日期属性

支持 ISO 8601 日期。

示例:

DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'monday')= 1
DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'sunday')= 0

第一个表达式返回 1,因为当 start_of_week 为 'monday' 时,9 月 22(星期日)和 9 月 24(星期二)不属于同一周。第一个表达式返回 0,因为当 start_of_week 为 'sunday' 时,9 月 22(星期日)和 9 月 24(星期二)属于同一周。

DATENAME

DATENAME(date_part, date, [start_of_week])

以字符串的形式返回 datedate_partstart_of_week 参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为“monday”、“tuesday”等。如果忽略 start_of_week,则一周的开始由数据源确定。请参见数据源的日期属性

支持 ISO 8601 日期。

示例:

DATENAME('year', #2004-04-15#) = "2004"
DATENAME('month', #2004-04-15#) = "April"

DATEPARSEDATEPARSE(date_format, [date_string])

返回 [date_string] 作为日期。 date_format 参数将描述 [字符串] 字段的排列方式。由于可通过各种方式对字符串字段进行排序,因此 date_format 必须完全匹配。有关完整解释,请参见将字段转换为日期字段

示例:

DATEPARSE('yyyy-MM-dd', #2004-04-15#) = "April 4, 2004"

注意:此函数可通过以下连接器获得:非旧版 Excel 和文本文件连接、Amazon EMR Hadoop Hive、Cloudera Hadoop、Google Sheets、Hortonworks Hadoop Hive、MapR Hadoop Hive、MySQL、Oracle、PostgreSQL 以及 Tableau 数据提取。有些格式可能并非适用于所有连接。

注意:Hive 变体不支持 DATEPARSE。仅支持 Denodo、Drill 和 Snowflake。

DATEPART

DATEPART(date_part, date, [start_of_week])

以整数的形式返回 datedate_part

start_of_week 参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为“monday”、“tuesday”等。如果忽略 start_of_week,则一周的开始由数据源确定。请参见数据源的日期属性

注意:date_part 为工作日时,会忽略 start_of_week 参数。这是因为 Tableau 依赖固定工作日顺序来应用偏移。

支持 ISO 8601 日期。

示例:

DATEPART('year', #2004-04-15#) = 2004
DATEPART('month', #2004-04-15#) = 4

DATETRUNC

DATETRUNC(date_part, date, [start_of_week])

按 date_part 指定的准确度截断指定日期。此函数返回新日期。例如,以月份级别截断处于月份中间的日期时,此函数返回当月的第一天。start_of_week 参数(可用于指定哪一天是一周的第一天)是可选的。可能的值为“monday”、“tuesday”等。如果忽略 start_of_week,则一周的开始由数据源确定。请参见数据源的日期属性

支持 ISO 8601 日期。

示例:

DATETRUNC('quarter', #2004-08-15#) = 2004-07-01 12:00:00 AM
DATETRUNC('month', #2004-04-15#) = 2004-04-01 12:00:00 AM

DAY

DAY(date)

以整数的形式返回给定日期的天。

示例:

DAY(#2004-04-12#) = 12

ISDATE

ISDATE(string)

如果给定字符串为有效日期,则返回 true。

示例:

ISDATE("April 15, 2004") = true

MAKEDATE

MAKEDATE(year, month, day)

返回一个依据指定年份、月份和日期构造的日期值。

可用于 Tableau 数据提取。检查在其他数据源中的可用性。

示例:

MAKEDATE(2004, 4, 15) = #April 15, 2004#

MAKEDATETIME

MAKEDATETIME(date, time)

返回合并了 date 和 time 的 datetime。日期可以是 date、datetime 或 string 类型。时间必须是 datetime。

注意:此函数仅适用于与 MySQL 兼容的连接(对于 Tableau 为 MySQL 和 Amazon Aurora)。

示例:

MAKEDATETIME("1899-12-30", #07:59:00#) = #12/30/1899 7:59:00 AM#
MAKEDATETIME([Date], [Time]) = #1/1/2001 6:00:00 AM#

MAKETIME

MAKETIME(hour, minute, second)

返回一个依据指定小时、分钟和秒构造的日期值。

可用于 Tableau 数据提取。检查在其他数据源中的可用性。

示例:

MAKETIME(14, 52, 40) = #14:52:40#

MAX

MAX(expression) or MAX(expr1, expr2)

通常应用于数字,不过也适用于日期。返回 ab 中的较大值(ab 必须为相同类型)。如果任一参数为 Null,则返回 Null

示例:

MAX(#2004-01-01# ,#2004-03-01#) = 2004-03-01 12:00:00 AM
MAX([ShipDate1], [ShipDate2])

MIN

MIN(expression) or MIN(expr1, expr2)

通常应用于数字,不过也适用于日期。返回 ab 中的较小值(ab 必须为相同类型)。如果任一参数为 Null,则返回 Null

示例:

MIN(#2004-01-01# ,#2004-03-01#) = 2004-01-01 12:00:00 AM
MIN([ShipDate1], [ShipDate2])

MONTH

MONTH(date)

以整数的形式返回给定日期的月份。

示例:

MONTH(#2004-04-15#) = 4

NOW

NOW( )

返回当前本地系统日期和时间。

示例:

NOW( ) = 2004-04-15 1:08:21 PM

QUARTERQUARTER ( )

以整数的形式返回给定日期的季度。

示例:

WEEK (#2004-04-15#) = 16

TODAY

TODAY( )

返回当前日期。

示例:

TODAY( ) = 2004-04-15

WEEKWEEK( )

以整数的形式返回给定日期的周。

示例:

WEEK (#2004-04-15#) = 16

YEAR

YEAR (date)

以整数的形式返回给定日期的年份。

示例:

YEAR(#2004-04-15#) = 2004

ISOQUARTERISOQUARTER (date)

以整数的形式返回给定日期的基于 ISO8601 周的季度。

示例:

ISOQUARTER (#2005-03-29#) = 2

ISOWEEKISOWEEK (date)

以整数的形式返回给定日期基于 ISO8601 周的周。

示例:

ISOWEEK (#2004-03-29#) = 14

ISOWEEKDAYISOWEEKDAY (date)

以整数的形式返回给定日期基于 ISO8601 周的平日。

示例:

ISOWEEKDAY (#2004-03-29#) = 1

ISOYEARISOYEAR (date)

以整数的形式返回给定日期的基于 ISO8601 周的年。

示例:

ISOYEAR (#2003-12-29#) = 2004


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,每周始终从星期一开始

有关设置日期函数格式的详细信息,请参见总览:计算语法(链接在新窗口中打开)表“文本表达式”部分。

注意:日期函数不考虑配置的会计年度开始。有关详细信息,请参见会计日期

注意 date_part 返回整数。 以下值是 date_part 接受的输入以及该输入的格式。