如何计算排除当前员工数据后的平均时长及影响百分比?
解决方案
假设你的数据存储在名为任务时长表的表中,包含员工姓名和完成时长字段,以下是具体的DAX计算逻辑:
1. 计算排除当前员工后的整体平均时长
创建计算列,用CALCULATE结合FILTER和EARLIER锁定当前行员工,排除其所有数据后计算平均:
排除当前员工的平均时长 = CALCULATE( AVERAGE('任务时长表'[完成时长]), FILTER( ALL('任务时长表'[员工姓名]), // 清除当前员工的筛选上下文 '任务时长表'[员工姓名] <> EARLIER('任务时长表'[员工姓名]) // 排除当前行对应的员工 ) )
ALL('任务时长表'[员工姓名]):确保计算范围覆盖所有员工,不受当前行的员工筛选限制EARLIER:引用外部行上下文的员工姓名,精准定位当前行要排除的员工
如果需要保留其他筛选条件(比如部门、年份),把ALL换成ALLEXCEPT即可保留指定维度的筛选:
排除当前员工的平均时长(保留部门筛选) = CALCULATE( AVERAGE('任务时长表'[完成时长]), FILTER( ALLEXCEPT('任务时长表', '任务时长表'[部门]), // 仅清除员工姓名筛选,保留部门维度的筛选 '任务时长表'[员工姓名] <> EARLIER('任务时长表'[员工姓名]) ) )
2. 计算员工对整体平均时长的增减百分比
先创建计算列得到整体平均时长,再对比“整体平均”与“排除当前员工后的平均”计算变化率:
整体平均时长 = AVERAGE('任务时长表'[完成时长])
员工对平均的增减百分比 = DIVIDE( [整体平均时长] - [排除当前员工的平均时长], [排除当前员工的平均时长], 0 // 处理除数为0的异常情况,返回0 )
公式逻辑:该员工加入后,整体平均相对于“无该员工时的平均”的变化比例——结果为正说明该员工拉高了整体平均,为负则说明拉低了平均。
常见问题说明
之前用ALL/ALLEXCEPT没成功,大概率是没结合EARLIER锁定当前行的员工。单独用ALL会清除所有筛选,但无法精准排除当前行对应的员工,必须用FILTER配合EARLIER才能定位要排除的对象。
内容的提问来源于stack exchange,提问作者Newbie1228
相关产品推荐
相关产品推荐

