使用 DAX 時間智慧函式
DAX 包含數個時間智慧函式,可簡化修改日期篩選內容的工作。 您可以使用修改日期篩選條件的 CALCULATE
函式來撰寫許多這類智慧公式,但如此會產生更多工作。
注意
許多 DAX 時間智慧函式都與標準日期週期有關,尤其是年、季和月。 如果有不尋常的時間週期 (例如財務月份從日曆月份中旬開始計算),或是需要處理週數或時間週期 (小時、分鐘等等),DAX 時間智慧函式的幫助不大。 建議改為 CALCULATE
函式,並傳入手動建立的日期或時間篩選條件。
日期資料表需求
若要使用時間智慧 DAX 函式,則必須滿足模型中至少有一份「日期資料表」這項模型需求先決條件。 日期資料表是符合下列需求的資料表:
- 必須具有資料類型為「日期」(或日期/時間) 的資料行,也就是「日期資料行」。
- 日期資料行必須包含唯一值。
- 日期資料行不得包含空白。
- 日期資料行不得有日期遺漏。
- 日期資料行必須橫跨完整年度。 年度並非一定要是日曆年度 (1 月到 12 月)。
- 日期資料表必須指定為日期資料表。
如需詳細資訊,請參閱在 Power BI Desktop 中建立日期資料表。
一段時間的摘要
有一個 DAX 時間智慧函式群組是與一段時間的摘要有關:
-
DATESYTD
- 傳回單資料行的資料表,內含目前篩選內容中年初至今 (YTD) 的日期。 此群組也包含月初至今 (MTD) 和季初至今 (QTD) 的DATESMTD
和DATESQTD
DAX 函式。 可將這些函式做為篩選條件,傳遞至CALCULATE
DAX 函式。 -
TOTALYTD
- 評估目前篩選內容中的 YTD 運算式。TOTALQTD
和TOTALMTD
的對等 QTD 和 MTD DAX 函式也包含在內。 -
DATESBETWEEN
- 傳回包含日期資料行的資料表,該資料行從指定的開始日期開始,直到指定的結束日期為止。 -
DATESINPERIOD
- 傳回包含日期資料行的資料表,這些資料行的開頭是指定的開始日期,並以指定的間隔數持續下去。
注意
雖然 TOTALYTD
函式使用起來很簡單,但只能傳入一個篩選條件運算式。 如果需要套用多個篩選條件運算式,請使用 CALCULATE
函式,然後傳入 DATESYTD
函式做為其中一個篩選條件運算式。
在下列範例中,會首次建立使用 TOTALYTD 函式的智慧計算。 語法如下:
TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])
此函式需要運算式,而且與所有時間智慧函式一樣,是做為已標示日期資料表的日期資料行的參考。 也可以傳入單一篩選條件運算式或年度結束日期 (只有在年度並非於 12 月 31 日結束時才需要此運算式)。
請下載並開啟 Adventure Works DW 2020 M07.pbix 檔案。 然後在 Sales 資料表中新增下列用於計算 YTD 收益的量值定義。 請將量值格式設為兩個小數位數的貨幣值。
Revenue YTD =
TOTALYTD([Revenue], 'Date'[Date], "6-30")
年度結束日期的值為 "6-30"
,即表示 6 月 30 日。
在報表的 [第 1 頁],將 Revenue YTD 的量值新增至矩陣視覺效果。 請注意,這會產生從年初到篩選月份的收益金額摘要。
一段時間的比較
另一個 DAX 時間智慧函式群組與移位時間週期相關:
-
DATEADD
- 傳回包含日期資料行的資料表,這些日期會根據指定的間隔數,從目前的篩選內容中的日期前移或後移時間。 -
PARALLELPERIOD
- 傳回包含日期資料行的資料表,其表示與目前篩選內容中指定的日期資料行平行的期間,在時間上前移或後移特定間隔數的日期。 -
SAMEPERIODLASTYEAR
- 根據目前篩選內容中所指定日期資料行中的日期,傳回包含在時間上向前移一年之日期資料行的資料表。 - 許多協助程式 DAX 函式可在特定時間週期內向前或向後瀏覽,而這些函式會傳回日期的資料表。 這類協助程式函式包括
NEXTDAY
、NEXTMONTH
、NEXTQUARTER
、NEXTYEAR
以及PREVIOUSDAY
、PREVIOUSMONTH
、PREVIOUSQUARTER
和PREVIOUSYEAR
。
現在要使用 SAMEPERIODLASTYEAR
函式,在 Sales 資料表中新增用於計算前一年收益的量值。 請將量值格式設為兩個小數位數的貨幣值。
Revenue PY =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
RevenuePriorYear
將 Revenue PY 量值新增至矩陣視覺效果。 請注意,其產生的結果會與去年收益金額類似。
接著要將量值重新命名為 Revenue YoY %,再更新 RETURN
子句來計算變更比率,以此方式修改此量值。 請務必將格式變更為兩個小數位數的百分比。
Revenue YoY % =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
DIVIDE(
[Revenue] - RevenuePriorYear,
RevenuePriorYear
)
請注意,Revenue YoY % 量值會產生去年每月收益的變更係數。 例如,2018 年 7 月呈現去年每月收益增加 106.53%,而 2018 年 11 月呈現去年每月收益減少24.22%。
注意
Revenue YoY % 量值展現了 DAX 變數的優秀用途。 此量值可改善公式的可讀性,並可讓您對部分量值邏輯進行單元測試 (透過傳回 RevenuePriorYear 變數值)。 此外,因為該量值不需要將前一年的收益值擷取兩次,是最佳的公式。 在變數中儲存該量值之後,會對變數值使用 RETURN
子句兩次。