从Power BI调用带有DAX参数的存储过程



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

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

查询:Sql.Database("SERVERINSTANCE", "DatabaseName", [Query="EXECUTE [dbo].[StoredProcedureName]"])
来源:如何在Microsoft PowerBI中使用SQL Server存储过程?

我也能够使用USERNAME() DAX公式显示我的Windows登录。

我们使用了许多将windows登录作为参数的存储过程,并且我知道USERNAME()将不会在在线发布Power BI报告时返回相同的值,因此我需要创建一个表,使我能够在用户的windows登录和他/她的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提供的内置安全工具,而不是使用自己的映射表来运行自己的解决方案。(不是说你的解决方案不好,但如果你基于自己的映射表推出自己的解决方案,风险会更大,可用的支持也会更少。)

由于您已经知道DAX中的USERNAME()参数,我认为您已经/已经知道RLS并已排除了它(尽管在您提出问题时它是相当新的)。但是既然还没有提到,我想我至少应该为那些可能正在尝试做同样事情的人提一下。

最新更新