Sql server 防止报表服务器等待获取服务器上的所有数据以显示报表

Sql server 防止报表服务器等待获取服务器上的所有数据以显示报表,sql-server,stored-procedures,reporting-services,fetch,Sql Server,Stored Procedures,Reporting Services,Fetch,我有一个存储过程,可以返回大量的记录。因此,在reporting service中显示记录时,它会等待所有数据被提取出来,然后显示它们 我想知道是否有任何方法可以显示当前获取的记录以及附加到页面上的其他记录并准备好显示,这样用户就可以立即看到报告 编辑:我搜索报告服务并找到快照功能。虽然这有助于提高报告性能,但这是一种典型的离线方式 有趣的是,这个问题以前在Crystal report6或更高版本上出现过。 在Sql Server 2000中同样,当我们执行存储过程时,它会立即显示结果,但在ne

我有一个存储过程,可以返回大量的记录。因此,在
reporting service
中显示记录时,它会等待所有数据被提取出来,然后显示它们

我想知道是否有任何方法可以显示当前获取的记录以及附加到页面上的其他记录并准备好显示,这样用户就可以立即看到报告

编辑:我搜索
报告服务
并找到快照功能。虽然这有助于提高报告性能,但这是一种典型的离线方式

有趣的是,这个问题以前在Crystal report6或更高版本上出现过。
Sql Server 2000中同样,当我们执行存储过程时,它会立即显示结果,但在new Sql Server 2005和更高版本中,直到所有结果都被获取后才会显示结果

简短的回答是否定的。SSRS数据集不支持读取调用或部分检索结果集。在初始化报表呈现之前,它们调用execute并检索完整的结果集。生成大型报告时,通常不建议按需运行它们,除非它们支持分页。但是,分页只会限制SSRS服务和浏览器之间发送的数据,而不会限制SSRS服务和数据库之间发送的数据。SSRS仍将等待返回整个数据集get SP,然后再开始呈现第一页

最简单的解决方案是将数据集拆分为多个部分,向get SP添加参数以返回较小的数据集。或者,您可以尝试将页码传递给SP,并在每页上使用子报表

这里有4种基本策略可用于大型报告

  • 。服务器将一次向浏览器发送一页报告。只有在浏览器或报表查看器中进行渲染时,此选项才有效。例如,如果您正在按需下载excel文件,则这将不起作用,这需要在将文件发送到客户端之前完成所有查询
  • 通过电子邮件或按固定时间表将报告分发到共享文件夹
  • 用于将大型查询拆分为多个较小的部分(不推荐)
  • 您可能希望了解的reporting services的其他功能。

  • 更新:

    分页可以通过添加来设置。这将使SSR能够在其他页面仍在呈现时将第一页返回到浏览器。但是,应该注意,分页不会影响db和SSRS服务器之间的调用。如果有一个大型查询,则在从数据库中完全加载该结果集之前,第一页呈现不会启动

    子报表允许您为报表中的每个页面返回查询。例如,如果您有一个返回100行的查询,而您只想显示20行。使用将结果分组到,然后返回分组号,这些将是您的页码。将此设置为报表的主查询,并设置分页格式,以便为从主查询返回的每个页码创建一页。然后创建一个子查询sp,该子查询sp接受您要显示的内容,并从主查询中传递该页码。子查询将返回要在该页面上显示的20条记录

    为什么不建议将子报告作为分页?
    不建议使用这样的子查询,因为它将很难更新或维护,再加上SQL中的所有额外查询、分组和表聚合,它的效率将大大降低,甚至可能比原始查询花费更长的时间。对于大型查询,建议使用订阅、缓存或快照。

    只有在成功执行报表中的所有数据集后,才可以设置可见报表区域。因此,在所有情况下,它都将等待检索所有数据。您需要显示所有数据,还是可以指定一个参数,用户选择该参数将数据限制在某个子集内。@SteveFord我不能这样做,原因有二,首先,我想为一个现有的应用程序生成报告,它的存储过程已经准备好了,我不能更改它们,第二,我想找到一种方法来实现这一点。这对我很有用,也可能会让其他人更容易通过大量数据工作。我读到了
    使用分页
    ,但我找不到如何每次向浏览器发送一页。你能告诉我该怎么做吗?你是如何呈现报告的?擅长?pdf?windows窗体报表查看器控件?在浏览器窗口中显示报告?在浏览器窗口中显示报告如果在浏览器中显示,如果您的报告设置为支持分页控件,则分页控件应自动显示在浏览器窗口的左上角。我已经用另一个选项更新了我的答案,用于通过子报告实现这一点。据我所知,分页和断开用于在获取所有数据后设置页面。我在页面左上角看到寻呼机号码。但在大数据中,用户应该等待1分钟,2分钟。。。要加载所有数据,请使用分页。如果可能的话,我想消除这种等待