使用 SELECTEDVALUE 而不是 VALUES
作为数据建模器,有时可能需要编写一个 DAX 表达式来测试列是否按特定值进行筛选。
在早期版本的 DAX中,使用涉及三个 DAX 函数的模式可以安全地实现此要求;IF、HASONEVALUE 和 VALUES。 以下度量值定义提供了一个示例。 它计算销售税金额,但仅适用于向澳大利亚客户进行的销售额。
Australian Sales Tax =
IF(
HASONEVALUE(Customer[Country-Region]),
IF(
VALUES(Customer[Country-Region]) = "Australia",
[Sales] * 0.10
)
)
在此示例中,仅当当前筛选器上下文中可见 国家/地区 列的单个值时,HASONEVALUE 函数才会返回 TRUE。 如果为 TRUE,VALUES 函数将与“澳大利亚”文本进行比较。 VALUES 函数返回 TRUE 时,“销售额”度量值将乘以 0.10(表示 10%)。 如果 HASONEVALUE 函数返回 FALSE,因为多个值会筛选列,则第一个 IF 函数返回 BLANK。
使用 HASONEVALUE 是一种防御技术。 之所以需要这样做,是因为“国家/地区” 列可能会有多个值进行筛选。 在这种情况下,VALUES 函数返回多行的表。 将多行表与标量值进行比较会导致错误。
建议
建议使用 SELECTEDVALUE 函数。 它实现的结果与本文中所述的模式相同,但更高效、更优雅。
使用 SELECTEDVALUE 函数时,现在将重写示例度量值定义。
Australian Sales Tax =
IF(
SELECTEDVALUE(Customer[Country-Region]) = "Australia",
[Sales] * 0.10
)
提示
可以将 备用结果 值传递到 SELECTEDVALUE 函数中。 如果没有筛选器(或多个筛选器)应用于该列,则返回备用结果值。
相关内容
- 学习路径:在 Power BI Desktop 中使用 DAX
- 问题? 尝试咨询 Power BI 社区
- 建议? 提出改进 Power BI 的想法