【问题标题】:SSRS rows in tablix outside group goes to next pagetablix 外部组中的 SSRS 行转到下一页
【发布时间】:2017-01-10 16:04:42
【问题描述】:

我的 SSRS 报告如下所示:

Report Header:
Page X of Total Page Y (based on change of Customer ID)
Customer ID (Referring to ReportItem!CustomerID)

Report Body:
A tablix page break by change of group Customer ID

Tablix Header:        Date    |  Price | Quantities | Description | Hidden Column Customer ID
Tablix Details:    YYYY-MM-DD |  1.00  | 500        | Blah Blah   | Customer ID (used for page header referring)
Row outside group: Empty
Row outside Group: Sum of Price
Row outside Group: Sum of Quantities
Row outside group: Empty
Row outside group: *** END OF RECORDS ***

Report Footer:
Company address

有时,如果tablix详细信息的报告正文已满,则Row outside group会转到下一页,这导致在下一页中,只会显示组外的部分行(例如 * END OF记录 *)。

然后,在报告标题中,客户 ID 字段无法获取 ReportItem!CustomerID 的值,将其留空。

有没有办法解决空白问题?还是使组外的行必须附加到同一页面中的 tablix 详细信息?出于某种原因,我无法限制每页显示的行数。谢谢。

【问题讨论】:

  • 此报告是一次针对 1 个客户还是针对多个客户生成?
  • @StevenWhite,它一次为多个客户运行。并以 PDF 格式导出。谢谢。

标签: reporting-services ssrs-tablix


【解决方案1】:

也许您可以尝试在“记录结束”组行的某处放入最终“客户 ID”的另一个隐藏副本,然后使用 IIF 调用该副本,如果您拥有的原始隐藏“客户 ID”不是' t 出现在最后一页。

【讨论】:

  • 这种方法也不起作用。我在“记录结束”旁边创建了另一个隐藏的文本框。然后在页眉中使用下面的 IIF 来检测 CustomerID:=IIF(IsNothing(ReportItem!CustomerID.Value),ReportItem!CustomerID_TABLIX_FOOTER.Value,ReportItems!CustomerID.Value) 但这会引发另一个错误:页眉或页脚中的表达式只能引用一个报表项。
  • @TinySimonH。好的。我有另一个想法。如果您的输出是 PDF 文件,这可能有效。保留您在“记录结束”行中创建的第二个隐藏的“客户 ID”字段。在您的标题中,使用 2 个相互重叠的文本框。一个调用原始的“CustomerID”字段,另一个调用新的“CustomID”字段。如果两个 'CustomerID' 字段同时出现在同一页面上,那么标题文本框将与相同的数据相互重叠,理论上,您永远不会知道标题区域中有 2 个单独的文本框。 :-)
  • 谢谢!尽管您的方法可以显示客户 ID,但如果两个字段重叠,它会使字体更粗。无论如何,我会标记这个有效的答案,因为它已经是呈现报告的最佳方式。谢谢。
  • @TinySimonH。我想到了另一件事来尝试。保持标题中的两个文本框原样,但尝试在您添加到“记录结束”行的隐藏“客户 ID”字段中实现 IIF。查看您是否可以设置表达式,以便查看原始隐藏的“CustomerID”字段是否为空。如果原始隐藏的“CustomerID”字段为空,则将“CustomerID”带入此“END OF RECORDS”行字段。否则,做相反的事情。这可能会阻止标题中的两个文本框同时显示文本并导致加粗文本加倍。
  • 谢谢。最后解决问题。为可见性添加以下表达式: 对于带有 ReportItem!Custo‌​merID_TABLIX_FOOTER 的文本框:=IIF(Globals!PageNumber = Globals!TotalPages, FALSE, TRUE) 对于带有 ReportItem!CustomerID.Value 的文本框:=IIF(Globals!PageNumber Globals!TotalPages, FALSE, TRUE)
【解决方案2】:

您可以控制何时发生分页符并将元素保持在一起,但这不是很直观。首先,不要使用实际的页眉和页脚。只需使用将出现在每个客户数据的开头和结尾的文本框。其次,您需要将所有内容包装在一个分组的矩形中。这将按客户分组,分页符设置为个实例之间发生。

有关如何执行此操作的更多详细信息,请参阅我的回答 here

【讨论】:

  • 听起来@TinySimonH 对他的行组分页符没问题,但如果我理解正确,发生的事情是在分页符组上,有足够的客户数据导致额外的最终要创建的页面,其中不包含任何客户数据,而仅包含他的 Tablix 页脚组行。而且由于这些 Tablix 页脚组行不包含他的标题字段所依赖的隐藏的“客户 ID”数据,因此他的标题字段的逻辑在最后一页上不起作用,因为他正在调用来自 Body 字段的数据在最后一页上不存在。
  • @Rashiki,您是完全正确的,并且完全理解我的问题。我现在正在尝试你上面提到的方法。
  • 我明白了。我仍然建议您让 SSRS 根据当前分组过滤值。尝试交叉引用其他对象中的值并不可靠。就像您在枢轴的各个级别进行求和一样。当它已经知道它的范围时,告诉它哪些文本框要 Sum 是没有意义的。
【解决方案3】:

如果我要在报表标题中显示“Body”对象值,我会在“Body”中的某处创建一个隐藏的表达式文本对象,该对象使用代码调用(Report Properties, Code)将值放入共享变量。然后,这为您提供了一个设置变量、获取变量、情况类型。当“Body”对象出现在整个报告中时,该变量会更新,并且该变量会“粘”在对象不一定出现的页面上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多