jasper 报告 table 显示上一页总计

jasper report table show previous page total

我正在使用 Jaspersoft® Studio 6.8.0。

我想要一个table可以显示上一页总计,以下面的table为例,假设这个 table 有 3 页:

                     grade
                     10
                     20
        sub total    30
                             page 1
                     grade
previous page total  30
                     40
                     50
          sub total  90
                            page 2
                     grade
previous page total  90
                     60
                     70
         sub total   130
                            page 3

即从第 2 页到最后一页显示 previous page total

如何实现?谢谢!

一种方法是创建一个变量,其中包含一个 mutable 值,该值由显示上一页总计的文本表达式设置为副作用。

例如像这样:

    <variable name="TotalVariable" class="java.lang.Integer" calculation="Sum" resetType="Page">
        <variableExpression>$F{Column}</variableExpression>
    </variable>
    <variable name="PreviousTotalHolder" class="java.util.concurrent.atomic.AtomicInteger" calculation="System">
        <initialValueExpression>new java.util.concurrent.atomic.AtomicInteger()</initialValueExpression>
    </variable>
    ...display the previous total in the new page
                        <textField>
                            <reportElement .../>
                            <textFieldExpression>"Previous total " + $V{PreviousTotalHolder}.get()</textFieldExpression>
                        </textField>
    ...use a dummy property in the page footer to set the total into the holder object
                        <textField>
                            <reportElement x="0" y="0" width="90" height="15" uuid="a1ab288e-ae4b-4f12-83a5-e30486bb30d5">
                                <propertyExpression name="foo">Integer.toString($V{PreviousTotalHolder}.getAndSet($V{TotalVariable}))</propertyExpression>
                            </reportElement>
                            <textFieldExpression>"Total " + $V{TotalVariable}</textFieldExpression>
                        </textField>

根据您报告的确切设计(例如,取决于您是否有 table 组件或表格带报告),可能还有其他方法可以做到这一点。