是否可以通过Web服务在执行SSRS报告期间指定数据源?

时间:2010-07-27 14:50:44

标签: sql-server web-services reporting-services ssrs-2008

我有一台托管我们的生产和开发数据库的服务器。它使用SQL Server Reporting Services运行SQL Server 2008(而不是R2)。

我将VS 2008 Reporting Services项目部署到服务器以提供报告。所有报告都使用单个共享数据源,目前指向生产数据库。

其他地方的后台服务通过Web服务界面向SSRS创建PDF报告。

我的问题是,在这种环境下,是否可以通过Web服务以编程方式更改要在执行期间使用的数据源,以便报告使用dev或production数据库? / p>

我不想修改共享数据源或报表定义,我只想在执行报表之前设置数据库的名称,我看不出这是怎么回事。

我能看到的唯一“简单”解决方案是安装另一个报表服务器实例,这对我想要的东西来说似乎有些过分。除非有人给我一个狡猾的答案,否则我即将这样做!

3 个答案:

答案 0 :(得分:8)

是的,试试这个:

  1. 创建两个报告参数“Server”和“Database”(您应该创建一个默认值,以便默认运行报告)
  2. 将数据源定义为表达式,如下所示:

    =“data source =”&参数!Server.Value& “;初始目录=”&参数!Database.Value

  3. 现在,您应该能够在运行时动态指定数据库和服务器

    请记住,底层数据集定义需要在您执行报告的每个数据库和服务器中有效。

    你也可以通过像这样的网址字符串传递参数:

    http://server/reportserver?/dir/Report&rs:Command=Render&Server=VALUE1&Database=VALUE2
    

    请记住,这些需要进行网址编码并记住传递值,而不是标签,如果它们不同的话。

答案 1 :(得分:4)

修改 - 另一个建议

让Visual Studio中的数据源指向开发数据库。将已部署的数据源指向生产数据库。将数据源设置为不在部署时覆盖现有数据源。这意味着VS中的所有开发都将针对开发数据库,​​但是当您部署报表时,它将使用先前部署的指向生产数据库的数据源。

原始建议

我们有类似的问题 - 我们有一套报告需要能够在历史财务年度的任何数据库上运行,因此用户需要能够选择运行报告的数据库。

Reporting Services的优势在于一切都是表达式,数据集的SQL也不例外。我们所做的是修改SQL以使用用户选择的数据库。

设置如下: 在公共数据库中的Sql Server上,我们创建了一个名为DatabaseLookup的表,其中包含DatabaseLabel(显示名称)和DatabaseName(数据库的实际名称)字段以及INT SortOrder,因此我们可以在创建新数据库时按顺序向后排序数据库一。 在Reporting Services中,我们创建一个指向我们的公共数据库的数据源和一个名为Databases的新数据集,该数据集使用该数据源:

SELECT DatabaseLabel, DatabaseName
FROM DatabaseLookup
ORDER BY SortOrder

设置一个名为Database的参数,它使用数据库数据集,其值字段= DatabaseName,Label字段= DatabaseLabel,未查询的默认值为我们当前的数据库。

现在我们将报表主表的SQL修改为表达式。假设我们的SQL看起来像这样:

SELECT SomeField, OtherField
FROM SomeTable

我们将其转换为计算表达式,如下所示:

="SELECT SomeField, OtherField "
&"FROM " & Parameters!Database.Value & ".dbo.SomeTable "

所选数据库的标签也以小字体包含在标题中,以便人们知道他们正在查看哪些数据。

当新的财政年度出现时,我们只需在DatabaseLookup表中添加一个新行,系统中的每个报表现在都可以使用该新数据库。

答案 2 :(得分:0)

我目前的答案(我不满意)是有2个VS 2008项目包含报告。一个用于开发报告,一个用于生产。每个都使用不同的数据源,并部署到/ Reports / Development和/ Reports / Production下的同一SSRS实例中。

在Dev项目中开发/更改报告,然后将其复制到Production,并在准备好后更改数据源名称。

我讨厌这个解决方案,但它无法通过Web服务更改执行时的数据源,因为副作用允许我在部署期间将报告放入不同的文件夹中VS项目。

我仍然不认为这是一个答案,我的躲闪0分! :)