避免使用 FILTER 作為篩選自變數
身為數據建模者,您通常會撰寫 DAX 表達式,這些表達式需要在修改的篩選內容中進行評估。 例如,您可以撰寫量值定義來計算「高利潤產品」的銷售量。 我們將在本文稍後說明這項計算。
注意
本文特別適用於將篩選套用至匯入數據表的模型計算。
CALCULATE 和 CALCULATETABLEDAX 函式是重要且實用的函式。 其可讓您撰寫可移除或新增篩選的計算,或修改關聯性路徑。 其完成方式是傳入篩選自變數,也就是布爾表達式、數據表運算式或特殊篩選函式。 我們只會討論本文中的布林和表格運算式。
請考慮下列量值定義,其會使用數據表運算式來計算紅色產品銷售。 它會取代任何可能套用至 Product 數據表的篩選條件。
Red Sales =
CALCULATE(
[Sales],
FILTER('Product', 'Product'[Color] = "Red")
)
CALCULATE 函式會接受 FILTERDAX 函式所傳回的數據表運算式,其會評估 Product 數據表中每個數據列的篩選表達式。 其會達到正確的結果,也就是紅色產品的銷售結果。 不過,使用布林運算式可以更有效率地達成此目的。
以下是改良的量值定義,其使用布爾運算式,而不是數據表運算式。 KEEPFILTERS DAX 函式可確保套用至 Color 列的任何現有篩選都會保留,而且不會覆寫。
Red Sales =
CALCULATE(
[Sales],
KEEPFILTERS('Product'[Color] = "Red")
)
建議您儘可能將篩選自變數傳遞為布爾運算式。 這是因為「匯入」模型資料表位於記憶體內部資料行存放區。 它們被明確優化,以這種方式有效地篩選列。
不過,有些限制在布爾表達式用作篩選條件時會被套用。 其:
- 無法從多個資料表參考資料行
- 無法參考量值
- 無法使用巢狀 CALCULATE 函式
- 無法使用掃描或傳回數據表的函式
這表示您必須針對更複雜的篩選需求使用數據表運算式。
現在請考慮不同的量值定義。 計算銷售額的要求是只針對有達到利潤的月份進行計算。
Sales for Profitable Months =
CALCULATE(
[Sales],
FILTER(
VALUES('Date'[Month]),
[Profit] > 0
)
)
在此範例中,必須使用 FILTER 函式。 這是因為它需要評估 利潤 指標,以消除那些未獲得利潤的月份。 當用作篩選參數時,無法在布爾運算式中使用量值。
建議
為了獲得最佳效能,建議您盡可能使用布爾表達式作為篩選自變數。
因此,FILTER 函式只應該在必要時使用。 您可以使用它來執行篩選複雜欄位比較。 這些資料行比較可能涉及:
- 量值
- 其他資料行
- 使用 ORDAX 函式或 OR 邏輯運算符 (||)
相關內容
- 篩選函式 (DAX)
- 學習路徑:在 Power BI Desktop 中使用 DAX
- 有任何問題嗎? 嘗試詢問 Power BI 社群
- 有任何建議嗎? 提供想法以改善 Power BI