当子报表导致分页时,Tablix标题不会在新页面上重复

时间:2011-04-21 22:00:42

标签: sql-server-2008 reporting-services

我一直在与SSRS斗争太长时间了,这应该是一件简单的事情。我希望有人可以帮我看一个解决方案。

我有一个包含大量配置文件的报告,每个配置文件都有大量的数据部分。数据部分(各种表格和图表)之间没有任何关联,除了它们“键”回父配置文件ID之外。

目标(看起来很简单)是在每个页面上都有一个带有配置文件信息的标题,然后将数据部分(每个格式完全不同)布局。

我们遇到的第一个问题是,由于某些原因,SSRS2008不允许Tablix单元格包含另一个具有不同数据集的Tablix(为什么它不能仅仅需要基于父分组的过滤器超出我的范围)。这个缺点的推荐解决方法是将所有数据组合成一个巨大的数据集(这里不可能,数据部分太多而且多变)或者嵌入子报告并传入参数。虽然第二个选项增加了打印大量配置文件所需的“工作”,但我们继续实现此功能, 工作。

问题出现在主tablix(包含子报告的那个)上,其中静态行标题组设置为“RepeatOnNewPage = true”。此设置允许标题根据需要显示在每个页面上...除了子报告跨多个页面,标题被错误地省略

由于某种原因,当子报表跨越多个页面时,父Tablix的标题不会重复!这让我感到疯狂,因为似乎SSRS中的一些糟糕的设计决定让我陷入了无法创建我想要的报告的情况......标题在没有子报告的情况下工作,但我需要子报告才能“加入” “配置文件的数据部分。

这似乎是一个简单而常见的要求......毕竟,这是一份从几十年前的报告系统迁移出来的报告。我已经搜索了StackOverflow和谷歌没有成功......我似乎有很多关于分页符的问题/答案,但没有任何建议解决这个子报告问题。

我发布这封信,以防我遗漏某些东西。如果有人有任何建议,我们将不胜感激。

4 个答案:

答案 0 :(得分:4)

在每个页面上重复列标题的一种非常简洁的方法

http://www.a2zmenu.com/Blogs/BI/Tablix-headers-not-repeating-in-SSRS-2008.aspx

答案 1 :(得分:2)

我们已经解决了我们的问题......虽然不是最理想的方式。

页面标题(“主”报告,而不是子报告)似乎是唯一方式,始终有标题部分。

我们在此博客帖子中实施了一个解决方案: Maintaining State in Reporting Services 2008

我们从博客文章略微修改,从方法中删除“id”并包含GUID,以确保即使用户同时运行多个报告副本,报告值也不会混淆。 (使用共享变量时,请记住它们对于跨执行实例和报表服务器上的用户运行的报表是全局的,因此在使用它们时需要非常小心!)

在报告正文中,我们有一个隐藏的文本块,调用:

=Code.SetValue("xxx",Fields!Field1.Value) & Code.SetValue("yyy",Fields!Field2.Value)

并在报告页面标题中我们将这些引用为(例如):

=Code.GetValue("xxx")

这是有效的,因为正文在页眉之前计算,即使是第1页。

尽管如此,鉴于他们已经将多年的开发投入到这个产品中,最终它应该是微软产品中应该存在的东西!为什么我们不能拥有嵌套的tablix和更容易使用的标题超出我...再次这是从90年代早期的程序升级报告,这完成所有这一切没有问题。至少,给我们报告变量,可以在处理报告时检索和设置变量!

无论如何,事情就像它们一样......我们用共享变量测试了解决方案,它似乎运行得很好。我们将运行压力测试以确保其正确实施,如果我们发现任何其他问题,我会在这里发布一些内容。

(如果有人知道在页面上获得一致的标题行的其他方法,即使有大高度的详细行,请分享...)

答案 2 :(得分:2)

我也遇到过同样的问题。我发现解决问题的方法是对数据进行去规范化,添加“记录类型”字段以确定该行是父项还是子项。

我的Tablix中有两个子表,都显示链接到外部分组的详细数据。如果我将子表的标题设置为在每个页面上重复(使用高级箭头>静态属性> KeepTogether = True,KeepWithGroup = After,RepeatOnNewPage = True),则其中一个子表将正确显示,但是父表的重复标题就会消失。

长话短说,这是一个需要解决的大问题。解决方案很简单,对我有用,但可能对每个人都不起作用。

下面链接的是SSRS2008示例RDL,它连接到localhost并且有一个我遇到的问题的例子以及我实现的解决方案。如果您发现它有用,请随时使用它!

(我会在这里发布它,但看起来Stack Overflow因代码块而失败)

http://www.sqlservercentral.com/Forums/Topic1111567-1633-1.aspx?Update=1

答案 3 :(得分:1)

在实施客户对SSRS报告的要求时,我们遇到了完全相同的问题, 并且尝试了许多因失败而导致的所有事情。

在我们的案例中, 主报告有4个子报告。应在新页面中启动每个子报表。并且当新的子报表开始时,页面标题应该根据当前页面中的主体中的子报表动态更改。

SubReports之一也是SubReport3的另一个案例。基本上主报告基于经销商级别运行。但客户希望SubReport3针对与@Dealer参数相关的每个SubDealer运行。此外,客户希望在SubReport3内的新页面中看到每个SubDealer数据。

因此,我们发现了不同的解决方法如下。

我们为主报告创建了页眉。 (报告菜单 - >添加页眉)(正如@codinginthevoid所说,它是最一致的方式)

我们在单独的tablix中放置了4个子报表。我们在每个tablix中添加了新列。每个tablix中的列visiblity = false,该列的宽度可以尽可能小,然后在该列内部创建占位符,如下所示:

如果表达式在Tablix1中,则表达式为=“Tablix1”,如果在Tablix2中则为“Tablix2”等等。

然后开始为Tablix1设计页面标题,为Tablix1投放的pageheader中的每个报表项都具有可见性表达式,如下所示:

=ReportItems!Tablix1_HiddenTextbox1.Value IS NOTHING

然后对Tablix2等应用相同的东西。

最后,报告的PageHeader中有很多文本框,其中一些位置完全相同,重叠,但是在呈现报表时,每个文本框都显示为与相关子报表相关的页面。 / p>