如何水平重复分组文件(jasper报告)

时间:2013-01-21 03:44:48

标签: jasper-reports

数据库表 - RunRecord

Name      Student_ID   Meter(m)   Time(s)
ABC       1016         100        13   

ABC       1016         200        26

ACB       1017         100        15

BAA       1018         100        18

BAA       1018         200        22

BBB       1019         100        14

CDE       1020         200        22

CDE       1020         100        14

我该怎么办才能在Jasper报告中获得以下结果?

                      Student Run Record

                  ABC           ACB           BAA        BBB         CDE
100M              13            15            18         14          14
200M              26                          22                     22

2 个答案:

答案 0 :(得分:3)

您可以使用 crosstab 元素来实现此目的。

我使用了您提供的查询,我的示例中包含以下字段:

  • 名称:字符串
  • 米:长
  • 时间:长

将Palette中的 crosstab 拖放到报表设计器中的报表摘要区域,将弹出一个向导。

按照向导:

  • 选择包含查询的数据集。
  • 将分组设置为唯一 Meter 配置为名称,并将分组设置为 unique
  • 作为衡量标准,您使用时间,并将聚合器更改为 Sum (除了 count 之外的任何内容,因为每个学生只有一个值,距离总和将与值相同。

添加交叉表后,在报表检查器中单击并展开交叉表,单击行组> Meter并在“属性”面板中选择 Total Position:None 。列组相同>名称。

然后输出如下图所示。

draft report

为了使输出更接近您在查询中草拟的内容:

  • 在报告检查器中,选择行组> Meter,在“属性”面板中将“桶值”类更改为java.lang.String。然后在设计器中编辑包含$V{Meter}的字段并将其更改为$V{Meter} + "m"以使输出 100m 而不是 100
  • 要隐藏 0 ,请在包含该度量的字段的Designer中单击,然后将其从$V{TimeMeasure}更改为$V{TimeMeasure} == 0 ? null : $V{TimeMeasure}。在“属性”面板中,选中空白时
  • 的属性框。

finished report

答案 1 :(得分:0)

更改报告行组的存储区表达式。通过连接几个字段来创建存储桶表达式。例如:

<bucket class="java.lang.String">
    <bucketExpression><![CDATA[$F{field1}+""+$F{field2}]]></bucketExpression>
</bucket>