具有自定义分页的SSRS

时间:2016-09-09 18:37:47

标签: ssrs-2008

我正在处理SQL Server报告,该报告显示大小为300 K的数据,因此在报告处理上大部分时间都非常慢。所以我想我是否可以做一些程序来从每页的数据库中获取数据。这种方式从db调用并且报表处理时间会减少。换句话说,如果我每页显示50条记录,当我在第一页并点击第2页或下一个按钮时,我的报告将数据从51提取到100.当我再次点击下一个按钮然后我得到第3页的数据为101到150。

那么我有什么方法可以实现。

1 个答案:

答案 0 :(得分:0)

通常在呈现报表时,会提取所有数据并且SSRS会呈现导致延迟的报表。如果性能是这里的关键,您可以使用存储过程一次检索50行,而不是将所有值直接传递给SSRS - 请注意,此处您将无法使用本机的下一页/上一页按钮。

解决方法是创建自定义链接以循环回报告本身,并使用递增的参数指定要从中开始的索引行。

创建一个存储过程,该过程接受一个参数,该参数指定表中的起始行:

CREATE PROCEDURE dbo.usp_GetData

@RowNumber BIGINT

AS

  BEGIN

      DECLARE @FirstRow BIGINT
      DECLARE @LastRow BIGINT

      SET @FirstRow = @RowNumber
      SET @LastRow = @RowNumber + 50

    ;WITH CTE AS
    (
      SELECT *,
             ROW_NUMBER() OVER (ORDER BY num) AS RowNumber
      FROM   dbo.TestTable
    )
    SELECT *
    FROM   CTE
    WHERE  RowNumber >= @FirstRow
           AND RowNumber < @LastRow

  END

GO

创建一个存储过程,从表中检索总行数:

CREATE PROCEDURE dbo.usp_GetTotalRows

AS

BEGIN

    SELECT COUNT(*) "TotalRows"
    FROM dbo.TestTable

END

GO

创建报告并使用两个存储过程添加两个数据集。

应自动生成@RowNumber参数。您可以将默认值设置为1以从第1行开始报告。

在报告上创建两个“自定义”按钮(实际上只是链接回同一报告)。您可以使用上一页/下一页按钮的文本框。

对于“上一个按钮”文本框 - 属性&gt;行动&gt;转到报告&gt;指定报告(选择报告名称的名称)。添加参数并将表达式设置为: =Parameters!RowNumber.Value-50

对于“下一个按钮”文本框 - 属性&gt;行动&gt;转到报告&gt;指定报告(选择报告名称的名称)。添加参数并将表达式设置为: =Parameters!RowNumber.Value+50

您还可以更改按钮的可见性选项(例如在Parameters!RowNumber.Value = 1时隐藏“上一页”按钮,或在Parameters!RowNumber.Value + 50 >= DataSetName!TotalRows.Value时隐藏“下一页”按钮