我有一份报告,其中嵌入了4个单独的子报告。 在主报表上,我有一个按组筛选的参数,我将其设置为按组筛选,除非您为参数选择全部,然后它显示所有组。
If {?Main Group Name} = "ALL" then {Incident.Group Name} like "*"
else {Incident.Group Name} = {?Main Group Name}
此过滤器设置在单个子报告中正常工作,但是如果我运行它选择“全部”作为主要组的一部分,它会导致工作表无限循环并且不能正确显示数据。
数据位于所有组标题1和组页脚1中,因此理想情况下,每个组都应重复相同的页面(如下所示)。
当我为它运行它时,它会运行一段非常长的时间,并且必须手动停止,否则它会继续运行。手动停止后,我得到以下内容。它几乎看起来像是在尝试将所有组都叠加在一起。
任何人都知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
您的子报告位于主报告(组标题)中的哪个位置?你正在做什么与主报告的记录细节(抑制,我猜)?记录选择公式是什么样的,从子报告中?子报表中有多少个表?如果是多表,你的联接是否正确?
我已经看到子报表具有给定记录选择时出现的事件,然后从主报表添加了链接,其中生成的子报表查询完全被清除,因为Crystal Reports通过修改子报表记录选择来“帮助”开发者打算。真实的故事(一个17秒的报告更新并运行了20个小时,然后有人注意到它从未完成预定的运行)。它听起来(嘿,在文本中)就像你没有在子报告中设置正确的关系,并且实际上可能正在形成cartesean产品。
您在哪里使用问题中显示的代码?在记录选择?在@Formula?您使用哪种链接到子报表? “应该”链接到子报告的是{Incident.Group Name} - 因为这是主报告组中的更改。
如果你打破子报告并单独运行它们,手动将{?Main Group Name}设置为“ALL”,然后对组名称进行采样,结果是什么?如果各个子报表仍然运行,则至少可以查看记录计数(状态栏),当您手动终止报表时,可以查看性能信息以及子报表“显示查询”。
最后,如果你尝试使用Top 10(或2,或任何你想要的数字)运行main作为“ALL”,然后观察子报告的性能,这可能会给出一些线索。如果有选择 - 阴谋副产品,这至少会限制一些效果。你仍然会把“*”传递给子报告,但只做“N”次循环。
叹息,最后一句:如果你真的想要“全部”,如果你使用类似的东西,你可能会得到更好的服务:
If {?Main Group Name} = "ALL" then TRUE
else {Incident.Group Name} = {?Main Group Name}
很抱歉这么久......我没有足够的时间来缩短它。
好的,真的,真的最后一个:如果我误解了你的帖子,假设了太多不同的主题,或者我只是在说出我的话:对不起。错过了一顿饭,捡了几次打扰,然后加倍喝咖啡。我确定在某个地方有一个笑脸。
答案 1 :(得分:0)
[插入add'l答案,因为它足够明显以保证它自己的输入。]
我想我理解群组标题/足迹图
您是否尝试将Main作为前10名来限制#组?
(图表)记录集有多大?
AND,是否为异步查询设置了报告?
子报告中发生了什么:
复杂查询?
简单查询?
抑制所有细节并显示图表?
去另一个表/数据库?
表连接?
在main中运行“前10名”组,等待它结束,然后检查主要和每个图表子组(至少为几组):
Report / Performance Information:
Total Number of Records -- (Main should be "Top 10" )
Performance Timing:
Run the Query,
Read Database Records,
Time to Format All Charts
or
Time to Format 1st Page.
如果您有数百万条记录,即使是“顶部”,也可能需要一段时间来阅读和计算顶部。如果您正在调用图表,即使是每个图表的单个组,如果子报表仍然必须应用链接查询,解析数百万条记录,执行添加计算,创建图表(仍然记录所有记录) )等,它可能只是长时间运行。
您可能会发现一个小的“全部”顶部“n”将显示在幕后花费大量时间,并且允许整个报告运行,显示票证计数的添加比较。如果没有,我们可以稍后再看(主要是通过打开尸体并向内看)。
我正在努力确定常规行为,而且我无法获得要求审核的要求文档。我只能做出假设并提出问题并提出建议。