使用 DAX 参数从 Power BI 调用存储过程

Call a stored procedure from Power BI with a DAX parameter

我目前正在使用 Power BI Desktop 和 SQL Server 2014 进行 POC(概念验证),我的上级要求(长话短说,他说我们能够在不知道是否可能的情况下按照我的要求去做...)。

当我使用 SQL Server 创建新数据源时,我能够在 Power BI 中看到存储过程的结果]SQL指令(在高级选项中输入)

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

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

我们使用了很多将 windows 登录名作为参数的存储过程,我知道 USERNAME() 不会 return Power BI 报告时的相同值在线发布,因此我需要创建一个 table,这将使我能够在用户的 Windows 登录和 his/her Power BI 帐户(电子邮件地址)之间建立对应关系。

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

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

我无法完成您要求的操作(在 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 提供的内置安全工具,而不是使用您自己的映射 table 滚动您自己的解决方案。 (并不是说您的解决方案不好,而是如果您根据自己的映射 table 推出自己的解决方案,风险会增加,支持也会减少。)

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