Crystal Reports Sub报告基于Parameter重复

时间:2012-02-09 21:45:06

标签: crystal-reports

我有一份报告,其中嵌入了4个单独的子报告。 在主报表上,我有一个按组筛选的参数,我将其设置为按组筛选,除非您为参数选择全部,然后它显示所有组。

If {?Main Group Name} = "ALL" then {Incident.Group Name} like "*"
else {Incident.Group Name} = {?Main Group Name}

此过滤器设置在单个子报告中正常工作,但是如果我运行它选择“全部”作为主要组的一部分,它会导致工作表无限循环并且不能正确显示数据。

数据位于所有组标题1和组页脚1中,因此理想情况下,每个组都应重复相同的页面(如下所示)。
Correct view for 1 group

当我为它运行它时,它会运行一段非常长的时间,并且必须手动停止,否则它会继续运行。手动停止后,我得到以下内容。它几乎看起来像是在尝试将所有组都叠加在一起。

enter image description here enter image description here

任何人都知道可能导致这种情况的原因吗?

2 个答案:

答案 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”将显示在幕后花费大量时间,并且允许整个报告运行,显示票证计数的添加比较。如果没有,我们可以稍后再看(主要是通过打开尸体并向内看)。

我正在努力确定常规行为,而且我无法获得要求审核的要求文档。我只能做出假设并提出问题并提出建议。