我正在为SSRS 2008动态生成RDL文件,从“构建块”组合我的报告,我将其定义为Report Server上的报告,并将其用作生成报告的子报告。
在我的报表服务器上,我有一个共享数据源,只要我直接在报表服务器上运行东西,它就能正常工作。
我想要完成的是:
现在,我可以很好地生成和验证我的RDL,我也可以将它部署到报表服务器上 - 它显示出来并且非常好。
但是当我尝试查看该报告时,我收到一条错误消息,表明我的数据源无效或已被删除或某些内容.......
我错过了什么?我很确定我有正确的数据源 - 它的GUID和所有 - 并且名称匹配。如何告知生成的RDL使用服务器上已存在的共享数据源?
答案 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>
)
希望有一天有人会发现这个有用!