【发布时间】:2016-04-24 06:35:38
【问题描述】:
我正在尝试运行我创建的报告,并使其达到我为报告创建的参数在报告运行时显示的程度,但是当我选择“查看报告”时,我最终得到了这个错误消息:
正如您所见,Unit 参数的控件(下拉列表)正在生成(并且正在填充),并且我选择了一个值(确切的值在上面的截图中被混淆了)。然而,经过一番搅动,出现了那个错误的消息。
怎么可能?毕竟,提供的 Unit 参数是 ISTM。
这不是服务器配置的问题,因为当我尝试从报告的“预览”选项卡在本地运行它时,我得到了完全相同的手指:
但是,如果我从报告的“数据”选项卡执行存储过程,请选择我为存储过程设置的数据集并提供与上述相同的三个值(就像我在 SSRS 和预览中所做的那样选项卡),一切顺利 - 没有错误消息并返回大量数据。
为什么在后一种情况下“单位”的输入值可以通过,而其他两个则不通过?
更新
以下是报告的 .rdl (XML) 文件中对“单位”的所有引用:
<ReportParameters>
<ReportParameter Name="BegDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Begin Date</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>End Date</Prompt>
</ReportParameter>
<ReportParameter Name="Unit">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Unit</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>UnitsQuery</DataSetName>
<ValueField>Unit</ValueField>
<LabelField>Unit</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
</ReportParameters>
所以“单位”在 ReportParameters 中,这就是为什么我将它与两个 Date 参数一起看到的原因。
但为什么它是存储过程数据集中唯一的字段:
<DataSet Name="PriceVarianceSP">
<Fields>
<Field Name="Unit">
<DataField>Unit</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>PlatypusData</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>priceAndUsageVariance</CommandText>
</Query>
</DataSet>
它不应该包含所有三个字段,还是一个都不包含?为什么要对其中之一给予“特殊”考虑?
<DataSet Name="UnitsQuery">
<Fields>
<Field Name="Unit">
<DataField>Unit</DataField>
</Field>
</Fields>
<Query>
<DataSourceName>PlatypusData</DataSourceName>
<CommandText>select distinct Unit from duckbills order by unit</CommandText>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
但问题似乎是它从某个地方丢失,而不是它不属于它的某个地方,或者...???
应该从一个数据集(“PriceVarianceSP”)还是另一个(“UnitsQuery”)中删除“Unit”?
对两个日期参数 BegDate 和 EndDate 的唯一引用位于 ReportParameters 部分。
有些人可能希望/需要看到它来理解这一点,并且由于 *.rdl 文件不是太大或不太复杂(还没有?),这里是完整的:
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="PlatypusData">
<rd:DataSourceID>875e488f-a3fc-4066-befb-5b85a938f58d</rd:DataSourceID>
<DataSourceReference>PlatypusData</DataSourceReference>
</DataSource>
</DataSources>
<InteractiveHeight>11in</InteractiveHeight>
<ReportParameters>
<ReportParameter Name="BegDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Begin Date</Prompt>
</ReportParameter>
<ReportParameter Name="EndDate">
<DataType>DateTime</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>End Date</Prompt>
</ReportParameter>
<ReportParameter Name="Unit">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Unit</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>UnitsQuery</DataSetName>
<ValueField>Unit</ValueField>
<LabelField>Unit</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
</ReportParameters>
<rd:DrawGrid>true</rd:DrawGrid>
<InteractiveWidth>8.5in</InteractiveWidth>
<rd:SnapToGrid>true</rd:SnapToGrid>
<RightMargin>1in</RightMargin>
<LeftMargin>1in</LeftMargin>
<BottomMargin>1in</BottomMargin>
<rd:ReportID>badCompany7a923-1452-4e00-9cc3-1f437ad70ef6</rd:ReportID>
<DataSets>
<DataSet Name="PriceVarianceSP">
<Fields>
<Field Name="Unit">
<DataField>Unit</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>PlatypusData</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>priceAndUsageVariance</CommandText>
</Query>
</DataSet>
<DataSet Name="UnitsQuery">
<Fields>
<Field Name="Unit">
<DataField>Unit</DataField>
</Field>
</Fields>
<Query>
<DataSourceName>PlatypusData</DataSourceName>
<CommandText>select distinct Unit from duckbills order by unit</CommandText>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
</DataSets>
<Width>33in</Width>
<Body>
<ReportItems>
<Textbox Name="textbox1">
<rd:DefaultName>textbox1</rd:DefaultName>
<Style>
<Color>SteelBlue</Color>
<FontFamily>Tahoma</FontFamily>
<FontSize>20pt</FontSize>
<FontWeight>700</FontWeight>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
<CanGrow>true</CanGrow>
<Height>0.36in</Height>
<Value>PriceAndUsageVarianceReport</Value>
</Textbox>
</ReportItems>
<Height>2.29in</Height>
</Body>
<Language>en-US</Language>
<TopMargin>1in</TopMargin>
</Report>
是否有任何可能导致此问题的跳跃/站立/突出?
更新 2
如果我删除第一个数据集字段部分(“PriceVarianceSP”),则没有区别。
如果我删除两个数据集字段部分(也是“UnitsQuery”中的一个),我会得到:
报表参数“Unit”在数据集引用中使用字段“Unit”,但数据集“UnitsQuery”不包含该字段。 (rsInvalidDataSetReferenceField)
更新 3
要清楚设计器中发生/未发生的事情,我可以转到报告的数据选项卡并选择运行(“!”)按钮并查看:
当我提供参数时,我得到数据:
但是,如果我转到设计器的“预览”选项卡,该选项卡提供了正确的控件来提供参数,并且我输入相同的参数,然后混合“查看报告”按钮,我会得到如上所示的错误消息在第一张图片中。
为什么“预览”选项卡(以及 SSRS 中的报告)看不到已提供单位参数,而“数据”选项卡却可以?
【问题讨论】:
标签: stored-procedures reporting-services parameters parameter-passing bids