使用 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 时,“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 函数 。 如果没有筛选器(或多个筛选器)应用于该列,则返回备用结果值。
相关内容
- 学习路径:在 Power BI Desktop 中使用 DAX
- 是否有任何问题? 尝试咨询 Power BI 社区
- 建议? 提出改进 Power BI 的想法