DAX (資料分析表達式) 包含 35 個專門用於資料彙整與比較的函式。 與 DAX 的日期和時間函數不同,時間智慧函數在 Excel 中其實沒有類似的功能。 這是因為時間智慧功能處理的資料會根據你在樞紐分析表和 Power View 視覺化中選擇的上下文不斷變化。
為了使用時間智慧函數,你需要在資料模型中包含一個日期表。 日期表必須包含一欄,每一行代表你資料中每年的每一天。 這欄被視為日期欄 (雖然你可以隨意命名) 。 許多時間情報函數需要日期欄位,才能根據你在報告中選擇的欄位來計算日期。 例如,如果你有一個度量,透過 CLOSINGBALANCEQTR 函數計算季末結餘,Power Pivot 要知道季度真正結束的時間,必須參考日期表中的日期欄,以判斷季度開始和結束的時間。 想了解更多關於日期表的資訊,請參考 Excel 中的「理解並建立 Power Pivot 中的日期表」。
函數
回傳單一日期的函式
此類別中的函式會回傳單一日期。 結果可作為其他函數的參數。
此類別的前兩個函式回傳當前語境中Date_Column的第一個或最後一個日期。 當你想查找某一特定類型交易的第一天或最後一次發生時,這會很有用。 這些函式只接受一個參數,即日期表中日期欄位的名稱。
- 第一次約會 (Date_Column)
- 最後日期 (Date_Column)
此類別的後面兩個函式會尋找 (或任何其他欄位的日期,) 表達式非空白值的欄位值。 這通常用於像是庫存這類情況,當你想知道最後的庫存金額,卻不知道最後一次庫存是何時被取走的。
- FIRSTNONBLANK (Date_Column,表達式)
- LASTNONBLANK (Date_Column,表達)
另外六個回傳單一日期的函數,是回傳當前計算情境中每月、季度或年度第一個或最後一個日期的函數。
- 月初 (Date_Column)
- (Date_Column) 學季開始
- 學年開始 (Date_Column [,YE_Date])
- 月底 (Date_Column)
- (Date_Column) 學期結束
- 年終 (Date_Column [,YE_Date])
回傳日期表的函式
共有十六個時間智能函數,會回傳一張日期表。 這些函式通常會作為 CALCULATE 函式的 SetFilter 參數使用。 就像 DAX 中所有的時間智慧函數一樣,每個函數都以日期欄位作為其中一個參數。
此類別的前八個函式皆以當前情境中的日期欄位開始。 例如,如果在樞紐分析表中使用度量,欄位標籤或列標籤上可能會有月份或年份。 結果是日期欄位被過濾,只包含當前上下文的日期。 從當前情境出發,這八個函式會計算前 (或下一個) 天、月、季或年,並以單欄表格的形式回傳這些日期。 「先前」函式從當前上下文中的第一個日期向前計算,而「下一個」函式則從當前上下文的最後日期向前推進。
- 前一天 (Date_Column)
- 上個月 (Date_Column)
- 前四分之一 (Date_Column)
- 前年 (Date_Column [,YE_Date])
- 隔天 (Date_Column)
- 下個月 (Date_Column)
- 下季 (Date_Column)
- 明年 (Date_Column [,YE_Date])
此類別中的接下來四個函數類似,但它們不是計算前一 (或下) 期間,而是計算「月至今」期間的日期集合,無論是 (、季度至今、或去年同期) 。 這些函式都是利用當前情境中的最後日期來計算。 請注意,SAMEPERIODLASTYEAR 要求當前上下文包含連續的日期集合。 如果目前的上下文不是連續的日期集合,那麼 SAMEPERIODLASTYEAR 會回傳錯誤。
- 約會 (Date_Column)
- DATESQTD (Date_Column)
- DATESYTD (Date_Column [,YE_Date])
- 去年同期 (Date_Column)
這類的最後四個功能稍微複雜一些,也更強大一些。 這些函數用來從當前上下文中的日期集合轉換到新的日期集合。
- DATEADD (Date_Column、Number_of_Intervals、間隔)
- 約會時間介於 (Date_Column、Start_Date、End_Date)
- 約會週期 (Date_Column、Start_Date、Number_of_Intervals、間隔)
- 平行週期 (Date_Column、Number_of_Intervals、間隔)
DATESBETWEEN 計算指定開始日期與結束日期之間的日期集合。 剩下的三個函數會從當前情境中移動若干時間區間。 間隔可以是一天、一個月、一季或一年。 這些函數使得透過以下任一方法輕鬆調整計算時間區間:
- 返回兩年前
- 返回一個月後
- 往前走三分之四
- 返回14天
- 往前看 28 天
在每種情況下,你只需要指定哪個區間,以及要移多少個區間。 正值區間會向前移動,負值區間則會往時間上回溯。 該區間本身由 DAY、MONTH、QUARTER 或 YEAR 等關鍵字指定。 這些關鍵字不是字串,所以不應該加上引號。
評估一段時間內表達式的函數
這類函數會在指定時間內評估一個表達式。 你也可以用 CALCULATE 和其他時間智慧函數達成同樣的效果。 例如,
= TOTALMTD (表達式,Date_Column [, SetFilter])
完全相同於:
= 計算 (表達式,DATESMTD (Date_Column) [, SetFilter])
然而,當這些時間智慧函數與需要解決的問題相契合時,使用起來會更容易:
- TOTALMTD (表達式,Date_Column [, SetFilter])
- TOTALQTD (表達式,Date_Column [, SetFilter])
- TOTALYTD (表達,Date_Column [, SetFilter] [,YE_Date]) *
同一類別中還有一組計算期初與期末餘額的函數。 你必須了解這些特定功能中的一些概念。 首先,正如你可能認為顯而易見的,任何期間的期初餘額與前一期的期末餘額相同。 期末餘額包含該期間結束前的所有資料,而期初餘額則不包含本期內的任何資料。
這些函式總是回傳針對特定時間點評估的表達式值。 我們關心的時間點永遠是曆法期間中最後可能的日期值。 期初餘額是根據前一期間的最後一天計算,而期末餘額則是根據本期的最後一天計算。 當前期間總是以當前日期情境中的最後日期決定。
- OPENINGBALANCE 月 (表達式,Date_Column [,SetFilter])
- 開季餘額 Quarter (Expression, Date_Column [,SetFilter])
- 開啟平衡年份 (表達式,Date_Column [,SetFilter] [,YE_Date])
- Closingbalancemonth (表達式,Date_Column [,SetFilter])
- Closingbalancequarter (表達式,Date_Column [,SetFilter])
- 關閉平衡年 ( 表達式,Date_Column [,SetFilter] [,YE_Date])
其他資源
文章: 在 Excel 中理解並建立 Power Pivot 中的日期表
參考資料: DAX 函數參考 資料 Office.com