12

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

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

我想要完成的是:

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

现在,我可以很好地生成和验证我的 RDL,我也可以很好地将它部署到报表服务器 - 它显示出来了,一切都很好。

但是当我尝试查看报告时,我收到一个错误,我的数据源无效或已被删除或其他什么......

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

4

1 回答 1

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>

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

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

于 2009-12-03T15:03:17.670 回答