先来回顾下在上篇文章时留下的问题,一个公司内部有很多业务员,分别归属于不同人的经理,现在要求业务员只能看到自己的数据,但是经理可以看到下面所有业务员的数据。
我们先来分析下这个问题,这个问题其实就是传播链路的问题,借用百科的组织架构图来看可能会更清楚些,比如账务审计部所在的链路就是:公司总裁办>总经理>常务副总>财务审计部,他之前的所有组织都有应该有权限看到他下面所有的数据。如果我们再给这条传播链路中的每个角色一个唯一编号,比如上面的链路是1>2>3>4。
![](/wp-content/uploads/2023/04/wxsync-2023-04-fba4bcaf0fbdc6623c2707d5f594083c.png)
这个思路我们可以在PowerBI中应用,我们需要先构造一张组织架构表
![](/wp-content/uploads/2023/04/wxsync-2023-04-c179126d85dfba69c26617afe3f67b7b.png)
其中层级为计算列,这里主要用到了PATH这个函数,详细用法见PATH – DAX Guide,公式如下:
层级 = PATH('权限控制'[业务员编码], '权限控制'[主管编码] )
![](/wp-content/uploads/2023/04/wxsync-2023-04-273e376573066a51220ee850bcb1c101.png)
接下来是角色权限的控制,我们只需要去控制权限控制表就好了。PATHCONTAINS的详细用法见PATHCONTAINS – DAX Guide
PATHCONTAINS (
'权限控制'[层级],
MAXX(
FILTER(
'权限控制',
'权限控制'[邮箱]= USERPRINCIPALNAME()
),
'权限控制'[主管编码]
)
)
![](/wp-content/uploads/2023/04/wxsync-2023-04-b8bf45dd713bbb2e4324a4b1719d00cc.png)
![](/wp-content/uploads/2023/04/wxsync-2023-04-4baae8c17a207c2af09927ef5e6adcb5.png)
相信看到效果后,代码已经不用解释了,上述代码作用很简单把包含当前查看者编码的所有记录都筛选出来。
我们在工作中遇到的实际情况肯定要比文章中的要复杂的多,有时因为模型的限制,我们写起起来可能要更复杂的多,但是遇到问题时不要怕,静下心来仔细想想怎么把那未知的问题转换为我们已知的问题,一步步拆解,可能就会变得相对来说容易些。
![](/wp-content/uploads/2023/04/wxsync-2023-04-ac64309fe10ed2ed032508a404b5057a.png)
![](/wp-content/uploads/2023/04/wxsync-2023-04-3a359a642e69c89391c1b9446e7e9d8d.jpeg)
本篇文章来源于微信公众号: PowerBI木小桼