web-dev-qa-db-ja.com

JasperReportsでのレコードのグループ化

JasperReportsに問題があります。特定の列の値に応じてレコードをグループ化したい。

例:入力データ:

Name--email--PledgeType--amount
[email protected]
[email protected]
[email protected]
[email protected] 40.00

出力レポートは、「PledgeType」値(1、2、...番号)によってグループ化されます。

Total for group one: 55.00
Name email         amount
aaa  [email protected] 20.00
ccc  [email protected]  35.00
------------------------------------
Total for group two: 70.00
Name email         amount
bbb  [email protected]  30.00
ddd  [email protected]   40.00

JasperReportsはこの問題を解決できますか?どうやって?

10
viet thang

JasperReportsでグループ化を定義できます。 JasperReportsは合計を計算します。グループと合計を追加する快適な方法があります。ここでは、iReportで行う必要があることの概要を説明します。

グループを追加するには

  • pledgeTypeで並べ替えるクエリを変更します-JasperReportsでは、グループ化に従ってデータを並べ替える必要があります。
  • レポートインスペクタでレポートを右クリックし、レポートグループの追加を選択します。
  • ウィザードに従い、グループ名PledgeTypeとして設定し、Group by the following report objectwhere the fieldPledgeType。 [次へ]をクリックします。チェックグループヘッダーを追加し、完了をクリック.

合計を追加するには

  • レポートインスペクターで変数を右クリックし、Add Variableを選択します。
  • プロパティパネルで、次の構成を選択します。変数クラス:BigDecimal、計算:Sum、ResetType:Group、ResetGroupPledgeType、変数式:$F{amount}
  • 変数をレポートデザイナのグループヘッダーにドラッグアンドドロップします。フィールドをクリックして変更します。テキストフィールド式:"Total for group " + $F{PledgeType} + ": " + $V{totalPledge}、式クラス:Java.lang.String。評価時間:グループ。評価グループ:PledgeType。

情報:評価時間は、変数が評価されるタイミング、つまり計算の合計が表示されるタイミングを決定します。グループに設定すると、「グループ処理が完了したら」という意味になります。

生成されたレポートとJRXMLを添付しました。

report output

JRXMLはiReport5.0で作成されますが、上記の手順に従うと、JR v2 +で動作するはずです。

<?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="report2" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="ce08fe1c-1543-4460-8613-7f03b200082b">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[select * from
(select 'aaa' as Name, '[email protected]' as email, 1 as PledgeType, 20.00 as amount
union select 'bbb', '[email protected]' ,2, 30.00
union select 'ccc', '[email protected]' ,1, 35.00
union select 'ddd', '[email protected]' ,2, 40.00) tbl
order by PledgeType]]>
    </queryString>
    <field name="Name" class="Java.lang.String"/>
    <field name="email" class="Java.lang.String"/>
    <field name="PledgeType" class="Java.lang.Long"/>
    <field name="amount" class="Java.math.BigDecimal"/>
    <variable name="totalPledge" class="Java.math.BigDecimal" resetType="Group" resetGroup="PledgeType" calculation="Sum">
        <variableExpression><![CDATA[$F{amount}]]></variableExpression>
    </variable>
    <group name="PledgeType">
        <groupExpression><![CDATA[$F{PledgeType}]]></groupExpression>
        <groupHeader>
            <band height="61">
                <textField evaluationTime="Group" evaluationGroup="PledgeType">
                    <reportElement uuid="401c7b3b-af73-4d40-8982-9c1692eb7085" x="0" y="21" width="555" height="20"/>
                    <textElement/>
                    <textFieldExpression><![CDATA["Total for group " + $F{PledgeType} + ": " + $V{totalPledge}]]></textFieldExpression>
                </textField>
                <staticText>
                    <reportElement uuid="87cd0d21-014d-4e6c-a54a-006165a38414" x="0" y="41" width="185" height="20"/>
                    <textElement/>
                    <text><![CDATA[Name]]></text>
                </staticText>
                <staticText>
                    <reportElement uuid="bd0fc2f5-4963-4c9d-a9be-3659be06e436" x="185" y="41" width="185" height="20"/>
                    <textElement/>
                    <text><![CDATA[email]]></text>
                </staticText>
                <staticText>
                    <reportElement uuid="5d5d7ce1-5353-4f83-91b4-57725b0c922b" x="370" y="41" width="185" height="20"/>
                    <textElement/>
                    <text><![CDATA[amount]]></text>
                </staticText>
            </band>
        </groupHeader>
    </group>
    <detail>
        <band height="20">
            <textField>
                <reportElement uuid="5b325da6-7c56-4357-8808-911dad16ec53" x="0" y="0" width="185" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="0bc06b28-7b8c-4af9-997a-714d1599def1" x="185" y="0" width="185" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="e5504bb9-c3c0-4135-94c6-7ea935f97cb6" x="370" y="0" width="185" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{amount}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
20
MrsTang