为什么SSRS认为提供的参数未提供?

Why is the supplied parameter considered by SSRS to be unsupplied?

我正在尝试 运行 我创建的报告,并在报告显示 运行 时显示我为报告创建的参数,但当我 select "View Report" 我最终收到了这条错误信息:

不过,如您所见,正在生成(并且正在填充)Unit 参数的控件(下拉列表)并且我 selected 了一个值(确切的值在上面的尖叫声)。然而,经过一番搅动后,出现了错误信息。

怎么可能?毕竟,单位参数是提供的,ISTM。

这不是服务器配置的问题,因为当我尝试从报告的“预览”选项卡在本地 运行 它时,我得到了完全相同的手指:

但是,如果我从报表的数据选项卡执行存储过程,通过 selecting 我为存储过程设置的数据集并提供与上面相同的三个值(就像我从 SSRS 和“预览”选项卡执行),一切顺利 - 没有错误消息并且返回了大量数据。

为什么 "Unit" 的输入值在后一种情况下可以正常通过,而其他两个则不能?

更新

报告的 .rdl (XML) 文件中对 "Unit" 的所有引用如下:

<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>

所以 "Unit" 在 ReportParameters 中,这就是为什么我将它与两个日期参数一起看到的原因。

但为什么它是存储过程数据集中的唯一字段:

<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>

它不应该包含所有三个字段,还是其中的 none?为什么要 "special" 考虑其中之一?

<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 部分。

有些人可能 want/need 看到它就理解了这一点,并且由于 *.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>

有什么 jump/stand/stick 可能导致此问题的原因吗?

更新 2

如果我删除第一个数据集字段部分 ("PriceVarianceSP"),则没有区别。

如果我删除两个数据集字段部分(也是 "UnitsQuery" 中的部分),我得到:

报表参数“Unit”在数据集引用中使用字段“Unit”,但数据集“UnitsQuery”不包含该字段。 (rsInvalidDataSetReferenceField)

更新 3

为了弄清楚 is/not 设计器中发生了什么,我可以转到报告的数据选项卡和 select 运行(“!”)按钮并查看此内容:

当我提供参数时,我得到数据:

但是,如果我转到设计器的“预览”选项卡,它提供了正确的控件来提供参数,并且我输入了相同的参数,然后按下 "View Report" 按钮,我会收到错误消息如上图所示。

为什么“预览”选项卡(以及 SSRS 中的报告)看不到已提供单位参数,而“数据”选项卡却可以?

可以找到这个问题的答案

基本上,您需要在 BIDS 项目中配置数据集参数。