如何将参数从Asp.net应用程序传递到Power BI

时间:2019-12-04 08:37:30

标签: stored-procedures powerbi azure-sql-database multi-tenant powerbi-desktop

我们在asp.net mvc中设计了多租户Web应用程序。我们的数据库存储在Azure上。我们在数据库中创建了安全策略,因此没有客户端可以看到另一个客户端的数据,并且在每个表中,每个条目都有租户ID。

我们使用Power Bi创建了一些仪表板,使用具有租户ID参数的sql存储过程访问数据。出于测试目的,我在Power Bi桌面内运行仪表板时提供了租户ID。现在,我们正在尝试将这些仪表板集成到我们的Web应用程序中。为此,我们在web.config文件中做了必要的更改。

问题是,我们将如何提供用户登录到电源bi的tenantID,以便用户只能看到该特定客户端的数据?

先谢谢了。

1 个答案:

答案 0 :(得分:0)

这取决于报告的storage mode(导入或DirectQuery)以及如何将其集成到您的应用程序中(Embedded APIPublish to web (public)Secure embed)。 / p>

如果存储模式为Imported,则意味着您的报告包含数据的副本。结果是您无法基于当前用户查询数据库并获取数据,因为数据的副本是一个,并且它与正在查看报表的所有用户共享。因此,数据应针对所有租户,并且您必须在每个用户会话中对其进行过滤。可以通过两种方式进行过滤-通过添加“常规”报告级别过滤器或通过实施Row-level security (RLS)

可以通过passing the filter in the URLdefining the filter in the embedded configuration进行过滤。第一个可以与Secure embed一起使用,而第二个则适用于使用Embedded API的情况。请注意,Publish to web方法不支持URL过滤器。重要的部分是,以这种方式添加的过滤器将在Filters pane中可见,并且用户可以对其进行修改或删除(因此,这不是保护数据的好方法)。如果您使用API​​嵌入报表,则可以通过在embed config中设置filterPaneEnabled: false来隐藏“过滤器”窗格,但这也将隐藏所有其他过滤器,最终用户将能够对数据进行切片仅使用您提供的视觉效果(例如,报告中的切片器)。另请注意,安全嵌入要求报表的每个查看器都具有Power BI Pro许可证 (或者,如果您发布报告的工作空间已分配了专用容量,即Power BI PremiumPower BI Embedded是Power BI Free许可证)。

使用RLS,您将在报告中包含所有租户的所有数据,而Power BI会为您过滤它,因此用户将仅看到与其租户相关的数据。这可以通过两种方式实现-为每个租户定义一个角色并将最终用户包括在相应的角色中,或者在报表中使用use userprincipalname() DAX函数以根据当前用户过滤数据。

我的建议是使用RLS,在这种情况下,这样做的好处是将只嵌入一个报表,并且根本不需要从您的应用程序将任何参数传递给它。