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

为何未使用CALCULATE时,MAXX不会将行上下文转为筛选上下文?

MAXX未使用CALCULATE时不转换行上下文为筛选上下文的原因

先看第一个DAX表达式:

MAXX(CUSTOMER, SUMX(SALES,SALES[AMT]+0))

该表达式执行SUMX时,不会将当前迭代的客户信息纳入筛选上下文,最终计算的是所有SALES记录中SALES[AMT]+0的总和,MAXX迭代每个客户时SUMX都返回同一个全局总和,最终结果即为该值。

而加入CALCULATE的表达式则能实现按客户筛选求和的效果:

MAXX(CUSTOMER, CALCULATE(SUMX(SALES,SALES[AMT]+0)))

核心原因:行上下文与筛选上下文的本质差异

  • MAXX是迭代函数,遍历CUSTOMER表每一行时会创建行上下文,这个上下文仅标记当前迭代到的客户行,但不会自动转化为筛选上下文。
  • SUMX作为嵌套迭代函数,默认只会在自身迭代范围(整个SALES表)内计算,无法感知外部MAXX创建的行上下文——行上下文是“私有”的,只有通过CALCULATE这类具备上下文转换能力的函数,才能将行上下文转化为筛选上下文,让后续计算(比如SUMX)识别到当前客户的筛选条件。
  • CALCULATE的核心功能之一就是上下文转换:它会自动把当前存在的所有行上下文转化为对应的筛选上下文,这样SUMX计算时就只会对与当前迭代客户关联的SALES记录求和,实现按客户分组计算的效果。

内容的提问来源于stack exchange,提问作者variable

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:57:03