使用 SELECTEDVALUE 而不是 VALUES

作为数据建模人员,有时可能需要编写 DAX 表达式来测试列是否按特定值进行筛选。

在较早版本的 DAX 中,通过使用涉及三个 DAX 函数的模式可以安全地实现此要求;IFHASONEVALUEVALUES。 下面的度量值定义显示一个示例。 它计算销售税金额,但仅限于面向澳大利亚客户的销售。

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

在该示例中,仅当“国家/地区”列上的单个值在当前筛选器上下文中可见时,HASONEVALUE 函数才返回 TRUE。 如果为 TRUE,VALUES 函数将与文本“澳大利亚”进行比较。 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 函数 。 如果没有筛选器(或多个筛选器)应用于该列,则返回备用结果值。