【发布时间】:2021-02-16 05:58:39
【问题描述】:
我正在为《DAX 权威指南》一书提供的 Contoso 数据库学习 DAX。
我正在尝试了解过滤器上下文并且我写了这个度量:
CountColor:= COUNT ( 'Product'[Color] )
我将它放入数据透视表中,将 'Product'[Color] 添加到行部分,结果如下:
| Row Labels | CountColor |
|---|---|
| Azure | 14 |
| Black | 602 |
| Blue | 77 |
| ... | ... |
这表明每一行中的过滤器上下文是由该行的颜色定义的。
当我编写以下度量时,我预计 VALUES 仅返回数据透视表行中当前可用的一种颜色的唯一值,并且它会自动转换为标量值:
CountColorValues:= CALCULATE (
COUNT ( 'Product'[Color] ),
FILTER ( 'Product',
'Product'[Color] = VALUES ( 'Product'[Color] )
)
)
但是把这个度量放到同一张表上,我得到了错误: “度量 'Product'[CountColorValues] 中的计算错误:提供了一个包含多个值的表,而预期只有一个值。”
我创建了另一个度量来测试 VALUES 是否真的返回单个值:
CountrowsValues:= COUNTROWS (
CALCULATETABLE ( VALUES ( 'Product'[Color] )
)
)
结果:
| Row Labels | CountrowsValues |
|---|---|
| Azure | 1 |
| Black | 1 |
| Blue | 1 |
| ... | ... |
当我试图让 VALUES 在 FILTER 中工作时,我错过了什么?
【问题讨论】:
-
您收到此错误,因为您试图将标量值与表进行比较,因为 VALUES 返回表,而不管它返回多少行。使用 IN 运算符或 CONTAINSROWS 函数。
-
据我所知,如果一个表有一列一行,如果在表达式中使用,DAX会自动将其转换为标量值。 CountColorTableToScalar:=CALCULATE(COUNT('Product'[Color]), FILTER('Product','Product'[Color]=SUMMARIZE(TOPN(1,'Product'),'Product'[Color]))) 在这个测量 SUMMARIZE 的结果被传递给 FILTER 表达式,其中结果是有意为一列一行的表。
-
当然,但是如果您总是期望一个值,为什么首先要使用 Values?
-
你能否给我指出一个文档,该文档讨论了表到标量的这种隐式转换?我在这里没找到:docs.microsoft.com/en-us/power-bi/connect-data/…
-
在这里你会发现在语法要求下提到了转换:docs.microsoft.com/hu-hu/dax/dax-syntax-reference
标签: excel powerbi dax powerpivot