首页 > 解决方案 > 如何将参数从 Asp.net 应用程序传递到 Power BI

问题描述

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

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

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

提前致谢。

标签: stored-procedurespowerbiazure-sql-databasemulti-tenantpowerbi-desktop

解决方案


这取决于您的报告的存储模式(导入或 DirectQuery)以及它将如何集成到您的应用程序中(嵌入式 API发布到 Web(公共)安全嵌入)。

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

过滤可以通过在 URL 中传递过滤器在嵌入式配置中定义过滤器来实现。第一个可以与 Secure embed 一起使用,而后者在使用 Embedded API 时适用。请注意,该Publish to web方法不支持 URL 过滤器。重要的是,以这种方式添加的过滤器将在“过滤器”窗格中可见,用户可以修改或删除它(因此这不是保护数据的好方法)。如果您使用 API 嵌入报告,您可以通过filterPaneEnabled: false嵌入配置中进行设置来隐藏过滤器窗格,但这也会隐藏所有其他过滤器,最终用户将只能使用您提供的视觉效果(例如报表中的切片器)对数据进行切片。另请注意,安全嵌入要求报表的每个查看者都具有 Power BI Pro 许可证(或者,如果您发布报表的工作区具有分配的专用容量,即Power BI PremiumPower BI Embedded,则需要 Power BI 免费许可证)。

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

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


推荐阅读