You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:46:16