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

时间:2016-09-08 16:18:48

标签: sql-server powerbi

我目前正在使用Power BI Desktop和SQL Server 2014进行POC(概念验证),我的上司要求(长话短说,他说我们能够做到这一点&#39 ; m在不知道是否可能的情况下询问...... )。

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

查询: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 ......

1 个答案:

答案 0 :(得分:2)

我没办法做你要做的事情(在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并已将其排除(尽管在您提出问题时它是相当新的)。但由于它没有被提及,我认为至少应该为那些可能尝试做同样事情的人提起它。