如何用DAX在Power BI中统计在职员工数(处理历史行重复计数问题)
解决DAX统计在职员工数的去重问题
你的员工表存在同一员工多条历史记录的情况(如ID1001因薪资变更有3条记录,其中两条状态为Active,但该员工已于2023年8月3日离职)。直接使用COUNT配合Status='Active'筛选会重复计数,得到错误结果3,而实际正确的在职员工数为2。
以下是针对实时在职场景的DAX解决方案:
方法1:定位最新记录后统计在职人数
在职员工数 = VAR 最新记录 = ADDCOLUMNS( VALUES('emp'[员工ID]), "最新日期", CALCULATE(MAX('emp'[记录日期])) ) VAR 当前在职员工 = FILTER( 'emp', ('emp'[员工ID], 'emp'[记录日期]) IN 最新记录 && 'emp'[Status] = "Active" ) RETURN COUNTROWS(DISTINCT(当前在职员工[员工ID]))
方法2:简化版筛选最新在职员工
在职员工数 = DISTINCTCOUNT( FILTER( 'emp', 'emp'[记录日期] = CALCULATE(MAX('emp'[记录日期]), ALLEXCEPT('emp', 'emp'[员工ID])) && 'emp'[Status] = "Active" )[员工ID] )
说明
两种方法核心逻辑一致:先找到每个员工的最新记录,再筛选其中状态为Active的员工,最后统计唯一的员工ID数量。这样既避免了同一员工的重复计数,又确保只统计当前在职的员工(排除像ID1001这类已离职但历史有Active记录的员工)。
如果业务需求是统计所有曾处于Active状态的员工(含已离职),可直接使用:
曾在职员工数 = DISTINCTCOUNT(FILTER('emp', 'emp'[Status] = "Active")[员工ID])
内容的提问来源于stack exchange,提问作者Baktha Singh Babu
相关产品推荐
相关产品推荐

