Data Analysis Expressions (DAX) 有 35 個函數,專門用於彙總和比較一段時間內的資料。 不同於 DAX 的日期和時間函數,時間智慧函數在 Excel 中並沒有類似的功能。 這是因為時間智慧函數會根據您在樞紐分析表和 Power View 視覺效果中選取的內容,處理不斷變化的資料。
為了使用時間智慧函數,您需要在資料模型中包含日期資料表。 日期資料表必須包含一欄,其中每一天都包含在資料中。 此欄會被視為 [日期] 欄 (,但) 可以任意命名。 許多時間智慧函數需要日期欄,以便根據您在報表中選取做為欄位的日期進行計算。 例如,如果您有一個度量值可使用 CLOSINGBALANCEQTR 函數來計算季末餘額,為了讓 Power Pivot 知道本季的真正結束時間,它必須參考日期資料表中的日期欄來知道該季度的開始和結束時間。 若要深入了解日期資料表,請參閱 瞭解並建立 Excel 中的 Power Pivot 日期資料表。
函數
傳回單一日期的函數
此類別中的函數會傳回單一日期。 然後,該結果可用作其他函數的引數。
此類別中的前兩個函數會傳回目前內容中Date_Column中的第一個或最後一個日期。 當您想要尋找您進行特定類型交易的第一個或最後一個日期時,這會很有用。 這些函數只接受一個引數,也就是日期資料表中日期欄的名稱。
此類別中接下來的兩個函數會尋找第一個或最後一個日期 (或任何其他欄值,以及運算式具有非空白值) 欄位值。 這最常用於庫存等情況,您想要取得最後的庫存金額,但不知道最後一個庫存何時被佔用。
- FIRSTNONBLANK (Date_Column,運算式)
- LASTNONBLANK (Date_Column,運算式)
另外六個傳回單一日期的函數,是那些在計算的目前內容中,傳回一個月、一季或一年的第一個或最後一個日期的函數。
- STARTOFMONTH (Date_Column)
- STARTOFQUARTER (Date_Column)
- STARTOFYEAR (Date_Column [,YE_Date])
- ENDOFMONTH (Date_Column)
- 季末 (Date_Column)
- 年終 (Date_Column [,YE_Date])
傳回日期表的函數
有 16 個時間智慧函數會傳回日期表。 大多數情況下,這些函數會用作 CALCULATE 函數的 SetFilter 引數。 就像 DAX 中的所有時間智慧函數一樣,每個函數都採用日期欄作為其引數之一。
此類別中的前八個函數以目前內容中的日期欄開頭。 例如,如果在樞紐分析表中使用量值,則欄標籤或列標籤上可能有月份或年份。 最終效果是日期欄經過篩選,只包含目前內容的日期。 接著,這八個函數會從目前的內容開始計算前 (或下) 的天、月、季或年,並以單一資料行表格的形式傳回這些日期。 「上一個」函數會從目前內容中的第一個日期向後工作,而「下一個」函數則會從目前內容中的最後一個日期向前移動。
- 上一天 (Date_Column)
- PREVIOUSMONTH (Date_Column)
- 上一頁 季 (Date_Column)
- 上一頁年 (Date_Column [,YE_Date])
- 隔天 (Date_Column)
- 下個月 (Date_Column)
- 下一季 (Date_Column)
- 明年 (Date_Column [,YE_Date])
此類別中接下來的四個函數類似,但不是計算前一個 (或下一個) 期間,而是計算「本月迄今」期間中的日期集, (、本季至今、年初至今,或前一年同期的日期集) 。 這些函數都會使用目前內容中的最後一個日期來執行計算。 請注意,SAMEPERIODLASTYEAR 要求目前內容包含一組連續的日期。 如果目前內容不是一組連續的日期,則 SAMEPERIODLASTYEAR 會傳回錯誤。
- DATESMTD (Date_Column)
- DATESQTD (Date_Column)
- DATESYTD (Date_Column [,YE_Date])
- SAMEPERIODLASTYEAR (Date_Column)
此類別中的最後四個功能更複雜,也更強大一些。 這些函數可用來從目前內容中的日期集切換至一組新的日期。
- DATEADD (Date_Column、Number_of_Intervals、Interval)
- datebetween (Date_Column, Start_Date, End_Date)
- DATESINPERIOD (Date_Column, Start_Date, Number_of_Intervals, Interval)
- PARALLELPERIOD (Date_Column、Number_of_Intervals、Interval)
DATESBETWEEN 會計算指定的開始日期和結束日期之間的日期集。 其餘三個函數會從目前內容移動一定數量的時間間隔。 間隔可以是日、月、季或年。 這些函數可讓您透過下列任一方式輕鬆地移動計算的時間間隔:
- 返回兩年前
- 返回一個月前
- 向前移動三季
- 返回 14 天前
- 快轉 28 天
在每種情況下,您只需要指定要移位的間隔,以及要移位的間隔數量。 正間隔將在時間上向前移動,而負間隔將在時間上向後移動。 間隔本身是由 DAY、MONTH、QUARTER 或 YEAR 的關鍵字所指定。 這些關鍵字不是字串,因此不應置於引號中。
在一段時間內評估運算式的函數
此類別的函數會評估在指定時段內的運算式。 您可以使用 CALCULATE 和其他時間智慧函數來完成相同的工作。 例如,
= TOTALMTD (運算式, Date_Column [, SetFilter])
與:
= CALCULATE (運算式, DATESMTD (Date_Column) [, SetFilter])
但是,當這些時間智慧函數非常適合需要解決的問題時,使用它們會更容易:
- TOTALMTD (運算式,Date_Column [, SetFilter])
- TOTALQTD (運算式,Date_Column [, SetFilter])
- TOTALYTD (運算式, Date_Column [, SetFilter] [,YE_Date]) *
此類別中還有一組計算期初和期末餘額的函數。 對於這些特定函數,您應該瞭解某些概念。 首先,正如您可能認為顯而易見的那樣,任何期間的期初餘額都與前一個期間的期末餘額相同。 期末餘額包括截至期末的所有數據,而期初餘額不包括本期內的任何數據。
這些函數一律會傳回針對特定時間點評估的運算式值。 我們關心的時間點一律是行事曆週期中最後一個可能的日期值。 期初餘額基於上一期的最後一天,而期末餘額基於當前期的最後一天。 目前期間一律由目前日期內容中的最後一個日期決定。
- OPENINGBALANCEMONTH (運算式,Date_Column [,SetFilter])
- OPENINGBALANCEQUARTER Quarter (運算式,Date_Column [,SetFilter])
- OPENINGBALANCEYEAR (運算式,Date_Column [,SetFilter] [,YE_Date])
- CLOSINGBALANCEMONTH (運算式,Date_Column [,SetFilter])
- CLOSINGBALANCEQUARTER (運算式,Date_Column [,SetFilter])
- CLOSINGBALANCEYEAR (運算式,Date_Column [,SetFilter] [,YE_Date])
其他資源
文章: 瞭解並建立 Excel 中的 Power Pivot 日期資料表
參考:Office.com 上的 DAX 函數參考