Power BI DAX:计算符合全月分配条件的筛选员工数量
Power BI DAX 问题修复:职级细分统计错误
问题背景
现有员工月度分配数据集,通过日期切片器筛选数据,已用DAX度量值筛选出**所有筛选月份均有分配(分配值>0)**的员工,对应矩阵视觉对象显示正常。但在统计总唯一员工数的度量值中,总数值正确,但按职级细分时统计结果错误。
原布尔筛选度量值:
Employee Allocated All Months Boolean = Var _count = CALCULATE( DISTINCTCOUNT('Calendar'[Month]), FILTER( ALLSELECTED(Competency), Competency[Emp Code] = MAX(Competency[Emp Code]) ) ) Var _total = CALCULATE( DISTINCTCOUNT('Calendar'[Month]), ALLSELECTED(Competency) ) RETURN IF(_count = _total, 1)
原统计度量值:
Total Unique Resources - Test = CALCULATE( DISTINCTCOUNT(Competency[Emp Code]), FILTER( Competency, [Employee Allocated All Months Boolean] = 1 ) )
问题根源
原布尔度量值中使用MAX(Competency[Emp Code]),在无维度(如职级)的全局上下文时,能正确匹配单个员工编码;但添加职级等维度分组后,MAX(Competency[Emp Code])会返回当前职级分组内的最大员工编码,而非逐个员工判断是否满足“所有筛选月份均有分配”的条件,导致筛选逻辑失效,职级细分统计错误。
解决方案
方案1:重构布尔度量值+更新统计逻辑
修改布尔度量值,使其基于单个员工上下文计算,不受外部维度干扰:
Employee Allocated All Months Boolean = VAR SelectedMonths = CALCULATE(DISTINCTCOUNT('Calendar'[Month]), ALLSELECTED('Calendar')) VAR EmployeeMonths = CALCULATE(DISTINCTCOUNT('Calendar'[Month]), ALLEXCEPT(Competency, Competency[Emp Code])) RETURN IF(EmployeeMonths = SelectedMonths, 1, 0)
更新统计度量值,针对单个员工维度筛选:
Total Unique Resources = CALCULATE( DISTINCTCOUNT(Competency[Emp Code]), FILTER( VALUES(Competency[Emp Code]), [Employee Allocated All Months Boolean] = 1 ) )
方案2:合并逻辑到统计度量值(无需单独布尔度量)
直接在统计度量值中逐个员工判断条件,避免上下文冲突:
Total Unique Resources = VAR SelectedMonths = CALCULATE(DISTINCTCOUNT('Calendar'[Month]), ALLSELECTED('Calendar')) RETURN SUMX( VALUES(Competency[Emp Code]), VAR EmpMonths = CALCULATE(DISTINCTCOUNT('Calendar'[Month]), ALLEXCEPT(Competency, Competency[Emp Code])) RETURN IF(EmpMonths = SelectedMonths, 1, 0) )
说明
两种方案均通过ALLEXCEPT(Competency, Competency[Emp Code])锁定单个员工的上下文,确保计算每个员工在所选月份中的分配月数,再与总筛选月数对比,无论是否添加职级等维度分组,都能正确统计符合条件的员工数量。
内容的提问来源于stack exchange,提问作者Asad Hussain
相关产品推荐
相关产品推荐

