使用 DAX 時間智慧函式

已完成

DAX 包含數個時間智慧函式,可簡化修改日期篩選內容的工作。 您可以使用修改日期篩選條件的 CALCULATE 函式來撰寫許多這類智慧公式,但如此會產生更多工作。

注意

許多 DAX 時間智慧函式都與標準日期週期有關,尤其是年、季和月。 如果有不尋常的時間週期 (例如財務月份從日曆月份中旬開始計算),或是需要處理週數或時間週期 (小時、分鐘等等),DAX 時間智慧函式的幫助不大。 建議改為 CALCULATE 函式,並傳入手動建立的日期或時間篩選條件。

日期資料表需求

若要使用時間智慧 DAX 函式,則必須滿足模型中至少有一份「日期資料表」這項模型需求先決條件。 日期資料表是符合下列需求的資料表:

  • 必須具有資料類型為「日期」(或日期/時間) 的資料行,也就是「日期資料行」。
  • 日期資料行必須包含唯一值。
  • 日期資料行不得包含空白。
  • 日期資料行不得有日期遺漏。
  • 日期資料行必須橫跨完整年度。 年度並非一定要是日曆年度 (1 月到 12 月)。
  • 日期資料表必須指定為日期資料表。

如需詳細資訊,請參閱在 Power BI Desktop 中建立日期資料表

一段時間的摘要

有一個 DAX 時間智慧函式群組是與一段時間的摘要有關:

  • DATESYTD - 傳回單資料行的資料表,內含目前篩選內容中年初至今 (YTD) 的日期。 此群組也包含月初至今 (MTD) 和季初至今 (QTD) 的 DATESMTDDATESQTD DAX 函式。 可將這些函式做為篩選條件,傳遞至 CALCULATE DAX 函式。
  • TOTALYTD - 評估目前篩選內容中的 YTD 運算式。 TOTALQTDTOTALMTD 的對等 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 函式可在特定時間週期內向前或向後瀏覽,而這些函式會傳回日期的資料表。 這類協助程式函式包括 NEXTDAYNEXTMONTHNEXTQUARTERNEXTYEAR 以及 PREVIOUSDAYPREVIOUSMONTHPREVIOUSQUARTERPREVIOUSYEAR

現在要使用 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 子句兩次。