使用共享数据源来生成动态生成和部署的报告

时间:2009-11-25 14:17:01

标签: reporting-services ssrs-2008

我正在为SSRS 2008动态生成RDL文件,从“构建块”组合我的报告,我将其定义为Report Server上的报告,并将其用作生成报告的子报告。

在我的报表服务器上,我有一个共享数据源,只要我直接在报表服务器上运行东西,它就能正常工作。

我想要完成的是:

  • 我生成的主报告应该引用该共享数据源
  • 生成的主报告中包含的子报表也应使用相同的数据源
  • 在使用网络服务界面将报告部署到报告服务器之后,我希望能够立即真正看到报告

现在,我可以很好地生成和验证我的RDL,我也可以将它部署到报表服务器上 - 它显示出来并且非常好。

但是当我尝试查看该报告时,我收到一条错误消息,表明我的数据源无效或已被删除或某些内容.......

我错过了什么?我很确定我有正确的数据源 - 它的GUID和所有 - 并且名称匹配。如何告知生成的RDL使用服务器上已存在的共享数据源?

1 个答案:

答案 0 :(得分:20)

在这里回答我自己的问题,希望别人可能会觉得这很有用:

我感觉(假设)给服务器上的数据源的唯一“DataSourceID”足以唯一地识别它。

所以在我生成的RDL中,我有类似的东西:

  <DataSources>
    <DataSource Name="MyDataSource">
      <Transaction>true</Transaction>
      <DataSourceReference>MyDataSource</DataSourceReference>
      <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
      <rd:SecurityType>None</rd:SecurityType>
    </DataSource>
  </DataSources>

现在这个工作一次,当我的数据源确实被称为“MyDataSource”并且与我通过RS WebService API发布的报告位于同一目录中时。

一旦我将数据源移到别处,它就会停止工作。

解决方案:
这可能听起来很愚蠢,但我最初并没有“理解它”:DataSourceReference需要在报表服务器上为我想要引用的数据源提供完整且完整的“路径”。只指定唯一ID就行不了....

所以,一旦我将RDL更改为:

  <DataSources>
    <DataSource Name="MyDataSource">
      <Transaction>true</Transaction>
      <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>
      <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
      <rd:SecurityType>None</rd:SecurityType>
    </DataSource>
  </DataSources>

(注意<DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>

从那一刻起,它就像一个魅力。

希望有一天有人会发现这个有用!