打印表达式时仅打印组中的最后一个元素

时间:2014-04-10 12:48:39

标签: jasper-reports

我在oracle表中有以下数据集,并希望从该数据生成CSV文件。

我的数据

CaseID  Amount
1000     10
1000     20
1000     50      
2000     30 
2000     10     
3000     30 
3000     20 
3000     20   

有必要从上面的数据中显示以下输出。

必需输出

CaseID  Amount  Aggregate
1000     10
1000     20
1000     50      80

2000     30 
2000     10      40

3000     30 
3000     20 
3000     20      70

通过根据caseID组累积金额总和来填充聚合列。

组摘要应显示在组的最后一个元素上。但不是在下一行,应该显示在同一行和下一列中,与最后一个元素匹配。

我尝试使用'Print When Expression'用于其他方案,但无法使用此方案。我也发现了类似的问题,但不满足这个要求。所以想知道可能的解决方案。

1 个答案:

答案 0 :(得分:6)

您可以使用evaluateTime =" Auto"执行类似的操作。您可以拥有一个文本元素,该元素显示组中最后一条记录的值,而其他记录则为空。它根本不打印元素,但是在表达时你不能使用打印,因为它没有延迟评估。

evaluationTime ="自动"使用重置类型的变量来决定它读取变量值的时刻。每个组都有一个自动创建的计数变量,该变量随组重置,如果您创建一个重置每个记录的新变量,您可以使用它来确定当前记录是否是该组中的最后一个记录。

整个报告看起来像这样

<?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="report" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" resourceBundle="jasperreports" whenResourceMissingType="Key" isIgnorePagination="true" uuid="816687ff-bb19-4f6b-a2b6-53634ce095fc">
    <style name="dd" isDefault="true" fontSize="10"/>
    <field name="CaseID" class="java.lang.Integer"/>
    <field name="Amount" class="java.lang.Integer"/>
    <variable name="AmountSum" class="java.lang.Integer" resetType="Group" resetGroup="CaseIDGroup" calculation="Sum">
        <variableExpression><![CDATA[$F{Amount}]]></variableExpression>
    </variable>
    <variable name="GroupCurrentCount" class="java.lang.Integer" resetType="None">
        <variableExpression><![CDATA[$V{CaseIDGroup_COUNT}]]></variableExpression>
    </variable>
    <group name="CaseIDGroup">
        <groupExpression><![CDATA[$F{CaseID}]]></groupExpression>
    </group>
    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="100" height="20" uuid="af7a5ea9-ffcb-4a7f-aaa8-7d5cab06a579"/>
                <textFieldExpression><![CDATA[$F{CaseID}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20" uuid="a7e2795e-456a-4c6e-946f-8315df453b1f"/>
                <textFieldExpression><![CDATA[$F{Amount}]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Auto" isBlankWhenNull="true">
                <reportElement x="200" y="0" width="100" height="20" uuid="afda4fcc-78fc-46f9-8c5c-2e0c4f04dfa5"/>
                <textFieldExpression><![CDATA[$V{GroupCurrentCount}.equals($V{CaseIDGroup_COUNT}) ? $V{AmountSum} : null]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>