Power BI中使用DAX计算拥有多份工作的在职员工人数
DAX度量值问题:统计拥有多份工作的在职员工人数
业务场景
- 使用Microsoft Power BI Desktop(.pbix)与DAX语言
- 存在
EmployeeTable表,包含9个不同员工,每个员工因工作数量不同可能对应多行数据(例如George拥有Painter和Driver两份工作,对应两行记录) - 表中
EmployeeTable[IsActiveEmployee]列用于标记员工是否在职,取值为"Y"(是)或"N"(否)
核心需求
开发一个度量值,计算拥有多份工作的在职员工人数,具体步骤:
- 筛选出
EmployeeTable[IsActiveEmployee]取值为"Y"的员工 - 进一步筛选其中拥有多份工作的员工
- 对符合条件的员工进行
DISTINCTCOUNT统计
已知数据情况
- 共有11个不同员工,其中7人至少有一份在职工作
- 7人中最终需统计4位符合条件的员工(George、Rebecca、Jeanne、Jack):Adam因非在职需排除,James因在职期间仅拥有一份工作需排除
现有尝试的DAX代码
HeadCountOfEmployees_Measure = DISTINCTCOUNT(EmployeeTable[EmployeeId]) HeadCountOfActiveEmployees_Measure = CALCULATE ( [HeadCountOfEmployees_Measure], KEEPFILTERS(EmployeeTable[IsActiveEmployee] = "Y") ) DistinctCountOfJobs_Measure = DISTINCTCOUNT(EmployeeTable[Job]) HeadCountOfActiveEmployeesWithMultipleJobs_Measure = SUMX( FILTER( VALUES(EmployeeTable[IsActiveEmployee]), EmployeeTable[IsActiveEmployee] = "Y" ), IF( [DistinctCountOfJobs_Measure] > 1, 1, 0 ) )
问题分析与正确解决方案
错误原因
原度量值HeadCountOfActiveEmployeesWithMultipleJobs_Measure逻辑错误:它在IsActiveEmployee的取值维度上迭代,而非按员工维度判断每个在职员工的工作数量,导致无法精准统计每个员工的在职工作数。
正确度量值写法(两种可选)
写法一:使用VAR+FILTER+COUNTROWS
HeadCountOfActiveEmployeesWithMultipleJobs_Measure = VAR ActiveEmployeesWithMultipleJobs = FILTER( VALUES(EmployeeTable[EmployeeId]), CALCULATE( DISTINCTCOUNT(EmployeeTable[Job]), EmployeeTable[IsActiveEmployee] = "Y" ) > 1 ) RETURN COUNTROWS(ActiveEmployeesWithMultipleJobs)
写法二:使用SUMX迭代员工维度
HeadCountOfActiveEmployeesWithMultipleJobs_Measure = SUMX( VALUES(EmployeeTable[EmployeeId]), VAR ActiveJobCount = CALCULATE( DISTINCTCOUNT(EmployeeTable[Job]), EmployeeTable[IsActiveEmployee] = "Y" ) RETURN IF(ActiveJobCount > 1 && NOT ISBLANK(ActiveJobCount), 1, 0) )
逻辑说明
两种写法均以员工为核心维度:
- 遍历每个唯一的员工ID
- 计算该员工在职状态下的不同工作数量
- 判断数量是否大于1,符合条件则计数1,否则0
- 最终汇总所有符合条件的员工数
内容的提问来源于stack exchange,提问作者user3812887
相关产品推荐
相关产品推荐

