Reporting services 得到一个;尚未指定运行报告所需的一个或多个参数";错误
我正在构建一个报告,我希望从用户那里接受两个值,将它们输入到查询中,并查找与这些条目关联的数据 例如,如果您有一个员工、绩效指标以及与之相关的价值观的列表;然后,用户将选择一个员工姓名/绩效指标,他们将获得该员工在该指标上的得分信息 我有两个参数,每个参数都是从SQL查询中填充的,SQL查询得到一个不同的员工姓名和度量值列表,下面的表只是根据~'WHERE name=@name and measure=@measure'提取信息,但当我单击“Preview”在本地运行报告时,我得到了错误:“尚未指定运行报告所需的一个或多个参数” 我知道这些参数工作正常,因为我可以将它们的值直接输入到文本框中,并且值填充正确。此外,如果我将查询更改为只接受一个参数(即,WHERE measure=@measure),则查询工作正常Reporting services 得到一个;尚未指定运行报告所需的一个或多个参数";错误,reporting-services,sql-server-2008-r2,Reporting Services,Sql Server 2008 R2,我正在构建一个报告,我希望从用户那里接受两个值,将它们输入到查询中,并查找与这些条目关联的数据 例如,如果您有一个员工、绩效指标以及与之相关的价值观的列表;然后,用户将选择一个员工姓名/绩效指标,他们将获得该员工在该指标上的得分信息 我有两个参数,每个参数都是从SQL查询中填充的,SQL查询得到一个不同的员工姓名和度量值列表,下面的表只是根据~'WHERE name=@name and measure=@measure'提取信息,但当我单击“Preview”在本地运行报告时,我得到了错误:“尚未
我不明白为什么会发生此错误,因为我知道我的参数正在正常运行并已正确填充。此错误是由于 A)该参数在实际报表中拼写错误。这意味着查询需要@Name,但报表传递@Name(或其他拼写) 或 B)您是否可能正在尝试使用@Name参数NULL的默认值运行报表,但存储过程需要实际值 如果您在Visual Studio中生成报表,并且为@Name参数指定了默认值(null),则可能会发生这种情况
尝试删除默认值或确保@Name参数具有实际值,即使它只是“”。这让我痛苦了好几个小时。事实证明,这与使用共享数据集有关。
将数据集嵌入报表中,效果良好。我在.NET 4.0中使用本地报表(在.rdlc文件中)遇到过这种行为,当时参数的一个值包含emtpy字符串。尽管设置参数是正确的:
report.SetParameters(
new List<ReportParameter> {
new ReportParameter("Title", Messages.Title),
new ReportParameter("SubTitle", Messages.Subtitle))
}
);
report.SetParameters(
新名单{
新的ReportParameter(“Title”,Messages.Title),
新的ReportParameter(“SubTitle”,Messages.SubTitle))
}
);
只有当两个参数都实际包含一些字符时,它才起作用,否则会引发提到的异常。我也遇到了同样的问题,现在它在sql server 2008 r2上排序 我知道这是一个老问题, 但只是为了帮助别人: 这真的很简单,只是要确保包括大小写在内的拼写是相同的,并且使用@ 我有一个名为currentSpaceByDrive的共享数据集,其代码如下:
SELECT
[DRIVE]
,[Volume_Size_GB]
,[VolumeSpaceAvailable_GB]
,[VolumePercentAvailable]
FROM monitoring.dbo.currentSpaceByDrive(@ServerID)
我将共享数据集currentSpaceByDrive添加到我的报告中,并将其命名为相同的名称。
当我右键单击它时,在我的报告dataset properties上,参数是@ServerID
@ServerID值来自另一个数据集,称为_服务器(用户在其中选择ServerID)
我有一个报告参数,也称为@ServerID,它从_服务器获取其值,并用于在currentSpaceByDrive上提供@ServerID参数
@ServerID太多了,我理解,但是如果你根据这个做你自己的测试,你会完成的。
请参阅所附的图片
希望这有帮助
马塞洛
检查报表服务器中的数据集,我遇到了类似的问题,我在Visual Studio中编辑共享数据集,但它不起作用,在一个小时的挫折之后,我在报表服务器中检查了数据集,发现它没有用我在Visual Studio中所做的更改进行更新,我将其删除,然后再次从Visual Studio中重新部署数据集。它起作用了。 事实上,我必须:
- 从报表中删除子报表对象
- 从工具箱中拖动新对象
- 设置子报表名称和报表
- 在参数中“添加”,并选择每个参数和相关值
然后是对我有效的。我也有类似的问题。当您使用SharedDataSource时,问题发生在参数为空值的情况下。如果您在嵌入式数据源中使用相同的查询,则没有问题 与Embed数据源不同,您必须定义共享数据源查询中使用的参数是否允许有空值,如这里的屏幕截图所示。在我的例子中,共享数据源查询中有两个参数可以有空值
因此,在将它们设置为允许null后,问题得到了解决!对于我来说,设置参数值会产生问题。我不知道为什么,但参数值无法接受字符串。空或null。因此,我只给出了一个“”作为值来解决错误 样品
我想我也有同样的问题,当我选择“全选”时,我的参数主管为空,这会导致错误“未为子报表指定一个或多个参数”,但如果我选择几个主管名称,则会出现子报表。令人费解的是,当“全选”时,管理器参数值会显示所有值“已选中,但它不适用于我的主管参数。请注意,Supervisor参数依赖于manager参数。我正在为多个报表使用共享数据集,而此问题的根本原因是没有将报表本身的输入参数映射到共享数据集的参数
为了解决这个问题,我导航到“报表数据”面板,打开数据集(实际上是链接到共享数据集),单击“参数”选项卡,然后将报表参数映射到共享数据集的参数。这就是令人沮丧的地方。参数拼写正确,我根本不允许使用默认值。我只是尝试允许一组默认值,然后
ReportParameter[] parameters = new ReportParameter[4];
parameters[0] = new ReportParameter("Name", EName);
parameters[1] = new ReportParameter("ShiftName", CurrentShift);
parameters[2] = new ReportParameter("Date", LoginDate);
if(ValidateReportData())//some condition
{
parameters[3] = new ReportParameter("Date1", LoginDate);
}
else
{
//parameters[3] = new ReportParameter("Date1", string.Empty);//this makes exception while calling Render function.
parameters[3] = new ReportParameter("Date1", " ");//Solves the issue.
}