我的 Reporting Services 2005 报告有错误:“参数 UserID 是只读的”。经过一些研究后,我找到了一个有效的解决方案。我从报告管理器 Web 界面打开报告并更改了此内容:
..对此:
进行此更改后,报告可以正常工作!太棒了!
因此,我想我将下载修改后的 RDL,以便我可以看到更改并将更正后的 RDL 放入我的源代码存储库中。因此,我下载了 RDL:
但是我的 diff 工具告诉我 RDL“之前”版本与 RDL“之后”版本相同。确信我的 diff 工具是错误的,我尝试了另一个。果然,RDL 没有任何区别。
我错过了什么?更改是否反射(reflect)在 RDL 之外的其他位置,或者 Reporting Services 是否没有提供正确版本的 RDL?无论哪种情况,我怎样才能获得正确版本的 RDL?
谢谢。
最佳答案
TL/DR 版本:Reporting Services 没有为您提供正确的 RDL。
您的问题促使我进一步调查我对 SSRS 已有相当长一段时间的怀疑:在部署(或下载)报表定义时,报表参数可能会以报表开发人员意想不到的方式运行。我之前注意到的一个相关场景:
- 创建包含参数的报告。
- 首次部署报告。
- 以某种方式更新报告参数。
- 再次部署相同的报告。
- 结果:参数设置未在服务器上成功更新。
- 从报告管理器中删除该报告。
- 再次部署报告(实际上与步骤 2 相同)。
- 结果:报告参数已正确更新。
简而言之,如果您想要更新已部署报表的参数设置,您首先需要将其删除然后部署它,或者直接通过报表管理器更新设置。
回到你的问题。你没有错过任何东西,这似乎就是 SSRS 的行为方式(有意或无意)。 RDL schema有这个(缩写)片段:
<xsd:complexType name="ReportParameterType">
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element name="DataType">
<!-- abbreviated -->
</xsd:element>
<xsd:element name="Nullable" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="DefaultValue" type="DefaultValueType" minOccurs="0"/>
<xsd:element name="AllowBlank" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="Prompt" type="xsd:string" minOccurs="0"/>
<xsd:element name="ValidValues" type="ValidValuesType" minOccurs="0"/>
<xsd:element name="Hidden" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="MultiValue" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="UsedInQuery" minOccurs="0">
</xsd:choice>
<xsd:attribute name="Name" type="xsd:normalizedString" use="required"/>
</xsd:complexType>
因此,您的 ReportParameter 应该有一个“隐藏”元素。
我刚刚验证了您的发现(在 SSRS 2008 中),并且我想我可能已经找到了您第二个问题的答案:SSRS 确实没有给出 RDL 的正确版本强>。它缺少有关参数的各种位,包括是否隐藏的元素。
有趣的是:如果您更改 BIDS 中的报告并将参数设置为隐藏,则 RDL 将发生更改并具有 <Hidden>true</Hidden>
元素。
关于reporting-services - 修改 Reporting Services 报告 - RDL 没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12900505/