Power BI中ALL()函数在SUMX里的行为差异:为何仅返回非重复值?
关于DAX中ALL(表)与ALL(列)在SUMX中的行为差异
核心差异解析
你观察到的结果差异,本质是ALL函数参数类型不同导致返回对象的本质区别:
ALL(FactFinance)返回的是整个FactFinance表的所有原始行(包含重复行,共7行)ALL(FactFinance[Amount])返回的是FactFinance[Amount]列的所有非重复值构成的单列表(仅3个值:100、200、300)
两个度量值的计算逻辑
FactTotal1 = SUMX(ALL(FactFinance), FactFinance[Amount])
SUMX会逐行迭代ALL(FactFinance)返回的7行数据,将每一行的Amount值累加:100+200+100+300+200+100+300 = 1300FactTotal2 = SUMX(ALL(FactFinance[Amount]), FactFinance[Amount])
SUMX迭代的是ALL(FactFinance[Amount])返回的3个非重复值集合,每次迭代取集合中的单个值累加:100+200+300 = 600
对官方定义的误解澄清
微软官方定义中,ALL(列)的作用是"清除该列的筛选并返回所有值",这里的"所有值"指的是列中的唯一值,而非原始表中每行的重复值。而ALL(表)返回的是表的完整行集,只要行的列组合(比如OrgKey+Amount)不同,就算是不同的行,因此保留了所有重复的Amount行。
补充验证
如果需要让FactTotal2得到与FactTotal1相同的结果,可修改为:
FactTotal2 = SUMX(ALL(FactFinance), FactFinance[Amount])
或者直接使用更简洁的SUM函数(SUM会自动累加所有行的Amount):
FactTotal = SUM(FactFinance[Amount])
内容的提问来源于stack exchange,提问作者d2907
相关产品推荐
相关产品推荐

