JasperReports' iReport - generating a grand total

后端 未结 2 1813
刺人心
刺人心 2021-01-19 10:25

I have a variable datatype set up in the group footer band that generates a subtotal for the counts in each group in my report. Works great. I would like a grand total to g

相关标签:
2条回答
  • 2021-01-19 10:41

    Just create a new variable and in the variable expression add up all of the subtotals using their variable name

    for instance:

    $V{subtotal1}+$V{subtotal2}+$V{subtotal3}
    

    After that, throw it in the 'summary' band and in the report properties check the box that says "summary on new page". That way it'll be on the last page of your report.

    0 讨论(0)
  • 2021-01-19 10:48

    You can use two variables with different resetType - for calculating sum in group (with resetType="Group" resetGroup="groupName" calculation="Sum" properties) and for calculating total sum for whole report (with resetType="Report" calculation="Sum" properties).

    The sample (jrxml file):

    <?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="grand_total_sample" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true">
        <property name="ireport.zoom" value="1.0"/>
        <property name="ireport.x" value="0"/>
        <property name="ireport.y" value="0"/>
        <queryString>
            <![CDATA[SELECT DOCUMENTID, POSITIONNO, PRODUCTID, QUANTITY FROM POSITIONS WHERE PRODUCTID < 10 AND POSITIONNO > 18 ORDER BY POSITIONNO]]>
        </queryString>
        <field name="DOCUMENTID" class="java.lang.Integer"/>
        <field name="POSITIONNO" class="java.lang.Integer"/>
        <field name="PRODUCTID" class="java.lang.Integer"/>
        <field name="QUANTITY" class="java.lang.Integer"/>
        <variable name="quantitySumInGroup" class="java.lang.Integer" resetType="Group" resetGroup="positionNoGroup" calculation="Sum">
            <variableExpression><![CDATA[$F{QUANTITY}]]></variableExpression>
            <initialValueExpression><![CDATA[0]]></initialValueExpression>
        </variable>
        <variable name="quantityTotalSum" class="java.lang.Integer" calculation="Sum">
            <variableExpression><![CDATA[$F{QUANTITY}]]></variableExpression>
            <initialValueExpression><![CDATA[0]]></initialValueExpression>
        </variable>
        <group name="positionNoGroup">
            <groupExpression><![CDATA[$F{POSITIONNO}]]></groupExpression>
            <groupHeader>
                <band height="20">
                    <textField>
                        <reportElement x="0" y="0" width="400" height="20"/>
                        <box>
                            <topPen lineWidth="1.0"/>
                            <leftPen lineWidth="1.0"/>
                            <bottomPen lineWidth="1.0"/>
                            <rightPen lineWidth="1.0"/>
                        </box>
                        <textElement textAlignment="Center">
                            <font isBold="true" isItalic="true" isUnderline="false"/>
                        </textElement>
                        <textFieldExpression><![CDATA["Position no: " + $F{POSITIONNO}]]></textFieldExpression>
                    </textField>
                </band>
            </groupHeader>
            <groupFooter>
                <band height="20">
                    <textField>
                        <reportElement x="0" y="0" width="400" height="20"/>
                        <textElement>
                            <font isBold="false" isItalic="true" isUnderline="false"/>
                        </textElement>
                        <textFieldExpression><![CDATA["Sum in group: " + $V{quantitySumInGroup}]]></textFieldExpression>
                    </textField>
                </band>
            </groupFooter>
        </group>
        <detail>
            <band height="20" splitType="Stretch">
                <textField>
                    <reportElement x="0" y="0" width="100" height="20"/>
                    <textElement/>
                    <textFieldExpression><![CDATA[$F{DOCUMENTID}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="100" y="0" width="100" height="20"/>
                    <textElement/>
                    <textFieldExpression><![CDATA[$F{PRODUCTID}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="200" y="0" width="100" height="20"/>
                    <textElement/>
                    <textFieldExpression><![CDATA[$F{QUANTITY}]]></textFieldExpression>
                </textField>
            </band>
        </detail>
        <lastPageFooter>
            <band height="20">
                <textField>
                    <reportElement x="0" y="0" width="400" height="20"/>
                    <textElement>
                        <font isBold="true" isItalic="true" isUnderline="false"/>
                    </textElement>
                    <textFieldExpression><![CDATA["Total sum: " + $V{quantityTotalSum}]]></textFieldExpression>
                </textField>
            </band>
        </lastPageFooter>
    </jasperReport>
    

    The result will be:

    The result in iReport preview

    0 讨论(0)
提交回复
热议问题