在PowerBI中找出各部门工资前三高的员工

了解各部门薪资分布情况是一个常见但重要的分析需求,本篇文章将介绍如何在PowerBI中实现各部门工资前三高员工的筛选与计算。

问题描述

自行建模计算,在允许并列排名的情况下找出各部门工资前三高的员工,并保证总计正确。

具体问题如下图所示:

本案例的初始数据如下:

部门表:

iddepartment
1IT
2Sales

员工表:

idnamesalarydepartmentId
1Joe850001
2Henry800002
3Sam600002
4Max900001
5Janet690001
6Randy850001
7Will700001

若需其它辅助表等,可自行创建并建模。

解题要点

该案例不算复杂,只需要先找出各部门的薪资排前三的员工,然后再做判断或者做筛选器相交来限制返回结果即可。

另外,由于本案例的排名是允许并列排名的,因此不能直接使用TOPN函数来查找薪资排前三的员工,因为TOPN函数的排名算法是SKIP样式的,而本案例需要用到DENSE样式的排序。

虽然无法使用TOPN函数来查找薪资排前三的员工,但可以用来查找前三高的薪资,只要对薪资去重后再使用TOPN函数即可。

解决方案

首先,数据模型如下图所示:

然后,创建如下度量值,以下提供三种方法:

Top3 Salary 1 = 
CALCULATE(
    SUM('员工表'[salary]),
    KEEPFILTERS(
        FILTER(
            CROSSJOIN(VALUES('部门表'[department]),ALL('员工表'[name])),
            RANKX(
                ALL('员工表'[name]),
                CALCULATE(SUM('员工表'[salary])),,DESC,DENSE
            )<=3
        )
    )
)
Top3 Salary 2 = 
CALCULATE(
    SUM('员工表'[salary]),
    WINDOW(
        1,ABS,3,ABS,
        ALL('员工表'[salary],'员工表'[departmentId]),
        ORDERBY('员工表'[salary],DESC),
        PARTITIONBY('员工表'[departmentId])
    )
)
Top3 Salary 3 = 
SUMX(
    VALUES('部门表'[department]),
    CALCULATE(
        SUM('员工表'[salary]),
        TOPN(
            3,
            CALCULATETABLE(VALUES('员工表'[salary]),ALL('员工表'[name])),
            '员工表'[salary]
        )
    )
)

然后创建一个矩阵,并将部门和员工姓名字段作为行标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:

总结

以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!

PBI/DAX技术交流群(QQ):344353627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值