power bi 实例有哪几种使用方式(利用一个应用场景)

本文分享一个父子层级结构的计算思路,源于昨天遇到星友提出这样一个问题,有两列数据,一列是邀请人、一列是被邀请人,示例如下图:

power bi 实例有哪几种使用方式(利用一个应用场景)(1)

被邀请人还可以继续邀请其他人,并且所有的下级都视作上级的邀请,如何计算每个人的邀请人数?

这种需求是不是很常见,逻辑描述起来非常简单,但是计算并不容易,因为这种结构的数据虽然只有两列,但邀请人和被邀请人是可以来回变动的,每个人的角色并不固定,并且下面有多少邀请层级也是未知。

这种数据结构就是父子层级结构,邀请人是父级别,被邀请人是子级别,在PowerBI中,有一类DAX函数,父子函数,专门处理这种结构的计算,它可以将父子层级结构转换为扁平的普通层级结构。

下面就以上面的需求为例,来介绍PowerBI处理这种计算的思路,并见识一下父子函数的用法。

步骤如下:

1. 补充完善原始数据

为了方便使用父子函数,我们需要先对上面示例的数据进行补充整理,为父子结构添加编号。

因为父子函数要求,所有父级列的数据都必须存在于子级列中,所以对于以上示例,添加一行,将最顶级的人员“李一”,添加到被邀请人中,这也容易理解,所有的人都是被邀请人,只是最顶级的人员,无上级邀请人而已。

然后对子级列,也就是每个被邀请人添加一列编号,并相应的把邀请人的编号匹配上去,你也可以先在Excel中做好这个表:

power bi 实例有哪几种使用方式(利用一个应用场景)(2)

这个表完善以后,下面就可以利用父子函数来转换层级了。

2. 将父子结构转换为普通层级结构

以下计算都是利用计算列完成,首先利用PATH函数来获取完整的层级路径:

层级路径 =

PATH('结构表'[被邀请人编号],'结构表'[邀请人编号])

power bi 实例有哪几种使用方式(利用一个应用场景)(3)

PATH函数有两个参数,第一个参数是子级的列,第二个参数是父级的列,它的计算结果是层级的完整路径,用 “|” 分割,通过这个路径,你可以看出每个人的上下级关系。

有了路径之后,下面就可以计算每一层级的人员。

第一层级可以这样来写:

power bi 实例有哪几种使用方式(利用一个应用场景)(4)

这里用到的父子函数是PATHITEM,它可以从层级路径中获取某一个层级的值,第二个参数是1,就是获取第一层级的值,这个例子第一层级都是1。

然后利用LOOKUPVALUE函数,从被邀请人编号中,找出1对应的被邀请人名称,也就是“李一”,所有人的第一级邀请人都是他。

同理,通过更改PATHITEM函数的第二个参数,获取第二、第三、第四个层级分别是谁:

power bi 实例有哪几种使用方式(利用一个应用场景)(5)

上表中的后面四列是4个层级,就是我们常见的普通层级结构。

如果层级很多,无法一眼看出每个人有多少个层级,还有个父子函数是PATHLENGTH,它用来计算层级的深度:

power bi 实例有哪几种使用方式(利用一个应用场景)(6)

这样就可以看出每个人的上级有几层了,后面也会用到这个深度。

3. 展现结果

有了上面的普通层级结构,就可以很方便的计算出每个人的邀请人数了,写个度量值:

邀请人数 =

DISTINCTCOUNT('结构表'[被邀请人])-1

因为计算邀请人数时,不应该计算自己,所以减去1,剩下的就是本人的邀请人数。

将所有的层级放到矩阵的行中,邀请人数作为值,结果如下:

power bi 实例有哪几种使用方式(利用一个应用场景)(7)

这样就一次性得到了每个人的邀请人数。

但是有一个问题,因为每个层级都有空值,所以这个矩阵结构有太多的空结构,有必要处理一下。

思路就是让空结构的计算结果等于空值,修正度量值如下:

power bi 实例有哪几种使用方式(利用一个应用场景)(8)

这个度量值的计算逻辑是,比较当前层级结构与当前数据的层级深度,如果当前结构小于等于层级深度,正常计算邀请人数,否则返回BLANK。

这个逻辑可能不太好理解,你可以根据上下文,比如矩阵的第一行李一,对于上面度量值中的变量X,返回1,变量Y也返回1,所以满足条件,正常计算邀请人数;而第二行,X返回2,但是Y还是1,所以不满足条件,返回BLANK。

用这个修正后的度量值制作矩阵,效果如下:

power bi 实例有哪几种使用方式(利用一个应用场景)(9)

这样就清晰直观了实现了该业务需求。

关于父子函数的计算,如果你刚开始接触,会感觉非常绕,其实理解了以后,并没有什么难度,关键是理解父子结构计算的整体思路,弄明白为什么需要将它转换为普通的层级结构,以及如何利用父子函数进行转换。

更多推荐:

PowerBI如何进行财年分析?

通过一个经典案例,来学习PowerBI可视化的制作思路

在PowerBI中如何快速计算员工在职天数?

power bi 实例有哪几种使用方式(利用一个应用场景)(10)

采悟 | PowerBI星球

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页