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

Ruc*_*sam 1 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'用于其他场景,但无法使用此场景.我也发现了类似的问题,但不满足这个要求.所以想知道可能的解决方案.

dad*_*a67 7

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

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

整个报告看起来像这样

<?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>
Run Code Online (Sandbox Code Playgroud)