jasper报告中的多个组

时间:2011-07-05 10:23:41

标签: jasper-reports report ireport

我想在ireport中创建多个组,数据应该以分组方式显示。对于Eg: 首先,Group1数据应该完全打印,然后,


组别1:


模块数据 在此之后我想完全打印Group2数据

组2:


类别数据

我正在使用结果集数据源。

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:4)

只要您的查询结果正确排序,Jasper报告就会以这种方式正常工作。

例如,假设您正在按名为“MY_GROUP”的字段进行分组,并且其值为“GROUP A”和“GROUP B”。在报告中,您将为字段“MY_GROUP”创建一个组。在查询中,请确保将MY_GROUP作为ORDER BY子句中的第一个字段。您还可以在iReports中通过添加“MY_GROUP”字段作为报表查询的“排序选项”部分中的第一个字段来完成此操作。

现在您已经添加了论坛并且订购正确,您的结果将如下所示:

标题 - GROUP A 细节 - 小组A. 页脚 - 组A. 标题 - B组 细节 - B组 页脚 - B组

正如您所愿。我的猜测是你没有正确地订购你的查询结果。这可能会导致对A组,B组等进行多次分组。所有这些都是散布的。

答案 1 :(得分:2)

如果iReport中的组未将所有数据保存在一起,请使用子报告。当Jasper到达子报表时,它会运行整个子报表并将整个事件放入报表中。你可以有类似的东西:

子报告1 - 第1组     第1组第一记录     第1组第二记录     第1组第3记录     ...     第1组最后一项记录 分报告2 - 第2组     第2组第一记录     第2组第二记录     第2组第3记录     ...     第2组第3记录

答案 2 :(得分:1)

正如汤姆所说的那样。 Jasper Reports Groups不会对从查询中检索到的数据进行排序,只是按照它来的顺序进行排序。

为了以分组方式显示信息,您必须向查询添加ORDER BY,以便报告接收的行已经订购。

答案 3 :(得分:0)

因此,当您使用多个组标题时,会发生一个问题。第一个标头的行为仅按唯一值按列值A的预期顺序进行。尽管列值B是非唯一值,但使用列值B的第二个标头仍将打印在每一行上。

  1. 理论上,您应该可以使用ORDER BY
ORDER BY ValueA, ValueB

假设您使用的是sql,plsql等,以正确显示报告。但是,在我的情况下,这没有发生,尽管对于其他人来说似乎可行。

  1. 使用子报表通过唯一报表附加次要差异。您创建一个包含空详细信息的根报告。然后,创建“唯一”报告以用作子代表。最后,您使用subreport元素将值链接到根报告中。虽然这是一项很好的工作,并且可能会导致重复代码。
  2. 我使用的一种骇人听闻的方式是:将“打印时表达式”与具有 2个组标题和列标题的逻辑布尔表达式混合使用。 布尔表达式:
$F{QUERY}.equals(Query1) && ($P{P_Typequery}.equalsIgnoreCase("QueryA") && $P{P_parameter} == null) 

$F{QUERY}.equals(Query1) && ($P{P_Typequery}.equalsIgnoreCase("P_QueryA") && $P{P_parameter} != null) 

,带有两个组标题和一个列标题。列标题不会针对每一行重复,因此您将布尔表达式之一分配给它的“何时打印”,因此它并不总是打印。第一组标题不会针对每一行重复,并且可以工作。第二个组标题用于您希望它为每个唯一值重复的时间,因为它总是为每一行打印,并且您在“打印时间”时使用另一个布尔值。希望对您有帮助