如何在PowerBI中处理父子层级结构?

父子层级结构是一种常见的数据组织形式,本篇文章将介绍如何在PowerBI中使用PATH系列函数来处理这种典型的层级数据。

问题描述

自行建模计算,计算各员工的直接下属的数量。注意:计算的是直接下属,下属的下属虽然都是下属,但却并不是直接下属。

具体问题如下图所示:

本案例的初始数据如下:

Employee:

idnamemanagerId
101John
102Dan101
103James101
104Amy102
105Anne102
106Ron102
107Jack103
108Dami103
109Tom107

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

解题要点

本案例的数据结构是典型的父子层级结构,因此可以先使用PATH函数来获取层级路径,例如:

然后就可以从层级路径中通过关键字查找,来过滤出直接下属的数据,这也是在DAX中处理父子层级结构的常用套路。

但如果回归到案例本身,其实还可以直接筛选经理ID等于当前员工ID的方法来解决,这也更简单直接。

解决方案

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

然后,创建如下度量值,这里提供两种方法:

直接下属数量 1 = 
VAR TempTbl = ADDCOLUMNS(ALL('Employee'),"Level",PATH('Employee'[id],'Employee'[managerId]))
VAR CurID = MAX('Employee'[id])
VAR CurLevel = MAXX('Employee',PATH(Employee[id],'Employee'[managerId]))
RETURN
COUNTROWS(FILTER(TempTbl,FIND(CurID,[Level],,0) && PATHLENGTH(SUBSTITUTE([Level],CurLevel,""))=2))+0
直接下属数量 2 = CALCULATE(COUNT('Employee'[id]),'Employee'[managerId]=MAX('Employee'[id]),ALL('Employee'[name]))+0

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

总结

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

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、付费专栏及课程。

余额充值