Power BI中如何用Measure筛选切片器?表格可用但切片器失效
Power BI切片器用户权限筛选失效问题
我在报表中使用NomData(对应示例的EventTypeCode/Account表)和ReadData_Perm(对应UserLogin/EventTypeCode表)两张表,编写了如下DAX度量值,用于根据当前登录用户筛选允许查看的EventTypeCode:
FilterEventByUser = IF( MAX(dlg_V_User_ReadData_Perm[UserLogin]) = USERPRINCIPALNAME() && MAX(dlg_V_User_ReadData_Perm[EventTypeCode]) = MAX(Nomenklaturen[EventTypeCode]) //MAXX(dlg_V_User_ReadData_Perm, dlg_V_User_ReadData_Perm[UserLogin]) = USERPRINCIPALNAME() //&& MAXX(dlg_V_User_ReadData_Perm, dlg_V_User_ReadData_Perm[EventTypeCode]) = MAXX(Nomenklaturen, Nomenklaturen[EventTypeCode]) , 1, 0 )
这个度量值作为表格可视化的筛选器时能正常工作,但应用到切片器上时,所有EventTypeCode选项都消失了。我试过用MAX和MAXX函数,只有表格能正常生效,请问怎么让这个度量值可以作为切片器的筛选器?
示例数据:
// NomData表(对应代码中的Nomenklaturen) EventTypeCode;Account 11;Piers 11;Elizabeth 13;Neil 13;Melanie 13;Joshua 14;Madeleine // ReadData_Perm表(对应代码中的dlg_V_User_ReadData_Perm) UserLogin;EventTypeCode Christian@test.org;11 Christian@test.org;14 Jessica@test.org;13
(测试时请将Jessica@test.org替换为你的登录账号)
解决方案
问题出在原有度量值的逻辑上:当作用于切片器时,切片器会逐个遍历EventTypeCode值,但MAX(dlg_V_User_ReadData_Perm[UserLogin])只会返回权限表中的最大用户登录名,无法和当前用户做精准匹配。需要调整逻辑,改为判断当前EventTypeCode是否在当前用户的权限列表中:
修正后的DAX度量值
FilterEventByUser = VAR CurrentUser = USERPRINCIPALNAME() VAR AllowedEventCodes = CALCULATETABLE( VALUES(dlg_V_User_ReadData_Perm[EventTypeCode]), dlg_V_User_ReadData_Perm[UserLogin] = CurrentUser ) RETURN IF(MAX(Nomenklaturen[EventTypeCode]) IN AllowedEventCodes, 1, 0)
逻辑说明
- 用
CurrentUser变量获取当前登录用户的账号 - 通过
CALCULATETABLE和VALUES提取该用户所有有权限的EventTypeCode列表 - 判断当前上下文的
EventTypeCode是否在权限列表中,符合条件返回1,否则返回0
应用步骤
将这个新的度量值添加到切片器的筛选器中,设置筛选条件为“值等于1”,就能正常显示当前用户有权限的EventTypeCode选项了。
内容的提问来源于stack exchange,提问作者Johnny Spindler
相关产品推荐
相关产品推荐

