从数据到信息
从信息到洞察

理解 HASONEVALUE

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] )

 

7
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
4 评论数
4 被回复的评论
4 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
小本本

HASONEVALUE 函数要求参数“1”使用一个列引用表达式,实际使用的却是表引用表达式。”。
hasonevalue()在excel中不支持第一参数输入表吗?

Snipaste_2022-08-03_16-55-11.png
成员
喵喵的BI_road

请教老师,这个表达式为什么会返回TRUE,这里筛选手机,手机有多个值,那么前面hasonevalue就不是只有一个值了?

微信图片_20220214111427.png
微信图片_20220214111025.png
成员
花生就雪碧

有一个疑问,如果确定当前列是唯一值,直接写 VALUES ( Product[Color] )报错,为什么加个 HASONEVALUE判断一下就行了呢?

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数