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