sql-server - SSRS 2008 : error message saying my parameter doesn't exist but it clearly does?

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

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

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

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

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

    这是我的错误:
    报告处理期间发生错误。 (rsProcessingAborted) 查询参数“@viewOption”的值表达式包含错误:表达式引用了报告参数集合中不存在的参数。 (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(Parameters!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 个其他报告中设置相同(我尝试从工作报告中复制和粘贴相关代码部分,但我仍然收到错误) .那么,这个有什么问题吗?

    最佳答案

    我发现在我的情况下,实际上是参数名称的大小写略有变化,并且抛出了同样的错误。

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

    关于sql-server - SSRS 2008 : error message saying my parameter doesn't exist but it clearly does?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252588/

    相关文章:

    sql - yyyy-mm-dd hh :mm:ss. sss 到 SQL Server 过程中的 ddmmyy

    sql - 我应该使用什么数据类型来存储货币值?

    java - 使用变量创建类与将变量作为参数传递到方法中

    parameters - 将 if block 作为参数传递

    sql-server - 为什么在 SQL Server 中将空白字符串转换为日期会得到 1900-01-01?

    sql - 如何在行 SQL 中增加总和/计数

    javascript - 如何正确传递Parse.com Cloud Code参数?

    excel - 使用 ReportService2010.asmx 以编程方式从共享点导出 SSRS 报告

    mysql - SQL - 如何返回 0 的计数

    sql-server - SSRS中 "Internal"参数的使用规则是什么