【问题标题】:compare a measure to a value in a column将度量与列中的值进行比较
【发布时间】:2021-08-24 21:49:44
【问题描述】:

Power BI 菜鸟在这里,仍然像 SQL 编码器一样思考,所以请耐心等待。

如何使用报告运行人员的用户名来过滤报告?

为了方便我的用户,我想为他们提供一种自动过滤的方法,以仅查看与其办公室或地区相关的数据。我有一个 Person 表,其中包含他们的办公室位置等详细信息。如果我可以根据运行报告的人的用户名对其进行过滤,并将其加入到其余数据中,那就可以了。

很遗憾,我看不到在 M 中获取用户名的方法。

使用 DAX 中的 USERNAME() 函数,我看不到将其与列中的单个值进行比较的方法。我收到一个关于无法将度量与多个值进行比较的错误。

这似乎是一个常见的请求,所以我相信有人已经解决了这个问题。但我还没有找到解决办法。

【问题讨论】:

    标签: powerbi dax m


    【解决方案1】:

    在您的模型中使用 RLS。可以使用函数 USERNAME(),USEROBJECTID(), USERPRINCIPALNAME();如果您有包含用户及其电子邮件的表格,则最后一个很有用。

    https://docs.microsoft.com/en-us/power-bi/admin/service-admin-rls

    还请查看此 GuyInCube 视频: https://www.youtube.com/watch?v=MxU_FYSSnYU

    【讨论】:

      【解决方案2】:

      首先,请注意USERNAME()USERPRINCIPALNAME() 之间的differences。您很可能会想要使用后者。

      您不能在 M 中使用这两种方法。假设您的模型正在导入数据。 M 代码在一个用户的上下文中执行一次,然后访问已发布报告的每个其他用户将重用已加载和计算的模型。当然,这些是 DAX 函数,而不是 M。

      因此,在 DAX 中,您可以使用这些值将它们的值与模型中的列进行比较。您没有提供有关您的模型的任何信息,但可以说有一个表 Sales 与列 CustomerAmount

      Customer Amount
      Bill Gates@Microsoft.local 100
      Steve Ballmer@Microsoft.local 110

      在这种情况下,你可以这样写一个度量:

      My Sales = CALCULATE(SUM('Sales'[Amount]), 'Sales'[Client] = USERPRINCIPALNAME())
      

      当比尔·盖茨打开报告时,他会看到销售额为 100,而如果史蒂夫·鲍尔默打开它,他会看到 110。

      出于诊断目的,您可以进行这样的测量并将其显示在报告中的某处:

      Who am I = USERPRINCIPALNAME()
      

      如果您的目标是在 Power BI 中构建动态行级安全性,它的一些功能可能会对您有所帮助,因此请查看以下文章:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        相关资源
        最近更新 更多