【问题标题】:Call a stored procedure from Power BI with a DAX parameter使用 DAX 参数从 Power BI 调用存储过程
【发布时间】:2017-01-16 16:18:13
【问题描述】:

我目前正在使用 Power BI Desktop 和 SQL Server 2014 处理我的上级提出的 POC(概念证明)(长话短说,他说我们能够做到我所要求的无需知道它是否可能......)。

当我使用 SQL 指令(在高级选项)

查询:Sql.Database("SERVER\INSTANCE", "DatabaseName", [Query="EXECUTE [dbo].[StoredProcedureName]"])
来源:How to use SQL Server stored procedures in Microsoft PowerBI?

我还可以使用USERNAME() DAX 公式显示我的 Windows 登录信息。

我们使用了很多以windows登录为参数的存储过程,我知道当Power BI报告在线发布时USERNAME()不会返回相同的值,所以我需要创建一个表这将允许我在用户的 Windows 登录名和他/她的 Power BI 帐户(电子邮件地址)之间建立对应关系。

我的问题很简单:我想知道是否可以使用 Power BI 调用存储过程,使用 USERNAME() 的结果作为此存储过程的参数。

感谢任何帮助,我现在很困惑,因为我之前没有使用过 Power BI...

【问题讨论】:

  • 其他人可能有解决方案,但不支持 AFAIK 这种情况。
  • @MikeHoney 我很确定它不受支持,但问它没有任何成本...感谢您回答我的帖子

标签: sql-server powerbi


【解决方案1】:

我无法按照您的要求进行操作(在 DAX 中获取 USERNAME() 的结果,然后将其作为参数传递给查询编辑器中的存储过程)。

我也不知道有什么方法可以直接从查询编辑器中获取当前用户信息,尽管这篇文章有一些可能可行的建议:https://querypower.com/2017/04/03/4-ways-to-get-username-in-power-query/

我要说的是,Power BI 确实包含我强烈建议考虑的行级安全功能:https://powerbi.microsoft.com/en-us/documentation/powerbi-admin-rls/

也可以在 SSAS 中实现行级安全性:https://powerbi.microsoft.com/en-us/documentation/powerbi-desktop-tutorial-row-level-security-onprem-ssas-tabular/

这将需要更改您的设计,以便在用户运行报表时不再使用接受文本参数的存储过程,然后仅返回该用户的数据,而是为您的模型提取数据所有用户,然后 Power BI 将使用 RLS 为查看报告的人筛选结果。

这样做的一个好处是每个人都可以访问同一底层数据模型的过滤版本,因此数据模型本身不必为每个出现的用户完全刷新(这意味着更少的等待时间)用户)。

另一个优势是您将使用 Power BI 提供的内置安全工具,而不是使用您自己的映射表滚动您自己的解决方案。 (并不是说您的解决方案不好,但如果您根据自己的映射表推出自己的解决方案,则会带来更多风险和更少的支持。)

由于您已经知道 DAX 中的 USERNAME() 参数,我想您已经/已经知道 RLS 并已将其排除(尽管在您提出问题时它还相当新)。但由于尚未提及,我想我至少应该为其他可能尝试做同样事情的人提及它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2021-12-18
    相关资源
    最近更新 更多