web-dev-qa-db-ja.com

複数の同じ値フィールドを1つのセルにグループ化します

まず、レコードはテーブルコンポーネントごとにテーブルに表示されますが、レポートコンポーネントには表示されません。

結果は次のようになります。

 YEARS MONTHS SUMMONTH SUMQUARTER   
 ----- ------ -------- ----------  
  2009 Jan      130984     432041
       Feb      146503
       Mar      154554     
       Apr      147917     435150 
       May      131822     
       Jun      155411     
       Jul      144000     424806 
       Aug      130369     
       Sep      150437     
       Oct      112137     400114 
       Nov      152057     
       Dec      135920     
 =====================================
       Jan-Dec  1692111
 =====================================
  2010 Jan      139927     417564 
       Feb      154940     
       Mar      122697     
       Apr      163257     413305 
       May      124999     
       Jun      125049     
       Jul      145127     427612 
       Aug      138804     
       Sep      143681     
       Oct      143398     406381 
       Nov      125351     
       Dec      137632     
 =====================================
       Jan-Dec  1664862
 =====================================

Sumquarter列には、年の各四半期の合計が表示されます。

フィールドの値を繰り返した場合、それらは印刷されません。

問題は、sumquarterの列をグループ化して、各行に最初に出力された繰り返し値が次の繰り返し値に結合され、繰り返されない値に達するまで単一のセルになるようにする方法です。

あなたはそれを画像で簡単に見ることができます。以下は表が示す画像であり、私が好んだ解決策は、これらの3か月の合計を1つのセルにグループ化することです。

これが画像です:

12
user1264222

このサンプルを使用できます:

<?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="year_sum_quarter" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="year" class="Java.lang.Integer"/>
    <field name="month" class="Java.lang.String"/>
    <field name="sum" class="Java.lang.Integer"/>
    <field name="q" class="Java.lang.Integer"/>
    <variable name="yearSum" class="Java.lang.Integer" resetType="Group" resetGroup="yearGroup" calculation="Sum">
        <variableExpression><![CDATA[$F{sum}]]></variableExpression>
    </variable>
    <variable name="qSum" class="Java.lang.Integer" resetType="Group" resetGroup="quaterGroup" calculation="Sum">
        <variableExpression><![CDATA[$F{sum}]]></variableExpression>
    </variable>
    <group name="yearGroup">
        <groupExpression><![CDATA[$F{year}]]></groupExpression>
        <groupFooter>
            <band height="20">
                <textField>
                    <reportElement x="100" y="0" width="100" height="20"/>
                    <box leftPadding="10">
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="0.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="0.0"/>
                    </box>
                    <textElement/>
                    <textFieldExpression><![CDATA["Jan-Dec, " + $F{year}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="200" y="0" width="100" height="20"/>
                    <box leftPadding="0">
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="0.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="0.0"/>
                    </box>
                    <textElement/>
                    <textFieldExpression><![CDATA[$V{yearSum}]]></textFieldExpression>
                </textField>
                <staticText>
                    <reportElement x="0" y="0" width="100" height="20"/>
                    <box>
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="1.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="0.0"/>
                    </box>
                    <textElement textAlignment="Center" verticalAlignment="Middle">
                        <font isBold="true" isItalic="true"/>
                    </textElement>
                    <text><![CDATA[]]></text>
                </staticText>
                <staticText>
                    <reportElement x="300" y="0" width="100" height="20"/>
                    <box>
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="0.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="1.0"/>
                    </box>
                    <textElement textAlignment="Center" verticalAlignment="Middle">
                        <font isBold="true" isItalic="true"/>
                    </textElement>
                    <text><![CDATA[]]></text>
                </staticText>
            </band>
        </groupFooter>
    </group>
    <group name="quaterGroup">
        <groupExpression><![CDATA[$F{year} + $F{q}]]></groupExpression>
    </group>
    <columnHeader>
        <band height="50">
            <staticText>
                <reportElement x="100" y="30" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Month]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="30" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Year]]></text>
            </staticText>
            <staticText>
                <reportElement x="200" y="30" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Month Sum]]></text>
            </staticText>
            <staticText>
                <reportElement x="300" y="30" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Quarter Sum]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20" splitType="Stretch">
            <staticText>
                <reportElement x="300" y="0" width="100" height="20"/>
                <box>
                    <topPen lineWidth="0.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="0.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box>
                    <topPen lineWidth="0.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="0.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[]]></text>
            </staticText>
            <textField>
                <reportElement x="0" y="0" width="100" height="20">
                    <printWhenExpression><![CDATA[$V{yearGroup_COUNT} == 1]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="0.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="0.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{year}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="200" y="0" width="100" height="20"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{sum}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{month}]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Group" evaluationGroup="quaterGroup" isBlankWhenNull="false">
                <reportElement stretchType="RelativeToBandHeight" isPrintRepeatedValues="false" x="300" y="0" width="100" height="20" printWhenGroupChanges="quaterGroup">
                    <printWhenExpression><![CDATA[$V{quaterGroup_COUNT} == 1]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="0.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="0.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$V{qSum}]]></textFieldExpression>
            </textField>
            <line>
                <reportElement x="300" y="0" width="100" height="1" printWhenGroupChanges="quaterGroup">
                    <printWhenExpression><![CDATA[$V{quaterGroup_COUNT} == 1]]></printWhenExpression>
                </reportElement>
            </line>
        </band>
    </detail>
</jasperReport>

結果は(PDF形式で)次のようになります。 Resulting report in PDF format

このサンプルでは、​​Detail列のYearバンドで2つの要素を使用しました:1つtextField垂直方向の境界線のみで、printWhenExpression: "$V{yearGroup_COUNT} == 1"プロパティ(全体で1回だけ表示しますyearGroup)と1つstaticTextテキストなしで、垂直方向の境界線のみ。

Quarter Sum列のDetailバンドで3つの要素を使用しました。
1つtextField、垂直方向の境界線のみ、printWhenExpression: "$V{quaterGroup_COUNT} == 1"プロパティ(全体で1回だけ表示しますquaterGroup)、1つstaticTextテキストなしで、垂直方向の境界線と描画用のline要素のみprintWhenExpression: "$V{quaterGroup_COUNT} == 1"プロパティのある水平方向の境界線。

15
Alex K