DAX) (數據分析表達式具有 35 個專門用來匯總及比較一段時間數據的函數。 與 DAX 的日期和時間函數不同,時間智慧函數在 Excel 中並沒有類似的函數。 這是因為時間智慧函數會根據您在數據透視表和 Power View 視覺效果中選取的上下文而持續變更的數據運作。
若要使用時間智慧函數,您必須在數據模型中包含日期數據表。 日期數據表必須包含一個數據行,其中包含您數據中每個年度每天的一列。 雖然您可以將此欄命名為您喜歡) ,但會被視為 [日期] 欄 (。 許多時間智慧函數都需要日期數據行,才能根據您在報表中選取為字段的日期來計算。 例如,如果您有使用 CLOSINGBALANCEQTR 函數來計算結帳季度餘額的量值,為了讓 Power Pivot 知道該季的結束時間確實是,它必須參照日期數據表中的日期數據行,以瞭解該季的開始和結束時間。 若要深入瞭解日期數據表,請參閱 瞭解並在 Excel 的 Power Pivot 中建立日期數據表。
函數
傳回單一日期的函數
此類別中的函數會傳回單一日期。 然後,該結果就可以用來做為其他函數的自變數。
此類別的前兩個函數會傳回目前內容中Date_Column的第一個或最後一個日期。 當您想要尋找交易特定類型的第一個或最後一個日期時,這個選項非常實用。 這些函數只需要一個自變數,即日期數據表中日期數據行的名稱。
此類別中的下兩個函數會尋找第一個或最後一個日期 (或任何其他數據行值,以及表達式具有非空白值的) 。 最常用於庫存等情況下,您想要取得最後一個庫存量,而且您不知道上次的庫存時間。
-
FIRSTNONBLANK (Date_Column、運算式)
-
LASTNONBLANK (Date_Column、Expression)
再傳回單一日期的六個函數,就是傳回計算目前上下文中一個月、一季或一年的第一個或最後一個日期的函數。
-
STARTOFMONTH (Date_Column)
-
STARTOFQUARTER (Date_Column)
-
STARTOFYEAR (Date_Column [,YE_Date])
-
ENDOFMONTH (Date_Column)
-
ENDOFQUARTER (Date_Column)
-
ENDOFYEAR (Date_Column [,YE_Date])
傳回日期數據表的函數
有十六種時間智慧函數可傳回日期數據表。 這些函數通常會做為 CALCULATE 函數 的 SetFilter 自變數使用。 就像 DAX 中的所有時間智慧函數一樣,每個函數都會使用日期數據行做為其自變數之一。
此類別的前八個函數是從目前上下文中的日期數據行開始。 例如,如果在數據透視表中使用量值,欄卷標或列卷標可能有一個月或一年。 淨效果是指篩選日期列,只包含目前內容的日期。 從目前內容開始,這八個函數接著會計算前 (或後) 日、月、季或年份,並以單一數據行數據表的形式傳回這些日期。 「上一個」函數會從目前內容中的第一個日期往後運作,而「下一個」函數會從目前上下文中的最後一個日期往後移動。
-
PREVIOUSDAY (Date_Column)
-
PREVIOUSMONTH (Date_Column)
-
PREVIOUSQUARTER (Date_Column)
-
PREVIOUSYEAR (Date_Column [,YE_Date])
-
NEXTDAY (Date_Column)
-
NEXTMONTH (Date_Column)
-
NEXTQUARTER (Date_Column)
-
NEXTYEAR (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)
-
DATESBETWEEN (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 天
在每種情況下,您只需要指定要換班的間隔時間,以及要換班的間隔數目。 正區間會在時間內向前移動,而負區間會回到時間。 interval 本身是由 DAY、MONTH、QUARTER 或 YEAR 的關鍵詞所指定。 這些關鍵詞不是字串,因此不應以引弧括住。
一段時間內評估表達式的函數
此函數類別會在指定的時段內評估表達式。 您可以使用 CALCULATE 和其他時間智慧函數來完成相同的工作。 例如,
= TOTALMTD (expression, Date_Column [, SetFilter])
與以下完全相同:
= CALCULATE (expression, DATESMTD (Date_Column) [, SetFilter])
不過,當這些時間智慧函數符合需要解決的問題時,使用這些時間智慧函數會比較容易:
-
TOTALMTD (expression, Date_Column [, SetFilter])
-
TOTALQTD (expression, Date_Column [, SetFilter])
-
TOTALYTD (Expression, Date_Column [, SetFilter] [,YE_Date]) *
此外,在這個類別中,還有一組函數可計算開啟與結案餘額。 在這些特定函數中,您應該瞭解某些概念。 首先,您可能會認為明顯而言,任何期間的開啟餘額都與上一期的結帳餘額相同。 結帳餘額包含期間結束的所有數據,而開啟餘額不包含目前期間內的任何數據。
這些函數一律會傳回針對特定時間點評估的表達式值。 我們關注的時間點一律是行事曆期間中最後一個可能的日期值。 開啟餘額是根據上一個期間的最後一個日期,而結帳餘額則是根據目前期間的最後一個日期。 目前期間一律由目前日期內容中的最後一個日期決定。
-
OPENINGBALANCEMONTH (Expression, Date_Column [,SetFilter])
-
OPENINGBALANCEQUARTER 四季 (表示式,Date_Column [,SetFilter])
-
OPENINGBALANCEYEAR (Expression, Date_Column [,SetFilter] [,YE_Date])
-
CLOSINGBALANCEMONTH (Expression, Date_Column [,SetFilter])
-
CLOSINGBALANCEQUARTER (Expression, Date_Column [,SetFilter])
-
CLOSINGBALANCEYEAR (Expression, Date_Column [,SetFilter] [,YE_Date])