【问题标题】:SSRS reports Group doesn't display properly once limited rows per pageSSRS 报告组在每页有限行后无法正确显示
【发布时间】:2017-05-04 10:09:51
【问题描述】:

我正在尝试制作 SSRS 交货单报告,其中需要按客户分组的详细信息,并使用客户地址作为报告标题。一个数据集包含多个客户,每个客户可能有 10 多行项目详细信息。 但是,由于送货单是预先打印的,因此每页上的详细信息行限制为 10 行。

所以我按客户信息对所有详细信息进行分组,使用一个大矩阵嵌套一个较小的矩阵来显示客户信息(标题)和项目详细信息(详细信息)。

为了限制每页的详细信息行,我在 Group 中使用了 '=Ceiling(RowNumber(Nothing)/10)' 命令。

但是我注意到这样做后会有很大的副作用。例如,客户 A 有 15 个明细行,客户 B 有 8 个明细行,预期结果是:

  • 第 1 页:客户 A 地址和 10 项详细信息
  • 第 2 页:客户 A 地址和 5 项详细信息
  • 第 3 页:客户 B 地址和 8 项详细信息

但实际结果是:

  • 第 1 页:客户 A 地址和 10 项详细信息
  • 第 2 页:客户 A 地址和 5 项详细信息
  • 第 3 页:客户 B 地址和 5 项详细信息
  • 第 4 页:客户 B 地址和 3 项详细信息

这是因为客户 B 详细信息的 RowNumber 是从 16 开始的,所以在第一个客户 B 页面上只显示了 5 行,这是意料之外的。有没有可能达到预期效果的方法?

【问题讨论】:

    标签: reporting-services


    【解决方案1】:

    问题是你对分组的第二个条件:

    =Ceiling(Rownumber(Nothing)/10)
    

    这会分组并因此在每 10 行触发一个分页符,无论这些行的客户是谁。在您的示例中,客户 C 的第一页上只有 7 行,因为到目前为止总共打印了 23 行,A 打印了 15 行,B 打印了 8 行。

    希望您的数据集基于 Sql,因为我们可以使用一些内置功能 Row_NumberOverPartition 来计算查询结果中的组页码:

    SELECT Floor((Row_Number() OVER(partition by CustomerName ORDER BY CustomerName, ItemNumber)-1) / 10) AS GroupPageNumber, 
      CustomerName, ItemNumber
    FROM Items 
    ORDER BY CustomerName, ItemNumber
    

    这会计算每页最多 10 个项目的组页码,因此现在您只需将第二个分组表达式设为 =Fields!GroupPageNumber.Value

    【讨论】:

    • 感谢您的回答,此解决方案有效。但是我仍然认为布局(如每页 10 行)应该在报告中而不是在 SQL 查询中进行管理。有没有办法在 SSRS 配置中完成它?
    • 没有每页最大行数的属性。您可以使用底部边距设置来尝试对报告强制执行此操作,但问题将出现在 Web 查看器中,其中交互式高度更像是指南而不是规则,并且您可能会在浏览器中显示或多或少的行。如果预览不重要,您可能可以让它以这种方式工作。
    • 我之前尝试过使用页面高度,但是对于一个客户的 10+ 行的情况,第二页上的详细信息不会再次显示组标题。由于组标题数据是动态的,我无法将“在每一页上重复”设置为 true。我也尝试在报告中使用变量而不是行数作为组标准,但是 SSRS 不能接受变量作为组标准。我只是想知道在 SSRS 中是否没有办法做到这一点....
    • 但是在 SSRS 中有一种方法可以做到这一点 - 正如您在第一条评论中所说的“这个解决方案有效”。开心,将工作报告签入源代码控制,勾选任务完成,祝贺自己成功交付此报告并继续下一步。不要沉迷于必须按照您希望的方式工作的事情,它正在发挥作用。用户并不关心繁重的工作是由 SQL 或 SSRS 完成还是由打字机上的无数猴子完成,他们只想要一份工作报告,这就是他们所拥有的。微笑,你交付了,生活美好!
    • 大声笑,你是对的,生活对我们俩都有好处:)。感谢您的大力帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多