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

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

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

问题描述

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

具体问题如下图所示:

本案例的初始数据如下:

Employee:

id name managerId
101 John
102 Dan 101
103 James 101
104 Amy 102
105 Anne 102
106 Ron 102
107 Jack 103
108 Dami 103
109 Tom 107

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

解题要点

本案例的数据结构是典型的父子层级结构,因此可以先使用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

赞(0) 打赏
未经允许不得转载:夕枫 » 如何在PowerBI中处理父子层级结构?
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

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

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

支付宝扫一扫打赏

微信扫一扫打赏