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

mar*_*c_s 12 reporting-services ssrs-2008

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

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

我想要完成的是:

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

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

但是,当我尝试查看报告时,出现错误,我的数据源无效或已被删除或某些内容.......

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

mar*_*c_s 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>
Run Code Online (Sandbox Code Playgroud)

现在这个工作一次,当我的数据源确实被称为"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>
Run Code Online (Sandbox Code Playgroud)

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

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

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