2.13 PowerBI数据建模-TREATAS解决USERELATIONSHIP在行级别权限的坑

加入 PowerBI自己学 知识星球:下载源文件,边学边练;遇到问题,提问交流,有问必答。

在使用了行级别权限的报告中,会按照用户角色通过设定权限的表的实线关系筛选模型。如果这个设定权限的表上有实线关系也有虚线关系,在度量值中使用USERELATIONSHIP来切换调用虚线关系的时候,对于不受行级别权限影响的报告开发者和用户,不会遇到问题;发布报告给有角色权限的用户后,会出现如下报错:无法使用UseRelationship()和CrossFilter()函数,因为它受行级别安全性的约束。

举例  

张三是销售人员,负责分部客户C,还负责总部客户总部一,报告中需要体现张三负责的分部客户的购进,也需要体现他负责的总部客户的购进,总部客户的购进等于总部对应的所有分部客户购进之和。

人员客户表

销量表

模型  

角色权限

度量值

分部购进:

Sales_分部 = SUM('销售表'[销量])

总部购进,使用USERELATIONSHIP:

Sales_总部 = CALCULATE(SUM('销售表'[销量]), USERELATIONSHIP('人员客户表'[客户], '销售表'[总部客户]))

不使用行级别权限时,度量值显示正常。

以张三的角色查看,张三只能看到C客户的分部购进,总部购进的度量值会报错。

解决方案  

行级别权限沿着实线关系去筛选数据,度量值使用USERELATIONSHIP调用虚线关系,两条关系筛选同一个表就会产生冲突。微软描述如下:

首先,需求是张三可以看到自己负责的分部客户的销售数据,同时也可以看到他负责的总部客户对应的销售数据,这是个并集的需求。所以,我们需要按照客户和客户总部同时给张三配置权限。

其次,在总部购进的度量值中,使用ALL清除实线关系,并使用TREATAS建立虚拟关系,替换USERELATIONSHIP。

操作步骤  

STEP 1 在人员客户表中新建计算列,通过CALCULATE+VALUES+FILTER为客户总部找到其对应的人员。

总部人员 =

CALCULATE(

    VALUES('人员客户表'[人员]),

    FILTER('人员客户表','人员客户表'[客户]=EARLIER('人员客户表'[客户总部]))

)

STEP 2 设置行级别权限。点击菜单栏建模下的管理角色,角色名称改为张三,在人员客户表中做筛选,规则选任何取并集,人员等于张三或总部人员等于张三。

STEP 3 书写总部购进度量值。通过ALL清除人员客户表对销量表的实线关系,然后通过TREATAS建立虚拟关系,让人员客户表的客户筛选销量表的客户总部。

Sales_总部_TREATAS =

CALCULATE(SUM('销量表'[销量]),

    ALL('人员客户表'),

    TREATAS(VALUES('人员客户表'[客户]),'销量表'[客户总部])

)

点击菜单栏建模下的通过以下身份查看,选择张三,分部购进和总部购进的度量值正常显示。

拓展

复制一份销量表,作为总部客户的销量表,通过客户总部与人员客户表建立实线关系,也能达到目的,但是这种方案会带来冗余数据,尤其是事实表通常行数比较多,不推荐这样做,事实表小可以考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值