在运行时动态更改报表的共享数据源

Dynamically changing Report's Shared Data Source at Runtime

我希望将 SSRS 用于多租户报告,并且我希望能够为我的报告使用运行时选择的共享数据源。这是什么意思?好吧,我可以灵活一些,但我认为最有可能的两种可能性是(不过,我也对其他可能性持开放态度):

  1. 共享数据源由客户端的身份验证决定。在我的例子中,"client" 是一个 .NET 应用程序而不是用户,所以如果这是一条可行的路径,那么我想以某种方式拥有 MainDB(这就是我所说的)由客户端登录的服务帐户选择的共享数据源。
  2. 将共享数据源的名称作为参数传递,并让它决定使用哪一个。鉴于我所有的客户都是 "trusted players",我对这种方法很满意。虽然每个客户都有自己的代表服务帐户,但这只是为了衡量标准,并不重要。因此,除了调用数据源 MainDB,我们还可以使用 Client1DBClient2DB 等。如果新数据源意味着新部署也没关系,但我需要它来轻松扩展随着时间的推移,也足以容纳约 50 个不同的数据源。

为什么?因为我们为多个客户准备了 multiple/duplicate 个生产应用程序副本,但我们不想复制 所有内容 ,只复制 Web 应用程序和数据库。我们可以接受一些常见的 "back-end" 事情。对于 SSRS,由于许可证非常昂贵(而且我们的用户很少报告 运行),我们真的希望为所有客户提供一个后端(我实际上有第二个备用手动灾难恢复情况 - 我们在这里不需要太花哨,因为报告是我们最不重要的 DR 问题)。

我看过 this question which points to this post 但我真的希望有比这更好的方法。由于所有这些额外的 steps/efforts/limitations/etc,我宁愿只使用 PowerShell 编写带有经过调整的硬编码数据源的报告的重复部署脚本,而不是对 post 中的步骤进行标准化。该解决方案对我来说感觉太老套了,而且似乎根本无法很好地扩展。

我用了很多糟糕的方法(通常硬编码在动态脚本中),然后我发现它实际上非常简单。

不使用共享连接,而是使用嵌入式连接并根据参数(或任何字符串操作代码)创建连接字符串....