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

时间:2011-03-09 21:47:08

标签: sql-server parameters ssrs-2008 reporting-services

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

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

  • 参数
    • facilityID:guid或uniqueidentifier格式的文本,隐藏并传入,以便报告的最终用户只能查看自己设施的信息;单值参数,非空白不为空,隐藏,文本
    • startDate:开始日期范围,假设我希望我的报告包含从今年1月1日开始的数据;单值参数,非空白不为空,可见,日期时间
    • endDate:日期范围的结尾,让我们说今天/现在;单值参数,非空白不为空,可见,日期时间
    • viewOption :三个硬编码值(标签,值)(“当前员工”,1)和(“过去员工”,2)和(“移动设施的员工”,3) ;多值参数(因此选择全部是一个选项),不是空白,不是空,可见,文本
    • 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>

这是如何设置的,getListOfNames是错误抛出的原因,如果我改变

              <QueryParameter Name="@viewOption">
                  <Value>=Join(Parameters!viewOption.Value, "~")</Value>
              </QueryParameter>

              <QueryParameter Name="@viewOption">
                  <Value>="1~2"</Value>
              </QueryParameter>

然后它起作用....或者值可以只是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>

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

12 个答案:

答案 0 :(得分:29)

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

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

答案 1 :(得分:21)

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

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

答案 2 :(得分:10)

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

答案 3 :(得分:6)

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

答案 4 :(得分:5)

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

article helped me resolve it

  

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

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

    enter image description here

         
        
    1. 在这里,您会注意到Expression的下划线为红色。您需要在此处更正参数名称的大小写。

           

      enter image description here

    2.   

答案 5 :(得分:2)

如果您引用参数“太早”,也会出现此问题,例如来自重写的OnInit。 在这种情况下,即使数据集本身与相关参数无关,也不可能将数据集用于可用值,也不再使用任何参数的默认值。

答案 6 :(得分:1)

我制作了一份新报告,并将代码复制到新报告中并保存。它现在在新的报告中完美地工作了......我删除了旧报告并重命名了新的报告,部署到服务器,一切都很好。我希望我能早点想到这一点。 SSRS非常有趣,我甚至不知道现在究竟是什么导致了这个问题,不过......

有关于此的任何想法?

(我重新启动了SSRS几次,重新启动了我的计算机几次,删除了.data文件,删除了服务器上的副本,即使这种情况发生在我的计算机上只是为了安全...在这一切期间,顺便说一句

答案 7 :(得分:0)

我遇到了与SSRS类似的问题。代码是正确的,SQL参数正确但报告引发了参数错误。我使用的是共享数据集。我将相同的SQL复制到嵌入式数据集,报告工作得很好。因此,我同意SSRS软件存在导致奇怪行为的错误。

答案 8 :(得分:0)

我也有这个问题,遵循上面提到的所有答案。

我的棘手问题是数据集是SSAS数据集,因此它被隐藏了。我必须在代码中搜索参数以查看它的使用位置以及我找到它的位置。

要查看隐藏数据集,请右键单击“报告数据”选项卡中的“数据集”文件夹,然后勾选“显示隐藏数据集”#39;框。

答案 9 :(得分:0)

也发生在我身上

有一个参数取决于另一个参数

但是依赖的顺序排在最前面

使用箭头将计算出的参数移动到所有参数的末尾。

答案 10 :(得分:0)

对我来说,我必须打开rdl文件并将新参数添加到所需的顺序/位置(xml节点)。

答案 11 :(得分:0)

我遇到了与其他几个人指出的相同的问题,其中我有一个参数依赖于 之后列出的另一个参数。

然而,只是为了让其他阅读的人更清楚一点: 如果您像我一样使用 Visual Studio 2019,那么每个人都一直提到的神秘“列表”就是“报表数据”窗格中的“参数”列表。您可以通过转到 Visual Studio 顶部的查看 > 报告数据在 Visual Studio 中访问此窗格。

enter image description here

不过,对我来说,没有向上或向下箭头。我不得不逐字打开报告的 XML 代码(通过单击 F7 或右键单击报告文件并选择“查看代码”)并将依赖参数剪切并粘贴到参数的顶部XML 中的部分。