如何解决将 FILTER 与 VALUES 一起使用多行错误
我正在为 The Definitive Guide to DAX 一书提供的 Contoso 数据库上学习 DAX。
我正在尝试理解过滤器上下文,我写了这个度量:
CountColor:= COUNT ( 'Product'[Color] )
我将它放入数据透视表,其中 'Product'[Color] 添加到行部分,结果如下:
行标签 | CountColor |
---|---|
天蓝色 | 14 |
黑色 | 602 |
蓝色 | 77 |
... | ... |
这表明每行中的过滤器上下文由该行的颜色定义。
当我编写以下度量时,我预计 VALUES 仅返回数据透视表行中当前可用的一种颜色的唯一值,并且它会自动转换为标量值:
CountColorValues:= CALCULATE (
COUNT ( 'Product'[Color] ),FILTER ( 'Product','Product'[Color] = VALUES ( 'Product'[Color] )
)
)
但是将这个度量放到同一个表中,我得到了错误: “度量 'Product'[CountColorValues] 中的计算错误:提供了一个包含多个值的表,其中需要一个值。”
我创建了另一个度量来测试 VALUES 是否真的返回单个值:
CountrowsValues:= COUNTROWS (
CALCULATETABLE ( VALUES ( 'Product'[Color] )
)
)
结果:
行标签 | CountrowsValues |
---|---|
天蓝色 | 1 |
黑色 | 1 |
蓝色 | 1 |
... | ... |
当我试图让 VALUES 在 FILTER 中工作时,我错过了什么?
解决方法
在这种情况下,VALUES 会获得一个不同的项目列表,因此如下所示:
CountColorValues:= CALCULATE (
COUNT ( 'Product'[Color] ),FILTER ( 'Product','Product'[Color] = VALUES ( 'Product'[Color] )
)
)
'Product'[Color] 试图等于 {'Azure','Black','Blue'} 的列表,因此实际上您试图使 'Azure' 的行等于不同的值
要使其工作,它需要更改为 IN,是列表中的 [color] 值,而不是列表。
CountColorValues:= CALCULATE (
COUNT ( 'Product'[Color] ),'Product'[Color] IN VALUES ( 'Product'[Color] )
)
)
,
该问题可能是由数据透视表的总计引起的。 那里的上下文不同,不存在滤色器,因此 VALUES 返回每种颜色,因此度量给出了提到的多行错误。
关闭数据透视表上的总计不能解决问题,错误不断出现。
结论是,即使您愿意抑制它,您也必须编写与 Grand Total 兼容的度量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。