【问题标题】:How to sum the values returned by a subreport placed in detail band?如何汇总放置在详细信息带中的子报表返回的值?
【发布时间】:2016-09-05 22:39:30
【问题描述】:

我有一个报告和一个子报告,基本上打印这个:

这是主报告的代码:

<jasperReport>
    <queryString><![CDATA[
select 1 as "RECORD", 'A' as "GROUP"
from dual
  union all
select 2, 'A'
from dual
  union all
select 3, 'B'
from dual
  union all
select 4, 'B'
from dual]]>
    </queryString>
    <field name="RECORD" class="java.math.BigDecimal"/>
    <field name="GROUP" class="java.lang.String"/>
    <variable name="return" class="java.math.BigDecimal"/>
    <group name="group">
        <groupExpression><![CDATA[$F{GROUP}]]></groupExpression>
        <groupFooter>
            <band height="20">
                <staticText>
                    <text><![CDATA[End of group ]]></text>
                </staticText>
                <textField>
                    <textFieldExpression><![CDATA[$F{GROUP}]]></textFieldExpression>
                </textField>
                <staticText>
                    <text><![CDATA[The sum of returned values for the group]]></text>
                </staticText>
            </band>
        </groupFooter>
    </group>
    <detail>
        <band height="20">
            <staticText>
                <text><![CDATA[Record]]></text>
            </staticText>
            <textField>
                <textFieldExpression><![CDATA[$F{RECORD}]]></textFieldExpression>
            </textField>
            <subreport>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <returnValue subreportVariable="return" toVariable="return"/>
                <subreportExpression><![CDATA["subreport.jasper"]]></subreportExpression>
            </subreport>
            <staticText>
                <text><![CDATA[Subreport returned]]></text>
            </staticText>
            <textField evaluationTime="Band">
                <textFieldExpression><![CDATA[$V{return}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

以及子报表的代码:

<jasperReport>
    <queryString>
        <![CDATA[select * from dual]]>
    </queryString>
    <field name="DUMMY" class="java.lang.String"/>
    <variable name="return" class="java.math.BigDecimal">
        <variableExpression><![CDATA[new BigDecimal(Math.random())]]></variableExpression>
    </variable>
</jasperReport>

我想要的是打印组带(页眉或页脚)中组的返回值的总和。

我知道不可能在变量中累积值,因为变量的评估总是发生在子报表返回结果之前。所以我会总结一堆空值。

我见过有人说要在子报表后放置在带区中的文本字段内求和,但从未设法使其工作。

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    您可以在从子报表返回值时指定计算类型(如 sum)。因此,如果您想对每个组的返回值求和,则必须执行以下操作:

    <variable name="returnSum" class="java.math.BigDecimal" calculation="System" resetType="Group" resetGroup="group"/>
    ...
    <returnValue subreportVariable="return" toVariable="returnSum" calculation="Sum"/>
    

    【讨论】:

    • 它适用于“Sum”、“Count”和“Highest”。对于“第一”、“最低”和“标准偏差”,我得到了 0。对于“方差”,我得到了一个例外,对于“不同计数”,我在第一组之后得到 2,在第二组之后得到 4!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多