SSRS在报告中不显示任何记录,但查询返回结果

时间:2013-08-27 09:04:04

标签: sql tsql reporting-services sql-server-2012

根据SSRS,我有一个问题。 我正在使用MSSQL Server管理工作室2012和BIDS Visual studio 2008进行报告设计。

我有一个带有一些多值参数的报告,后面有一个存储过程返回记录。

现在我试图找到传递给存储过程的参数值和字符串拆分函数的问题。如果字符串以意外的形式传递,我查看了SQL服务器分析器,但事实并非如此。我在服务器中运行了确切的执行代码作为查询并返回结果。但是,如果我在报表设计器的预览窗格中运行报表,则无法获得任何结果。

如果您需要任何其他信息,请告诉我。我只是觉得可能有人遇到同样的问题而且知道回应。

5 个答案:

答案 0 :(得分:7)

我会猜测并说你是如何传递多值参数的。在处理SSRS时我个人使用视图,表函数或只是选择,因为SSRS可以原生地理解这一点:

Where thing in (@Thing)

实际上在SSMS中意味着这一点:

Where thing in (@Thing.Value1, @Thing.Value2, @Thing.Value3, etc...)

我猜你的proc正在采用一个实际上是逗号分隔数组的字符串。当您执行一个带有像'1,2,3,4'这样的字符串数组的参数时,您正在使用类似'Text'参数接受多个值的过程来处理该过程,您可以指定或从查询中获取您基本上需要'如果您的过程采用包含该数组的字符串值,请加入'参数。 EG:Proc为dbo.test执行以返回值为1,2,4的行,参数ID显示为:

exec dbo.test @ids = '1,2,4'

如果我想使用此值在SSRS中运行proc并且我有一个名为'IDS'的多值参数,我将需要在SSRS中的函数中手动组装数组,如:

=JOIN(Parameters!IDS.Value, ",")

基本上告诉proc通过将逗号分隔值链中的多个值连接在一起来运行参数'IDS'。您可以在左侧窗格中的数据集中执行此操作,其中列出了“参数”,而不是指定参数,因为它类似于[@IDS],而是单击“Fx”而放入上面的函数。

由于这个原因,我是视图,选择和表函数的主要支持者,因为你可以使用谓词逻辑来处理这个问题。

答案 1 :(得分:3)

这个答案可能看起来过时但如果有人需要它,我会重现我的经验,因为我昨天遇到了同样的问题而且我是网页上的解决方案。

问题:我的报告有2个日期参数,所以要获取该范围之间的数据,但我首先注意到它没有工作1天,然后我注意到使用范围没有带来最后一天的数据

解决方法:我使用了查询,进行了一些安排,但是当我让查询返回整整一个月并且报告中没有发生任何事情我知道所有问题都在SSRS中,当然我检查了我发送到的参数报告。

解决方案:我的日期参数没问题(时间部分没问题)我在某处查看了“数据”面板中的过滤器,这是参数之外的另一个选项卡。我放了那些过滤器,完全忘记了。

答案 2 :(得分:2)

你没有提供复制品或任何细节,所以这对我们来说真的是一个猜谜游戏。回答“我该怎么做才能调试预览中呈现的意外(否)数据?”可以至少完成:

  • 删除.data文件(Visual Studio重度缓存数据)
  • 重新启动Visual Studio(是的,不满意,但有了SSRS,它有时帮助了我)
  • 检查ReportServer数据库中的ExecutionLog2表以进行调试(RowsAffected等)
  • 运行SQL事件探查器以检查查询和返回的结果

答案 3 :(得分:2)

我的问题是我没有将报告的参数添加到数据集中。您必须右键单击“报表数据”选项卡中的数据集,然后刷新存储过程的字段。您还可以在数据集属性窗口的“字段”菜单项中手动添加参数。

答案 4 :(得分:2)

我遇到了这个问题,当我将参数值添加到报表中时,它会自动放入=Parameters!parametername(0)中,因为parameter(0)与一个不在其中的值相关,因此没有记录返回数据。

如果在“值”字段中看到一个<exp>,请将其更改为[@parametername](我使用数据集的filter属性遇到了这个问题。)。它允许您创建一个半动态过滤器,我选择了fieldname,然后选择了IN作为比较对象。后来我创建了一个表达式,弄乱了(0)的值。

相关问题