如何在 POWER BI 报表中检索已登录的用户名。一种适用于直接查询的完美替代方案
这个技巧提供了一种适用于直接查询的完美替代方案。
引言
很多时候,我都会向谷歌先生寻求解决方案,将用户名作为参数传递给 POWERBI 报告,用于各种开发目的。谷歌提供了很多细节,但不幸的是,它们并不符合我的要求。不过,我还是要感谢所有在谷歌论坛上贡献想法和实现的人们。
我希望我的方法是传递用户名作为参数的完美替代方案,甚至可以将其作为数据集获取。要实现此方法,我们需要 Analysis Services 以 TABULAR 模式运行,因为 POWERBI 支持 Tabular 模型。
首先,创建存储过程来实现你的逻辑,你想将用户名作为参数传递到其中。假设这个存储过程是“usp_StoredProc1
”,参数名称是“@UserName
”。
create procedure usp_StoredProc1--Your Storedproc name
(
@UserName nvarchar(100)
/*
Add Other parameters
*/
)
AS
BEGIN
/*
Your Logic Here
*/
END
现在,创建一个存储过程来执行第一个存储过程,在 SQL Server 的 master 数据库中获取已登录的用户名。用户名执行示例如下
create procedure usp_StoredProc2
AS
BEGIN
Declare @UName varchar(15) = NULL
Select @UName = SYSTEM_USER
–Execute AS USER = ‘your desired username’ — use this if you want
— to execute stored proc with other user
Execute <>.<>.usp_StoredProc1 @UserName = @UName
–REVERT –If you are using Execute as User you need to use this
END
在 PowerBI 报告中,选择数据源 SQL Server,并使用以下语法编写命令
select *
from
openrowset('SQLOLEDB','SERVER=Server Name;Trusted_Connection=yes;',' _
set fmtonly off;exec master.dbo.Stored Proc Name')
上面的查询将根据用户名过滤结果。
可能出现的问题
如果你只安装了带有命名实例的 SSAS,此方法可能无法工作。
注意
所有访问用户都需要对 SQL Server 具有公共访问权限。
历史
- 2019年7月2日:初始版本