人生没有彩排
每一天都是现场直播

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

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

问题描述

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

具体问题如下图所示:

本案例的初始数据如下:

部门表:

id department
1 IT
2 Sales

员工表:

id name salary departmentId
1 Joe 85000 1
2 Henry 80000 2
3 Sam 60000 2
4 Max 90000 1
5 Janet 69000 1
6 Randy 85000 1
7 Will 70000 1

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

解题要点

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

另外,由于本案例的排名是允许并列排名的,因此不能直接使用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

赞(0) 打赏
未经允许不得转载:夕枫 » 在PowerBI中找出各部门工资前三高的员工
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫打赏

微信扫一扫打赏