使用 SELECTEDVALUE 而非 VALUES

身為數據建模者,有時候您可能需要撰寫 DAX 運算式來測試資料行是否依特定值接受篩選。

在舊版的 DAX 中,您需要藉由使用包含三個 DAX 函式的模式,以確保達成這項需求:IFHASONEVALUEVALUES。 下列量值定義會提供範例。 其會計算銷售稅額,但僅計算對澳洲客戶的銷售。

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

在此範例中,只有當可以在目前篩選內容中看見 Country-Region 資料行的單一值時,HASONEVALUE 函式才會傳回 TRUE。 當為 TRUE 時,VALUES 函式會與常值文字 "Australia" 進行比較。 當 VALUES 函式傳回 TRUE 時,Sales 量值會乘以 0.10 (代表 10%)。 如果 HASONEVALUE 函式傳回 FALSE (因為有一個以上的值篩選資料行),則第一個 IF 函式會傳回 BLANK。

使用 HASONEVALUE 是一種防禦性技巧。 這是必需的,因為可能會有多個值篩選 Country-Region 資料行。 在此情況下,VALUES 函式會傳回多個資料列的資料表。 而將多個資料列的資料表與純量值進行比較,則會產生錯誤。

建議

建議您使用 SELECTEDVALUE 函式。 此函式具有與本文中所述模式相同的結果,但更簡練且更有效率。

使用 SELECTEDVALUE 函式時,會重寫範例量值定義。

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

提示

您可以將「替代結果」值傳遞至 SELECTEDVALUE 函式。 當沒有任何篩選 (或多個篩選) 套用至資料行時,就會傳回替代結果值。