Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 如何基于用户名和位置应用动态行级安全性?_Powerbi_Powerbi Desktop_Row Level Security - Fatal编程技术网

Powerbi 如何基于用户名和位置应用动态行级安全性?

Powerbi 如何基于用户名和位置应用动态行级安全性?,powerbi,powerbi-desktop,row-level-security,Powerbi,Powerbi Desktop,Row Level Security,这与Power BI中的行级安全性有关。这是一个虚拟表,我想在它上面实现这个RLS 我现在使用的RLS公式是- [location] = LOOKUPVALUE([location],[login],USERPRINCIPALNAME()) 我的最终要求是让这个RLS在这样的情况下工作:如果用户登录,他应该看到他所在位置的数据,并且还应该看到同一位置的其他用户 但是查找抛出了一个错误: 提供了一个包含多个值的表,其中预期只有一个值 此外,单个用户可以访问多个位置,单个位置可以有多个用户 如

这与Power BI中的行级安全性有关。这是一个虚拟表,我想在它上面实现这个RLS

我现在使用的RLS公式是-

[location] = LOOKUPVALUE([location],[login],USERPRINCIPALNAME()) 
我的最终要求是让这个RLS在这样的情况下工作:如果用户登录,他应该看到他所在位置的数据,并且还应该看到同一位置的其他用户

但是查找抛出了一个错误:

提供了一个包含多个值的表,其中预期只有一个值

此外,单个用户可以访问多个位置,单个位置可以有多个用户


如何使用查找或任何其他可能的方式实现此级别的行级安全性?

您的要求也可以通过这种方式实现,您需要同时在Power BI桌面和应用服务器上工作才能正确实现

在桌面上
  • Power BI Desktop允许您创建角色。单击“管理角色” 然后单击创建新角色
  • 您需要根据此处的位置创建角色
  • 例如,创建一个名为位置a的规则,然后单击 表,并将公式提供给该表上的过滤器。例如 [位置]=“A”
  • 因此,您可以创建“n”个这样的角色,然后发布仪表板

    App.PowerBI.Com
  • 现在,打开app.powerbi.com,然后转到相应的数据集并 右键单击它,选择安全性-您将在那里找到组

  • 在组中,输入应该有权访问的电子邮件ID。 您可以在多个组中添加一个人,这将允许他们查看 不止一组

  • 测试
  • 桌面也可以让你测试它-你可以点击查看 角色,以查看该组中的用户看到的内容
  • 还要记住,只有能够访问仪表板的人才能看到仪表板中的数据。因此,您需要与他们共享,并且需要将他们添加到组中。如果你没有做到其中一点,那么他们就不会在仪表板上看到任何东西

    最有效的方法 这是一个更好的方法,我想这就是你想要的方法

    [login] = username() 
    
    函数username()自动获取登录用户的电子邮件地址

    在所需表中的新角色上创建上述筛选器。 这样,您仍然可以在相应数据集的安全部分下的角色中手动添加这50000个用户

    但是,如果它们都属于组织中的特定组,并且您的Office-365团队以正确的方式配置了后端,则您只需输入该组

    但大多数公司的后端没有这种配置,因为很难控制数据安全性

    更改数据模型 为了满足您的需求,您还需要更改数据模型

    最初需要有两个表

    值表-可以有许多列,比如name和all,但这并不重要

    位置的电子邮件地址表作为第二个表

    现在将位置从值表合并到电子邮件地址表,这将是您的最终表。使用这个可视化,但请在DAX上非常清楚-因为您可能有重复的行和不同的值

    现在在此表上创建RLS。它应该会起作用


    顾名思义,行级安全性应用于每一行。因此,将对每行单独计算公式。因此,您唯一的选择是拥有一个包含所有值的平面表。

    好吧,谢谢。但这只是一个虚拟数据。在原始数据中,我有50000个用户。因此,实际上不可能将角色分配给这么多用户。这就是为什么我一直在寻找更好的方法。有一种方法,给我一天时间,我会用一个工作原型来回答。非常感谢Sid29,我热切地等待你的工作原型。谢谢@Sid29,正如你在我的问题中看到的,在我使用的USERPRINCIPALNAME()的DAX公式中这有助于我做和你现在说的一样的事情。但我的最终要求是,如果用户登录,他还应该看到来自同一位置的其他用户的详细信息。通常使用USERNAME(),我只能看到此人的详细信息,但正如我在问题中所示,用户也可以有不同的位置。那么,在这种情况下,你知道如何让它工作吗?谢谢大家!@哦,很棘手的一个,不是吗。那你需要一张平桌。更新。这可能对你有帮助。请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。