mar*_*c_s 12 reporting-services ssrs-2008
我正在为SSRS 2008动态生成RDL文件,从"构建块"组合我的报告,我将其定义为Report Server上的报告,并将其用作生成报告的子报告.
在我的报表服务器上,我有一个单独的共享数据源,只要我直接在报表服务器上运行东西,它就能正常工作.
我想要完成的是:
现在,我可以很好地生成和验证我的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>
)
从那一刻起,它就像一个魅力.
希望有一天有人可能会发现这个有用!