身為數據建模師,撰寫和偵錯某些 DAX 計算可能會很有挑戰性。 複雜計算需求通常牽涉到撰寫複合或複雜表達式,這是常見的。 複合表達式可以牽涉到使用許多巢狀函式,而且可能重複使用表達式邏輯。
在 DAX 公式中使用變數可協助您撰寫更複雜的且有效率的計算。 變數可以改善效能、可靠性、可讀性,並減少複雜性。
在本文中,我們將使用年度(YoY)銷售成長的範例量值來示範前三個權益。 同比銷售增長的公式是本期銷售額減去去年同期的銷售額,再除以去年同期的銷售額。
讓我們從下列量值定義開始。
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
量值會產生正確的結果,但現在讓我們看看如何改善它。
改善效能
請注意,公式會重複計算「去年相同期間」的表達式。 此公式效率不佳,因為它需要Power BI評估相同的表達式兩次。 您可以使用變數 VAR,讓量值定義更有效率。
下列量值定義代表改進。 它會使用表達式,將「去年同一期間」結果指派給名為 SalesPriorYear 的變數。 然後,該變數會在 RETURN 運算式中被使用兩次。
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
量值會繼續產生正確的結果,並在大約一半的查詢時間中執行此動作。
改善可讀性
在先前的量值定義中,請注意變數名稱的選擇如何讓 RETURN 運算式更容易瞭解。 表達式簡短且自我描述。
簡化偵錯
變數也可以協助您對公式進行偵錯。 若要測試指派給變數的運算式,您可以暫時重寫 RETURN 運算式來輸出變數。
下列量值定義只會傳回 SalesPriorYear 變數。 請注意其如何將預定的 RETURN 運算式標記為註解。 這項技巧可讓您在完成偵錯後,輕鬆地將狀態還原。
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
降低複雜性
在 DAX 的舊版中,尚未支援變數。 需要引進新篩選內容的複雜表達式,才能使用 EARLIER 或 EARLIESTDAX 函式來參考外部篩選內容。 不幸的是,數據模型工具發現這些函式難以理解和使用。
變數一律會在套用 RETURN 表達式的篩選之外進行評估。 基於這個理由,當您在修改的篩選內容中使用變數時,它會達到與 EARLIEST 函式相同的結果。 因此,可以避免使用 EARLIER 或 EARLIEST 函式。 這表示您現在可以撰寫較不複雜且更容易理解的公式。
請考慮下列新增至 Subcategory 資料表中的計算結果欄定義。 它會根據 Subcategory Sales 資料行值來評估每個產品子類別的排名。
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
函EARLIER式用來參考目前數據列內容中的Subcategory Sales 數據行值。
您可以使用變數來改善匯出數據行定義,而不是使用 EARLIER 函式。 CurrentSubcategorySales 變數會將 Subcategory Sales 數據行值儲存在目前數據列內容中,而 RETURN 表達式會在修改的篩選內容內使用它。
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
相關內容
- VAR DAX 文章
- 學習路徑:在Power BI Desktop 中使用 DAX
- 有任何問題嗎? 試著向 Power BI 社群提問