SSRS 2008:错误消息说我的参数不存在但显然呢?

glo*_*uin 28 sql-server parameters reporting-services ssrs-2008

我有一个包含大约10个参数和大约10个数据集和一个数据源的报告.我打字很多,但我真的需要帮助所以我想我会尝试提供尽可能多的关于问题的信息,因为我可以从一开始.

让我们简化一切,并假装这些是所有内容的相关名称,并且报告获得基本的员工信息:

  • 参数
    • facilityID:guid或uniqueidentifier格式的文本,隐藏并传入,以便报告的最终用户只能查看自己设施的信息; 单值参数,非空白不为空,隐藏,文本
    • startDate:开始日期范围,假设我希望我的报告包含从今年1月1日开始的数据; 单值参数,非空白不为空,可见,日期时间
    • endDate:日期范围的结束,让我们说今天/现在; 单值参数,非空白不为空,可见,日期时间
    • viewOption:三个硬编码值(标签,值)("当前员工",1)和("过去员工",2)和("移动设施的员工",3); 多值参数(因此选择all是一个选项),不是空白,不是空,可见,文本
    • personID:基于数据集getListOfNames,其中标签是员工姓名,值是他们的personID(guid/uniqueidentifier); 单选,非空,不空白,文本和可见
  • 我的数据集
    • getListOfNames:这将获取在给定设施的提供日期范围内在公司的人员列表,以及他们的员工状态在viewOption参数值中的位置(因此它可以只是一个数字或最多三个).这是一个存储过程,但我已经将它设置为通过传递join(参数,"〜")然后在存储过程中将其分离来处理多值参数.这适用于其他5个报告.
    • getReportInfoOnSelectedPerson:主体查询; 在用户选择他们想要数据的员工之后,这将获取该personID和日期范围并填充主表.

问题:
SSRS说viewOption不存在.但我在左侧的Parameters文件夹中看到了它.当我在参数下输入表达式时,我看到了它.参数!viewOption.value下没有波浪形的红线.但是,当我尝试将其作为getListOfNames数据集使用的参数的值时,它会出错.如果我把它放在getReportInfoOnSelectedPerson数据集中并以完全相同的方式使用它,SSRS就可以了.跆拳道?所以...我已经检查了rdl,一切都很好(声明了实际参数,在数据集引用中使用它,所有内容).它只是这一个数据集.我有一个类似的报告,使用相同的数据集,相同的基本参数和报告是好的.我尝试将dataset参数的值设置为1或者其他,这很好但是当我尝试将其设置为Parameter!viewOption.value时它出错.....现在,上面我说我通常传递存储的proc一个Join在带有波浪号的参数上〜但是我试图保持它简单,或者让它只是通常工作(通过传递多值viewOption参数的第一个值或将该参数转换为单个选择并且只是传递.但是连接也不起作用.所有这些都适用于其他数据集,这也是一个存储过程.

这是我的错误:
报告处理期间发生了错误.(rsProcessingAborted)查询参数"@viewOption"的Value表达式包含错误:表达式引用了报表参数集合中的不存在的参数.(rsRuntimeErrorInExpression)

这显然是说我的参数不存在,但我可以看到它...到处都是.如果我将其他数据集中的一个参数值分配给viewOption参数,则它可以正常工作而不会出现错误.我检查了rdl.

我之前遇到过这个问题,通过删除参数和数据集并再次创建它们来修复它(为了安全起见,我重命名了它们).这次没办法.

我很沮丧.请帮忙....

码?

      <DataSet Name="getListOfNames">
      <Fields>
          <Field Name="personID">
              <DataField>PersonId</DataField>
              <rd:TypeName>System.Guid</rd:TypeName>
          </Field>
          <Field Name="name">
              <DataField>name</DataField>
              <rd:TypeName>System.String</rd:TypeName>
          </Field>
      </Fields>
      <Query>
          <DataSourceName>myDataSource</DataSourceName>
          <CommandType>StoredProcedure</CommandType>
          <CommandText>getListOfNames</CommandText>
          <QueryParameters>
              <QueryParameter Name="@fac">
                  <Value>=join(Parameters!fac.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@bldg">
                  <Value>=join(Parameters!bldg.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@unit">
                  <Value>=join(Parameters!unit.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@station">
                  <Value>=join(Parameters!station.Value,"~")</Value>
              </QueryParameter>
              <QueryParameter Name="@startDate">
                  <Value>=Parameters!startDate.Value</Value>
              </QueryParameter>
              <QueryParameter Name="@endDate">
                  <Value>=Parameters!endDate.Value</Value>
              </QueryParameter>
              <QueryParameter Name="@viewOption">
                  <Value>=Join(Parameters!viewOption.Value, "~")</Value>
              </QueryParameter>
          </QueryParameters>
          <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
  </DataSet>



<ReportParameter Name="viewOption">
  <DataType>String</DataType>
  <DefaultValue>
    <Values>
      <Value>1</Value>
    </Values>
  </DefaultValue>
  <Prompt>View</Prompt>
  <ValidValues>
    <DataSetReference>
      <DataSetName>viewOptionQuery</DataSetName>
      <ValueField>value</ValueField>
      <LabelField>label</LabelField>
    </DataSetReference>
  </ValidValues>
  <MultiValue>true</MultiValue>
</ReportParameter>



<DataSet Name="viewOptionQuery">
  <Fields>
    <Field Name="label">
      <DataField>label</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="value">
      <DataField>value</DataField>
      <rd:TypeName>System.Int32</rd:TypeName>
    </Field>
  </Fields>
  <Query>
    <DataSourceName>flamingo</DataSourceName>
    <CommandText>select 'Other Facility' as label, 3 as value union select 'Past' as label, 2 as value union select 'Current' as label, 1 as value order by value</CommandText>
    <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
  </Query>
</DataSet>
Run Code Online (Sandbox Code Playgroud)

这就是它的设置方式,getListOfNames是错误抛出的原因,如果我改变的话

              <QueryParameter Name="@viewOption">
                  <Value>=Join(Parameters!viewOption.Value, "~")</Value>
              </QueryParameter>
Run Code Online (Sandbox Code Playgroud)

              <QueryParameter Name="@viewOption">
                  <Value>="1~2"</Value>
              </QueryParameter>
Run Code Online (Sandbox Code Playgroud)

然后它工作....或者值可以只有1或1~2~3

但是......当我尝试将join(参数!viewOption.value,"〜")作为另一个数据集的查询参数的值时,它可以工作并且没有错误.

  <DataSet Name="getReportInfoOnSelectedPerson">
  <Fields>
    <Field Name="name">
      <DataField>name</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field> 
    <Field Name="Building">
      <DataField>Building</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="Unit">
      <DataField>Unit</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="desc">
      <DataField>desc</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field> 
  </Fields>
  <Query>
    <DataSourceName>myDataSource</DataSourceName>
    <CommandType>StoredProcedure</CommandType>
    <CommandText>Reports_BasicInfo</CommandText>
    <QueryParameters>
      <QueryParameter Name="@personID">
        <Value>=Parameters!personID.Value</Value>
      </QueryParameter>
      <QueryParameter Name="@numberINeedToAggregateData">
        <Value>=Join(Parameters!viewOption.Value,"~")</Value>
        <rd:UserDefined>true</rd:UserDefined>
      </QueryParameter>
    </QueryParameters>
    <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
  </Query>
</DataSet>
Run Code Online (Sandbox Code Playgroud)

我已经说过了,但是抛出错误的存储过程/数据集在大约5个其他报告中使用了相同设置的参数(我尝试从工作报告中复制并粘贴相关代码段但我仍然得到错误) .那么,这个有什么问题?

小智 30

尝试使用向上/向下箭头更改参数的顺序.

它们应该以依赖的顺序出现.


log*_*ist 22

我发现在我的情况下,它实际上是参数名称外壳略有改变,它抛出同样的错误.

我不得不将名称更改为正确的大小写,然后在后面的代码中搜索引用该参数的任何内容并更正其大小写.之后部署好了.

  • 这是一个古老的问题,我不再使用这些东西了......但是谢谢你的答复.SSRS是一件有趣的事情; 不确定它是否有任何改善.最终,我进入了所有报告背后的实际sql server数据库并挖出了一些解决方案.不过,你肯定是对的,它与区分大小写的东西有关.它会向我显示,用户,完全相同但在DB中的某个地方它是不同的.我会给你这个问题的答案b/c迟到总比没有好.谢谢! (3认同)
  • 这里澄清一点 - 它的代码只在具有套管问题的xml中可见.要解决此问题,您需要查看代码,然后找到并修复它.非常讨厌. (3认同)

小智 10

根据其依赖关系重新排序报表参数为我解决了问题.我在列表底部有报告参数,但它上面的报告参数取决于这个底部.因此,在创建/重新创建报表参数时,请确保订单正确.


小智 7

有同样的问题.检查"数据集属性"的"参数"选项卡,然后单击表达式(fx)按钮.这里的参数似乎没有自动刷新,我的一个参数仍然是大写而不是小写拼写


the*_*man 6

这主要是由于数据集中未更新参数名称.

这篇文章帮我解决了

在SSRS中编辑数据集的参数(名称或大小写)时,您可能会在预览报表时包含上一条错误消息.虽然表面上可能看起来参数在参数设置和数据集查询中具有相同的情况 - 还有另一个需要更改的地方.

  1. 打开在错误消息中使用参数的数据集的数据集属性.
  2. 在左侧列表窗格中选择"参数"属性.
  3. 单击指定参数的表达式编辑器按钮.

在此输入图像描述

  1. 在这里,您将注意到表达式以红色下划线.这是您需要更正参数名称的情况.

    在此输入图像描述