cod*_*oid 7 sql-server-2008 reporting-services
我一直在与SSRS斗争太长时间了,这应该是一件简单的事情.我希望有人可以帮我看一个解决方案.
我有一个包含许多配置文件的报告,每个配置文件都有大量的数据部分.除了将数据"键"回父配置文件ID之外,数据部分(各种表格和图表)之间没有任何关联.
目标(看起来很简单)是在每个页面上都有一个包含配置文件信息的标题,然后将数据部分(每个格式完全不同)布局.
我们遇到的第一个问题是,由于某些原因,SSRS2008不允许Tablix单元格包含另一个具有不同数据集的Tablix(为什么它不能仅仅需要基于父分组的过滤器超出我的范围).这个缺点的推荐解决方法是将所有数据组合成一个巨大的数据集(这里不可能,数据部分太多而且多变)或者嵌入子报告并传入参数.虽然第二个选项增加了打印大量配置文件所需的"工作",但我们继续实现这一点,它确实有效.
问题出现在主Tablix(包含子报告的那个)上,其中静态行标题组设置为"RepeatOnNewPage = true".此设置允许标题根据需要显示在每个页面上...除了子报告跨越多个页面,其中标题被错误地省略.
出于某种原因,当子报表跨越多个页面时,父Tablix的标题不会重复!这让我感到疯狂,因为似乎SSRS中的一些糟糕的设计决定让我陷入了无法创建我想要的报告的情况......标题在没有子报告的情况下工作,但我需要子报告才能"加入" "配置文件的数据部分.
这似乎是一个简单而常见的要求......毕竟,这是一份从几十年前的报告系统迁移出来的报告.我已经搜索了StackOverflow和谷歌没有成功......我似乎有很多关于分页符的问题/答案,但没有任何暗示这个子报告问题的解决方案.
我发布这个以防万一我错过了什么.如果有人有任何建议,我将不胜感激.
我们已经解决了我们的问题......尽管不是以最理想的方式。
页面标题(“主”报告的页面标题,而不是子报告的)似乎是一致拥有标题部分的唯一方法。
我们实现的解决方案很大程度上基于此博客文章: Mainting State in Reporting Services 2008
我们对博客文章进行了稍微修改,从方法中删除了“id”并包含 GUID,以确保即使用户同时运行报告的多个副本,报告值也不会混淆。(使用共享变量时,请记住,它们对于跨执行实例和报表服务器上的用户运行的报表来说是全局的,因此使用它们时需要非常小心!)
在报告正文中,我们有一个隐藏的文本块,它调用:
=Code.SetValue("xxx",Fields!Field1.Value) & Code.SetValue("yyy",Fields!Field2.Value)
Run Code Online (Sandbox Code Playgroud)
在报告页眉中,我们将其引用为(例如):
=Code.GetValue("xxx")
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为正文是在页眉之前计算的,即使对于第 1 页也是如此。
尽管如此,最终这仍然是对微软产品中应该出现的东西的黑客攻击,因为他们已经在这个产品上投入了多年的开发!为什么我们不能嵌套 tablix 且更易于使用的标题超出了我的范围……这又是从 90 年代初的程序升级报告,该程序毫无问题地完成了所有这一切。至少,为我们提供可以在处理报告时检索和设置的报告变量!
无论如何,事情就是这样……我们已经使用共享变量测试了该解决方案,它似乎运行得很好。我们将进行压力测试以确保其正确实施,如果我们发现任何进一步的问题,我会在这里发布一些内容。
(如果有人知道其他方法可以在页面上获得一致的标题行,即使存在高度较大的详细信息行,请分享...)