Power BI中能否将两个薪资计算度量值合并为一个?
问题分析与解决方案
首先得指出你原来的度量值逻辑存在问题,这也是合并后出错的根源:
你的第一个度量值 Measure = MAXX(DISTINCT(Employee1[EmployeeId]), MAX(Employee1[Salary])) 并没有实现“每个员工取最高薪资”的目标——因为 MAX(Employee1[Salary]) 没有限定在当前遍历的员工ID上下文里,它会直接返回整个表的最高薪资,而不是对应员工的最高薪资。后续的 SumSalary 基于这个错误的Measure计算,自然也不符合你的需求。
如果你的核心需求是每个员工取其最高薪资,然后将所有员工的最高薪资求和,那么可以直接用单个度量值实现,不需要拆分:
SumSalary = SUMX( DISTINCT(Employee1[EmployeeId]), // 遍历每个唯一的员工ID CALCULATE(MAX(Employee1[Salary])) // 在当前员工ID的上下文下计算其最高薪资 )
为什么这个写法有效?
DISTINCT(Employee1[EmployeeId])生成所有唯一员工ID的列表,SUMX会逐个遍历这些ID。CALCULATE会修改上下文,让MAX(Employee1[Salary])只计算当前遍历到的员工ID对应的薪资最大值,而不是全局最大值。
如果你更倾向用 MAXX 来实现,也可以调整为:
SumSalary = SUMX( DISTINCT(Employee1[EmployeeId]), MAXX( FILTER(Employee1, Employee1[EmployeeId] = EARLIER(Employee1[EmployeeId])), Employee1[Salary] ) )
这个写法通过 FILTER 限定了当前员工ID的行,再取该员工的最高薪资,最后求和,逻辑和上面的写法一致,只是用 MAXX 替代了 CALCULATE。
为什么你之前的合并写法无效?
你合并后的代码遍历的是 DISTINCT(Employee1[Salary])(所有唯一薪资值),而不是员工ID,这完全偏离了“按员工ID分组”的需求;同时内部的 MAX(Employee1[Salary]) 依然是全局最大值,导致计算逻辑完全错误。
内容的提问来源于stack exchange,提问作者Jay Desai
相关产品推荐
相关产品推荐

