日期函式

日期是許多資料來源中的常見元素。如果欄位包含可識別的日期,它將具有日期或日期時間資料類型。在視覺化項中使用日期欄位時,它們將獲得一組特殊的功能,包括自動日期層次結構向下鑽取、特定於日期的過濾器選項和專門的日期格式選項。在計算中使用日期通常需要使用具體日期函數。

熟悉其他日期概念

日期函式有時會引用特定於日期的元素,包括 date_part 參數、可選 [start_of_week] 參數和日期常值 (#)。這些將在本主題的末尾更詳細地介紹。

還有其他幾個可能感興趣但不屬於日期函式的主題:

提示:您的欄位是否已被識別為日期(其資料窗格含日期圖示)?以及您是否正在嘗試控制其在視覺效果中的顯示方式?您可能需要對其設定格式而不是使用日期函數。例如,希望將 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#)
說明

與 DATEPARSE 不同,不需要提供模式,因為 DATE 會自動識別許多標準日期格式。但是,如果 DATE 無法識別輸入,請嘗試使用 DATEPARSE 並指定格式。

MAKEDATE 是另一個類似的函式,但 MAKEDATE 需要輸入年、月和日的數值。

DATEADD

將指定數量的日期部分(月、日等)添加到開始日期。

語法DATEADD(date_part, interval, date)
輸出日期
定義傳回新增 <interval> 至該日期指定 <date_part> 的 <date>。例如,將開始日期新增三個月或 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 是非常相似的計算,它將指定日期部分的值作為連續整數傳回。DATEPART 可以更快,因為它是數字運算。

透過變更計算結果的屬性(維度或度量、連續或離散)和日期格式,可以將 DATEPART 和 DATENAME 的結果格式設定為相同。

DATEPARSE 是反函數,它會接受字串值並將其格式化為日期。

DATEPARSE

將特定格式的字串作為日期傳回。

語法DATEPARSE(date_format, date_string)
輸出日期
定義<date_format> 引數會描述 <date_string> 欄位的排列方式。由於字串欄位的排序方式可以多種多樣,因此 <date_format> 必須完全符合。有關完整詮釋格式設定詳情,請參閱將欄位轉換為日期欄位(連結在新視窗開啟)。
範例
DATEPARSE('yyyy-MM-dd', "1986-03-25") = #March 25, 1986#
說明

DATE 是一個類似的函數,可以自動識別許多標準日期格式。如果 DATE 無法識別輸入模式,則 DATEPARSE 可能是更好的選擇。

MAKEDATE 是另一個類似的函式,但 MAKEDATE 需要輸入年、月和日的數值。

將日期分開並傳回其部分值的反函數是 DATEPART(整數輸出)和 DATENAME(字串輸出)。

資料庫限制

DATEPARSE 可透過以下連接器獲得:非舊版 Excel 和文字檔連線、Amazon EMR Hadoop Hive、Cloudera Hadoop、Google 試算表、Hortonworks Hadoop Hive、MapR Hadoop Hive、MySQL、Oracle、PostgreSQL 以及 Tableau 資料擷取。有些格式可能並非適用於所有連線。

Hive 變體不支援 DATEPARSE。僅支援 Denodo、Drill 和 Snowflake。

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 日期。

DATENAME 是非常相似的計算,它將指定日期部分的名稱作為離散字串傳回。DATEPART 可以更快,因為它是數字運算。透過變更欄位的屬性(維度或度量、連續或離散)和日期格式,可以將 DATEPART 和 DATENAME 的結果格式設定為相同。

DATEPARSE 是反函數,它會接受字串值並將其格式化為日期。

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# 

(包含 9/22/2018 的那個季度的第一天)

附註:如果是週和 ISO 週數,則使用 start_of_week。ISO 週數始終從星期一開始。對於此範例的地區設定,未指定 start_of_week 表示該週從星期日開始。

說明

支援 ISO 8601 日期。

您不該使用 DATETRUNC 停止在視覺效果中為日期時間欄位顯示時間。如果要截斷日期的顯示而不是捨入其準確性,請調整格式(連結在新視窗開啟)。

例如,DATETRUNC('day', #5/17/2022 3:12:48 PM#) ,如果在視覺效果中格式化為顯示秒數,將顯示為 5/17/2022 12:00:00 AM。該值被截斷為天,但顯示為秒。

DAY

以整數的形式傳回月份的天 (1-31)。

語法DAY(date)
輸出整數
定義以整數的形式傳回給定 <date> 的天。
範例
Day(#September 22, 2018#) = 22
說明另請參閱 WEEK、MONTH、季度、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#
說明

請注意:輸入錯誤的值會被調整成日期,例如 MAKEDATE(2020,4,31) = May 1, 2020,而不是傳回沒有 4 月 31 日的錯誤。

可用於 Tableau 擷取。檢查在其他資料來源中的可用性。

MAKEDATE 需要日期部分的數字輸入。如果您的資料是一個應該是日期的字串,請嘗試使用 DATE 函數。DATE 自動識別許多標準日期格式。如果 DATE 無法識別輸入,請嘗試使用 DATEPARSE。

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 為可用於 Tableau 資料擷取和其他一些資料來源的類似函數。

MAKETIME

語法MAKETIME(hour, minute, second)
輸出日期時間
定義傳回一個依據指定 <hour>、<minute> 和 <second> 構造的日期值。
範例
MAKETIME(14, 52, 40) = #1/1/1899 14:52:40#
說明

由於 Tableau 不支援時間資料類型,僅支援日期時間,因此輸出為日期時間。該欄位的日期部分將是 1/1/1899。

與 MAKEDATETIME 類似的函數,僅適用於 MYSQL 相容的連線。

MAX

語法MAX(expression) 或 MAX(expr1, expr2)
輸出與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL。
定義

傳回兩個引數(必須為相同資料類型)中的較大值。

MAX 也可以作為彙總套用於單一欄位。

範例
MAX(4,7) = 7
MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021#
MAX([Name]) = "Zander"
說明

對於字串

MAX 通常是按字母順序排在最後的值。

對於資料庫資料來源,MAX 字串值是資料庫為欄定義的排序順序中的最高值。

對於日期

對於日期,MAX 是最近的日期。如果 MAX 是彙總,結果不會有日期階層。如果 MAX 是比較,結果將保留日期階層。

作為彙總

MAX(expression) 為彙總函數,會傳回單一彙總結果。這在視覺效果中顯示為 AGG(expression)。

作為比較

MAX(expr1, expr2) 會比較兩個值,並傳回一個列層級值。

另請參閱 MIN。

MIN

語法MIN(expression) 或 MIN(expr1, expr2)
輸出與引數相同的資料類型,若引數的任何部分為 NULL,則為 NULL 。
定義

傳回兩個引數(必須為相同資料類型)的最小值。

MIN 也可以作為彙總套用於單一欄位。

範例
MIN(4,7) = 4
MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986#
MIN([Name]) = "Abebi"
說明

對於字串

MIN 通常是按字母順序排列在最前面的值。

對於資料庫資料來源,MIN 字串值是資料庫為欄定義的排序順序中的最低值。

對於日期

對於日期,MIN 是最早的日期。如果 MIN 是彙總,結果不會有日期階層。如果 MIN 是比較,結果將保留日期階層。

作為彙總

MIN(expression) 為彙總函數,會傳回單一彙總結果。這在視覺效果中顯示為 AGG(expression)。

作為比較

MIN(expr1, expr2) 會比較兩個值,並傳回一個列層級值。

另請參閱 MAX。

MONTH

語法MONTH(date)
輸出整數
定義以整數的形式傳回給定 <date> 的月份。
範例
MONTH(#1986-03-25#) = 3
說明另請參閱 DAY、WEEK、季度、YEAR,以及 ISO 等值

NOW

語法NOW()
輸出日期時間
定義傳回目前本機系統日期和時間。
範例
NOW() = 1986-03-25 1:08:21 PM
說明

NOW 沒有採用引數。

另請參閱 TODAY,這是一個類似的計算,它傳回日期而不是日期時間。

如果資料來源是即時連線,則係統日期和時間可能位於另一個時區。有關如何聯接資料的詳情,請參閱知識庫。

季度

語法QUARTER(date)
輸出整數
定義以整數的形式傳回給定 <date> 的季度。
範例
QUARTER(#1986-03-25#) = 1
說明另請參閱 DAY、WEEK、MONTH、YEAR,以及 ISO 等值

TODAY

語法TODAY()
輸出日期
定義傳回目前本機系統日期。
範例
TODAY() = 1986-03-25
說明

TODAY 沒有採用引數。

另請參閱 NOW,這是一個類似的計算,它傳回日期時間而不是日期。

如果資料來源是即時連線,則係統日期可能位於另一個時區。有關如何聯接資料的詳情,請參閱知識庫。

WEEK

語法WEEK(date)
輸出整數
定義以整數的形式傳回給定 <date> 的週。
範例
WEEK(#1986-03-25#) = 13
說明另請參閱 DAY、MONTH、季度、YEAR,以及 ISO 等值

YEAR

語法YEAR(date)
輸出整數
定義以整數的形式傳回給定 <date> 的年份。
範例
YEAR(#1986-03-25#) = 1,986
說明另請參閱 DAY、WEEK、MONTH、季度,以及 ISO 等值

date_part

Tableau 中的許多日期函數都採用引數 date_part,它是一個字串常數,告訴函數要考慮日期的哪一部分,例如日、週、季度等。可以使用的有效 date_part 值包括:

date_part值
'year'四位數年份
'quarter'1-4
'month'1-12 或「一月」、「二月」等
'dayofyear'一年中的第幾天;1 月 1 日為 1、2 月 1 日為 32,依此類推
'day'1-31
'weekday'1-7 或「週日」、「週一」等
'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 指定將哪一天視為一週的第一天,例如「星期日」或「星期一」。如果省略,一週的開始由資料來源確定。請參閱資料來源的日期屬性。

參看以下範例,9 月 22 日是星期日,9 月 24 日是星期二。DATEDIFF 函式用於計算這些日期之間的週數。

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

  • 因為 start_of_week 是「星期一」,所以這些日期在不同的週內。

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

  • 因為 start_of_week 是「星期日」,所以這些日期在同一週。

日期常值 (#)

範例通常在日期運算式中使用井號 (#)。這是日期常值,類似於對文本字串使用引號,它告訴 Tableau 符號內的值是日期。

如果沒有日期常值,日期可能會被解釋為各種其他資料類型。例如:

格式資料類型值
'March 25, 1986'字串'March 25, 1986'
#3/25/1986#Date(日期)#3/25/1986#
03/25/1986浮動小數位數0.00006042
1986-03-25整數1,958
March 25, 1986-無效

突出顯示各種日期格式圖示的資料窗格。

如需更多資訊,請參閱文字運算式語法。

建立日期計算

練習使用 Superstore 樣本資料來源建立日期計算。

  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)] ,並選取 [離散] 。

    視覺效果將更新為包含表中每一列的準確季度日期。

    按年、季、月和季日期顯示訂單日期的資料表。

感謝您的意見反應!已成功提交您的意見回饋。謝謝!