注意
不建議將此函式用於 視覺計算,因為它可能會傳回毫無意義的結果。
如果 input 是日期直欄,則傳回包含日期直欄的表格,該表格在時間上向前或向後移動,從目前環境定義中的日期開始指定的間隔數。
如果輸入是行事曆,則函式會根據目前內容傳回在時間上向前或向後移動指定間隔數目的日期。 輸出包括主要標記欄以及與時間相關的欄。
語法
DATEADD(<dates> or <calendar>, <number_of_intervals>, <interval>[,<Extension>],[,<Truncation>])
參數
| 術語 | 定義 |
|---|---|
dates or calendar |
包含日期或行事曆參照的資料行。 |
number_of_intervals |
整數,指定要加入或減去日期的間隔數目。 |
interval |
要轉移日期的間隔。 間隔的值可以是下列其中一項: year, quarter, , monthweekday, , . 週列舉僅在提供行事曆參照時適用。 |
extension |
僅適用於提供行事曆參考的情況。 定義當原始時段的日期少於產生時段時的行為。 有效值為:延伸(預設)、精確、結束。 |
truncation |
僅適用於提供行事曆參考的情況。 定義當原始時段的日期多於產生的時段時的行為。 有效值為:BLANKS (預設值)、ANCHORED。 |
傳回值
對於日期欄輸入,包含單欄日期值的資料表。
對於行事曆輸入,這是包含目前內容中移位期間的所有主要標記欄和時間相關欄的表格。
言論
dates 自變數可以是下列任一項:
日期/時間數據行的參考,
傳回日期/時間值單一數據行的數據表運算式,
布爾表示式,定義日期/時間值的單一數據行數據表。
注意
布林運算式的條件約束會在 主題中說明,CALCULATE 函式。
如果為
number_of_intervals指定的數位為正數,則dates中的日期會依時間向前移動;如果數位為負數,則dates中的日期會依時間移回。interval參數是列舉,而不是一組字串;因此,值不應以引號括住。 此外,使用值時,year、quarter、month、day應該完整拼字。結果數據表只包含存在於
dates資料行中的日期。如果使用日期直欄語法,且目前內容中的日期未形成連續間隔,則函數會傳回錯誤。
在匯出數據行或數據列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。
範例 - 轉移一組日期
下列公式會計算目前內容中日期前一年的日期。
= DATEADD ( DateTime[DateKey], -1, YEAR )
行事曆型時間智慧範例
下列公式會傳回從目前內容中的日期向前移動一年的日期表格。
DATEADD ( FiscalCalendar, -1, YEAR )
輸入為日期欄時的特殊行為
當選取範圍包含當月的最後兩天時, DATEADD 會使用「延伸」語意,並包含月底之前的天數。 例如,當 2013 年 2 月 27 日和 28 日包含在選取範圍中,並新增一個月時,DATEADD 會傳回 3 月 27 日至 31 日。
只有在選取範圍中包含過去兩天的月份時,才會發生此行為。 如果只選取 2 月 27 日,則會移至 3 月 27 日。
= DATEADD(DateTime[DateKey], 1, month)
基於日曆的時間智能通過兩個可選參數提供更多控制:“擴展”和“截斷”。 詳情請參閱上述參數說明。
行事曆型 DateAdd 的行為,當選取範圍比班次層級更精細時
當使用行事曆參照,且選取範圍比班次層級更細時,會採用索引型方法。 為了說明此行為,讓我們考慮選取範圍位於日期層級,且 DATEADD() 依月份移動的案例。 以下是 DateAdd 將執行的動作:
確定當月當前選擇的位置。
例如,如果目前的選取範圍跨越 3 月 3 日至 10 日,則位置是該月的 3 日至 10 日。移月套用月移 — 例如,+1 的移位會變更 3 月至 4 月。
返回移動月份的相同相對位置 檢索新月份的 3 日至 10 日(例如,4 月 3 日至 10 日)。
行事曆型 DateAdd 的參數,當選取範圍比班次層級更精細時
當選擇粒度比輪班單位更 精細 時(例如,在按月輪班時選擇單個日期),基於 索引的行為 可能會導致 歧義,尤其是在不同長度的月份之間。 為了處理這些邊緣情況,引入了兩個參數:
擴展參數(適用於小→大週期移動):
控制當目的週期比目前週期 更長 時,函數的行為。 以向前一個月為例:
Precise:嚴格保留原始日期範圍。
→Feb 25–28→March 25–28Extending:允許視窗在期 末 時擴大。
→Feb 25–28→March 25–31EndAligned:將結束日期與選擇結束時的目的週期結束對齊;否則 保持相對位置。
→Feb 28→March 31,雖然Feb 27→March 27
截斷參數(適用於大→小週期位移)
控制當目的地 月份短於 目前月份時函數的行為方式。 以倒退一個月為例:
Anchored:將結果錨定於較小期間的 最後有效日期 。
→March 31→Feb 28Blanks:當轉移的日期不存在時,傳回 空白 。
→March 31→ (空白)( 因為二月沒有第 31 天)
傳統與行事曆時間智慧之間的行為差異
在比較傳統和行事曆時間智慧時,某些案例可能會產生不同的結果。 例如,在農曆年中,SamePeriodLastYear 會在日期粒度上產生不同的結果。 在基於日曆的時間情報中,將 2008 年 2 月 29 日向後移動一年會導致 2007 年 3 月 1 日,因為它被視為一年中的第 60 天。 在經典的時間情報中,同樣的轉變在 2007 年 2 月 28 日回歸。 因應措施是使用 DATEADD(Calendar, -<number of a year>, month)。 例如,如果一年的行事曆中有 13 個月,請使用 DATEADD(Calendar, -13, month)。 這種方法將按月變化,因此 2008 年 2 月將變為 2007 年 2 月。