7

根据 SSRS,我有一个问题。我正在使用 MSSQL Server management studio 2012 和 BIDS Visual Studio 2008 进行报表设计。

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

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

如果您需要任何其他信息,请告诉我。我只是认为可能有人面临同样的问题并且知道回应。

4

6 回答 6

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:调用 dbo.test 的 Proc 执行以返回值 1、2、4 的行,参数 id 如下所示:

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

如果我想使用这个值在 SSRS 中运行 proc,并且我有一个名为“IDS”的多值参数,我将不得不在 SSRS 中的函数中手动组装数组,例如:

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

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

出于这个原因,我非常支持视图、选择和表函数,因为您可以使用谓词逻辑来处理这些问题。

于 2013-08-27T20:33:28.440 回答
3

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

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

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

解决方案:我的日期参数没问题(时间部分没有问题),我在某处阅读以检查“数据”面板中的过滤器,即除参数之外的另一个选项卡。我已经放了那些过滤器,然后完全忘记了。

于 2015-10-28T12:53:57.257 回答
2

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

  • 删除 .data 文件(Visual Studio 大量缓存数据)
  • 重新启动 Visual Studio(是的,不满意,但使用 SSRS 有时会帮助我)
  • 检查 ReportServer 数据库中的 ExecutionLog2 表进行调试(RowsAffected 等)
  • 运行 SQL 探查器以检查返回的查询和结果
于 2013-08-27T11:55:49.407 回答
2

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

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

于 2018-10-01T20:55:50.250 回答
2

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

于 2018-01-15T20:03:13.810 回答
0

不确定这是否相关,但是我的数据源使用的是 MySql 连接,所以虽然我无法开始 @parameterName工作,但我用 ?
so 而不是 WHERE Customer.CustomerID = @CustID
我用WHERE Customer.CustomerID = ?

于 2022-01-26T18:23:09.837 回答