とても簡単です。製品フィールドにグループを作成し、このグループに 2 つの変数 (結果の合計と平均の合計をカウントするため) を作成できます。組み込み変数を使用すると、このグループの要素数を計算して表示できます。
これは作業サンプルです:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="group_average2" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<queryString>
<![CDATA[]]>
</queryString>
<field name="product" class="java.lang.String"/>
<field name="price" class="java.lang.Integer"/>
<sortField name="product"/>
<variable name="totalSum" class="java.lang.Double" resetType="Group" resetGroup="productGroup" calculation="Sum">
<variableExpression><![CDATA[$F{price}]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
<variable name="averageSum" class="java.lang.Double" resetType="Group" resetGroup="productGroup" calculation="Average">
<variableExpression><![CDATA[$F{price}]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
<group name="productGroup">
<groupExpression><![CDATA[$F{product}]]></groupExpression>
<groupFooter>
<band height="20">
<textField>
<reportElement x="0" y="0" width="122" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{product}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="244" y="0" width="122" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{totalSum}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="122" y="0" width="122" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$V{productGroup_COUNT}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="366" y="0" width="149" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{averageSum}]]></textFieldExpression>
</textField>
</band>
</groupFooter>
</group>
<pageHeader>
<band height="19">
<staticText>
<reportElement x="0" y="-1" width="122" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="none">
<font isBold="true" isItalic="true"/>
</textElement>
<text><![CDATA[Product]]></text>
</staticText>
<staticText>
<reportElement x="122" y="-1" width="122" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="none">
<font isBold="true" isItalic="true"/>
</textElement>
<text><![CDATA[Number of orders]]></text>
</staticText>
<staticText>
<reportElement x="244" y="-1" width="122" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="none">
<font isBold="true" isItalic="true"/>
</textElement>
<text><![CDATA[Total sum]]></text>
</staticText>
<staticText>
<reportElement x="366" y="-1" width="149" height="20"/>
<box leftPadding="10" rightPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="none">
<font isBold="true" isItalic="true"/>
</textElement>
<text><![CDATA[Average sum of order]]></text>
</staticText>
</band>
</pageHeader>
</jasperReport>
このサンプルは、CSV ファイルをデータソースとして受け取ります。クエリを編集できます - SQL クエリでデータを取得するため。
iReportのレポート デザインは次のとおりです。
結果は次のようになります ( iReportのプレビュー経由):
JasperReportsでの変数の使用に関するこの記事と、 JasperReportsでのグループの使用に関するこの投稿を読む必要があります。
グループで使用する前に、データをソートする必要があることに注意してください。jasperforge.orgからのグループ化とソートに関する投稿からの引用:
In order to get an accurate data representation, the data in the data source should be already ordered according to the group expressions used in the report. One can either perform data sorting through the report query, or use the <sortField/> element.