【问题标题】:SSRS shows no records in report but query returns resultsSSRS 在报告中不显示任何记录,但查询返回结果
【发布时间】:2013-08-29 22:55:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 报表查看器的服务器报表属性中是否有 ReportPath 和 ReportServerURL?
  • 是的,正在生成报告并显示标题信息。但未提供或显示填写报告的实际信息。
  • 看看this post,也许会有帮助。
  • 答案中的链接真的失效了吗?我不能肯定地说,因为我在我工作的公司的电脑上。我们有很多被屏蔽的网站和东西
  • 不幸的是,链接似乎已关闭..

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

        我会猜测一下,你是“如何”传递多值参数的。就我个人而言,在处理 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”并输入上面的函数。

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

        【讨论】:

        • 感谢您抽出宝贵时间回答我的问题。 My Proc 获取参数值,调用 Stringsplit 函数并将结果写入临时表中。然后我将临时表加入我的选择并在使用后删除它们。我认为这是一个很好的方法,因为我不必使用 IN 子句。 (性能原因和防止 sql 注入)我不明白的是,当我运行我在 MSSQL 管理工作室的 SQL 分析器中找到的确切查询时,我得到了结果,但在报告中我没有这些结果。
        • 你所做的事情的基础与proc如何调用参数无关。要执行 proc,您需要执行“exec (procname) (variable(s))”。你的变量是什么类型?
        • exec P_Example @Mapping=N'1',@Date1='1988-12-30 00:00:00',@Date2='2013-08-26 00:00:00',@ObjState=N'Active,Plan',@Streams=N'Streamx,Streamy',@Substreams=Substreamx,Substreamy,AnotherSubstream',@DomArchs=N'Hubert Abraham,Frank Lee' 这就是程序的执行方式。并且变量是从 ssrs 以这种形式给出的。我的过程需要 NVARCHAR 数据类型用于除 @Mapping INT @Date1,@Date2 DATETIME 之外的所有参数
        • 在我的示例中,您需要在 SSRS 中为变量“@Substreams”和“@DomArchs”设置多值参数,然后执行“JOIN”函数,如图所示将多值放入用于 proc 的逗号分隔字符串。
        【解决方案5】:

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

        • 删除 .data 文件(Visual Studio 大量缓存数据)
        • 重新启动 Visual Studio(是的,不满意,但使用 SSRS 有时会帮到我)
        • 检查 ReportServer 数据库中的 ExecutionLog2 表进行调试(RowsAffected 等)
        • 运行 SQL 分析器以检查返回的查询和结果

        【讨论】:

        • 感谢您的回答。我试图这样做,但仍然找不到问题。我完全按照分析器中显示的方式运行查询,但在我的 MSSQL 管理工作室中它可以工作
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        相关资源
        最近更新 更多