如何在DAX中对表变量t1的汇总结果正确计算行数?
DAX表变量计数异常问题解决
我通过大量复杂处理得到表变量t1,以下是DAX Studio中的简化示例代码:
EVALUATE var t1 = DATATABLE("item", STRING, {{"a"}, {"b"}}) return ADDCOLUMNS( SUMMARIZE( t1, [item] ), "count", calculate(countrows(t1)) )
当前查询返回错误结果:
[item],[count]
a,2
b,2
期望得到的正确结果:
[item],[count]
a,1
b,1
我理解问题根源:t1是常量表,查询中两次引用t1属于独立引用,二者的筛选上下文不共享。请问能否通过表变量t1实现正确计数,还是需要其他方法?
解决方案
常量表在DAX中不受外部筛选上下文影响,所以CALCULATE里的t1始终是完整的表,导致计数为2。以下几种方法可以解决这个问题:
方法1:手动应用筛选上下文
通过FILTER结合SELECTEDVALUE,将当前行的item筛选条件应用到t1上:
EVALUATE var t1 = DATATABLE("item", STRING, {{"a"}, {"b"}}) return ADDCOLUMNS( SUMMARIZE( t1, [item] ), "count", COUNTROWS(FILTER(t1, [item] = SELECTEDVALUE(t1[item]))) )
方法2:将表变量转为可关联的临时表
把t1转为临时表后,它的行为更接近数据模型中的物理表,筛选上下文可以正常传递:
EVALUATE var t1 = DATATABLE("item", STRING, {{"a"}, {"b"}}) var tempTable = SELECTCOLUMNS(t1, "item", [item]) return ADDCOLUMNS( SUMMARIZE( tempTable, [item] ), "count", CALCULATE(COUNTROWS(tempTable)) )
方法3:在SUMMARIZE内直接计算(最简洁)
利用EARLIER引用外层行上下文的item值,直接在SUMMARIZE中完成计数:
EVALUATE var t1 = DATATABLE("item", STRING, {{"a"}, {"b"}}) return SUMMARIZE( t1, [item], "count", COUNTROWS(FILTER(t1, [item] = EARLIER([item]))) )
内容的提问来源于stack exchange,提问作者LeppyR64
相关产品推荐
相关产品推荐

