HASONEVALUE
HASONEVALUE ( <ColumnName> )
当指定列中只有一个值时,返回 true。
HASONEVALUE 的作用非常直观,用来判断当前列是否只有唯一值。在 VALUES 函数部分,你可能记得 DAX 有这样一个特性:
如果返回表的表达式结果是包含一行一列的表, 则可以转换为标量值, 这种转换在需要时自动完成
实际上, 如果结果恰好是一行和一列, 则可以将任何返回表的表达式用作标量值。如果表返回多行, 在执行时会出现此错误:
该表达式引用多列,多列不能转换为标量值
因此,在表表达式返回多行(在编写 DAX 表达式时,你应该已经知道表表达式是否只返回一行)的情况下,你应该始终使用返回不同结果的条件来保护对标量值的转换。使用 COUNTROWS 可以检查目标列是否只有一个选中的值,还有一种更简单的方法是使用 HASONEVALUE,它执行相同的检查,如果列只有一个值时返回 TRUE,否则返回 FALSE。以下两种语法是等价的:
COUNTROWS ( VALUES ( <column> ) ) = 1 HASONEVALUE ( <column> )
你应该使用 HASONEVALUE 而不是 COUNTROWS,原因有二:它更易于阅读,而且计算的时候可能会稍微快一些。下面是基于 HASONEVALUE 的 Color Name 度量值的推荐写法:
[Color Name] := IF ( HASONEVALUE ( Product[Color] ), VALUES ( Product[Color] ) )
当你熟悉了另一个函数 SELECTEDVALUE 之后,你会发现它的写法更简单,比如上面的度量值等价于
[Color Name] := SELECTEDVALUE ( Product[color] )
HASONEVALUE 函数要求参数“1”使用一个列引用表达式,实际使用的却是表引用表达式。”。
hasonevalue()在excel中不支持第一参数输入表吗?
请教老师,这个表达式为什么会返回TRUE,这里筛选手机,手机有多个值,那么前面hasonevalue就不是只有一个值了?
有一个疑问,如果确定当前列是唯一值,直接写 VALUES ( Product[Color] )报错,为什么加个 HASONEVALUE判断一下就行了呢?