2011-03-09 48 views
25

我有一个包含大约10个参数和大约10个数据集和一个数据源的报告。我输入了很多,但我真的需要帮助,所以我想我会尝试并提供尽可能多的关于问题的信息,因为我可以从一开始就对。SSRS 2008:错误消息说我的参数不存在,但它显然做?

让我们简化了这一切,并假装这就是一切有关名称和该报告得到基本员工信息:

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

问题:
SSRS说viewOption不存在。但是我在左侧的Parameters文件夹中看到它。我在参数下输入表达式时看到它。在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(参数!viewOption.value,“〜”)作为其他值r数据集的查询参数有效,并且没有错误。

<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其他报告(我试图复制并从工作报告粘贴相关代码段的参数但我仍然得到错误)。那么,这个有什么问题?

+1

我知道你说你之前已经尝试过这一点,但我在报告服务有similiar问题。我必须从头开始尝试,它似乎工作,有时似乎是越野车。同样,总是从SQL Server运行你的存储过程来看看它们是否在工作到RS之前工作。最后,由于某种原因,在以后的日期添加其他参数时,报告的后台代码不会更新,您必须手动输入代码。 +1虽然为深入的细节。 – JonH 2011-03-10 01:02:53

+0

我刚刚发布了一些“答案”......这份报告过于详细和复杂,只是重新开始,所以我只是复制了代码,而且似乎很有用。不过,我真的很想知道为什么会发生这种情况。我总是确保存储过程的工作,并重新使用其中的一些...我也学会了总是检查SSRS背后的代码。 – 2011-03-10 19:23:30

回答

18

我发现在我的情况下,它实际上是参数名称套管略有变化,它抛出了同样的错误。

我必须将名称更改为正确的外壳,然后在代码后面搜索引用该参数的任何内容并更正其外壳。此后部署良好。

+3

这是一个老问题,我不再使用这个东西了......但谢谢你的回复。 SSRS是一件有趣的事情;不知道它是否有所改善。最终,我进入了所有报告背后的实际SQL Server数据库,并挖掘出了一些解决方案。但你绝对是对的,但它与某些区分大小写的东西有关。它会显示给我,用户,完全相同,但在数据库中的某处它是不同的。我会给你这个问题的答案B/C迟到比从未好。谢谢! – 2012-11-12 20:57:06

+3

在这里澄清一点 - 它的代码只在xml中有壳体问题。要解决它,你有查看代码,然后找到它并修复它。非常讨厌。 – 2013-06-17 19:21:49

+0

这就是你的SSRS!一位高级主管向我解释了为什么。如果你必须有一个自动化工作的情况,那么所有事情都必须准确无误!任何细微的变化都会失败。 – logixologist 2013-06-17 19:44:14

1

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

对此有什么想法?

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

+0

JonH实际上有这样的答案,但他把他的建议作为一个评论,而不是一个实际的答案....当SSRS有这样的问题,它让我发疯,因为实际上没有任何错误是可见的;实际的软件有问题。 – 2011-03-14 22:25:57

28

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

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

+0

这解决了我的问题。谢谢。 – Robbert 2013-07-08 22:36:25

+0

这解决了我遇到的问题。如果两个数据集需要相同的参数,并且其中一个取决于另一个的输出,则通用参数必须列在列表顶部。 – 2013-12-03 17:58:23

1

如果您引用参数“太早”,例如从被覆盖的OnInit中。 在这种情况下,即使数据集本身与所讨论的参数无关,也不可能使用数据集作为可用值,也不可能使用任何参数的默认值。

+0

+1回复旧问题......谢谢。我依然倾向于@logixologist的回答,因为我的问题是通过在任何可能的地方删除对报告的引用,然后再次上传来解决的。不过,我刚才查了一下你的答案,当我与SSRS合作时,我不知道这些东西。如果我只知道这个问题,我认为你的回答可以解决我在写这个问题的时候遇到的很多其他问题。 – 2012-12-13 17:28:52

10

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

+0

这解决了我的问题,谢谢!但为什么!!现在我可以看到,在“报告数据”窗格中,如果选择参数,则在窗格的顶部工具栏中启用两个小箭头。在这里你可以上下移动参数来排列它们。 – 2015-11-10 11:06:12

0

我遇到了与SSRS类似的问题。该代码是正确的,SQL参数正确,但报告抛出参数错误。我正在使用共享数据集。我将相同的SQL复制到嵌入式数据集中,报告完美运行。所以,我同意SSRS软件有引起奇怪行为的错误。

5

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

+0

这对我有效+ 1 – Pramesh 2014-12-16 21:54:57

0

我也有这个问题,以上所有答案deinetely帮助。

与我的一个棘手的是,该数据集是一个SSAS数据集,因此它是隐藏的。我必须搜索参数的代码,以查看它的使用位置以及我在哪里找到它。

要查看隐藏的数据集,请右键单击报告数据选项卡中的数据集文件夹,并勾选'显示隐藏数据集'框。

4

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

article helped me resolve it

When editing Parameters (names or case) for a Dataset within SSRS you may encouter the previous error message when you preview the report. While on the surface it may appear that the parameter has the same case in the Parameter settings and the Dataset query – there is another place where a change is required.

  1. Open the Dataset properties for the Dataset (s) that use the Parameter in the error message.
  2. Select the Parameters property in the left list pane.
  3. Click the Expression Editor button for the specified Parameter.

enter image description here

  1. Here you will notice that the Expression is underlined in red. This is where you will need to correct the case of the Parameter name.

    enter image description here

相关问题