我有一份报告,其中包含大约 10 个参数、大约 10 个数据集和一个数据源。我打了很多字,但我真的需要帮助,所以我想我会尝试从一开始就尽可能多地提供有关问题的信息。
让我们简化一下,假设这些是所有内容的相关名称,并且报告获取基本员工信息:
问题:
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/