TL/DR 版本: Reporting Services没有为您提供正确的 RDL。
您的问题促使我进一步调查我在 SSRS 上已有一段时间的怀疑:在部署(或下载)报告定义时,报告参数可能会以报告开发人员意想不到的方式运行。我之前注意到的一个相关场景:
- 创建带有参数的报告。
- 首次部署报告。
- 以某种方式更新报告参数。
- 再次部署相同的报告。
- 结果:参数设置未在服务器上成功更新。
- 从报告管理器中删除报告。
- 再次部署报告(实际上与步骤 2 相同)。
- 结果:报告参数正确更新。
简而言之,如果您想更新已部署报表的参数设置,您首先需要将其删除然后部署,或者直接通过报表管理器更新设置。
回到您的问题。您没有遗漏任何东西,这似乎是 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>
元素。