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

Power BI中使用DAX计算拥有多份工作的在职员工人数

DAX度量值问题:统计拥有多份工作的在职员工人数

业务场景

  • 使用Microsoft Power BI Desktop(.pbix)与DAX语言
  • 存在EmployeeTable表,包含9个不同员工,每个员工因工作数量不同可能对应多行数据(例如George拥有Painter和Driver两份工作,对应两行记录)
  • 表中EmployeeTable[IsActiveEmployee]列用于标记员工是否在职,取值为"Y"(是)或"N"(否)

核心需求

开发一个度量值,计算拥有多份工作的在职员工人数,具体步骤:

  1. 筛选出EmployeeTable[IsActiveEmployee]取值为"Y"的员工
  2. 进一步筛选其中拥有多份工作的员工
  3. 对符合条件的员工进行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)
)

逻辑说明

两种写法均以员工为核心维度:

  1. 遍历每个唯一的员工ID
  2. 计算该员工在职状态下的不同工作数量
  3. 判断数量是否大于1,符合条件则计数1,否则0
  4. 最终汇总所有符合条件的员工数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:05:01