2

我的 Reporting Services 2005 报告有一个错误:“参数 UserID 是只读的”。经过一番研究,我找到了一个可行的解决方案。我从 Report Manager Web 界面打开了报告并更改了以下内容:

前

..对此:

后

更改后,报告有效!伟大的!

所以,我想我会下载修改后的 RDL,这样我就可以看到更改并将更正后的 RDL 放入我的源代码存储库中。所以,我下载了 RDL:

下载 RDL

但是我的差异工具告诉我,RDL 的“之前”版本与 RDL 的“之后”版本相同。确信我的差异工具是错误的,我尝试了另一个。果然,RDL 没有区别。

我错过了什么?更改是否反映在 RDL 以外的其他地方,或者 Reporting Services 没有提供正确版本的 RDL?无论哪种情况,我如何才能获得正确版本的 RDL?

谢谢你。

4

1 回答 1

2

TL/DR 版本: Reporting Services没有为您提供正确的 RDL。


您的问题促使我进一步调查我在 SSRS 上已有一段时间的怀疑:在部署(或下载)报告定义时,报告参数可能会以报告开发人员意想不到的方式运行。我之前注意到的一个相关场景:

  1. 创建带有参数的报告。
  2. 首次部署报告。
  3. 以某种方式更新报告参数。
  4. 再次部署相同的报告。
  5. 结果:参数设置在服务器上成功更新。
  6. 从报告管理器中删除报告。
  7. 再次部署报告(实际上与步骤 2 相同)。
  8. 结果:报告参数正确更新。

简而言之,如果您想更新已部署报表的参数设置,您首先需要将其删除然后部署,或者直接通过报表管理器更新设置。

回到您的问题。您没有遗漏任何东西,这似乎是 SSRS 的行为方式(有意或无意)。RDL 模式有这个(缩写)部分:

<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>元素。

于 2012-10-15T17:43:51.810 回答