33

我在 Jaspersoft iReport Designer 中有以下类似报告,但无法弄清楚如何将垂直列“医生付款”中存在的所有值相加以获得总计“1601”?此列的长度是可变的(即行数根据数据库的大小及其更新频率而变化)。

是否有任何变量$V{COLUMN_COUNT}(实际上不给出行数,这里是 5),它给出一列中所有值的总和?如果没有,怎么做sum

Doctor ID   Doctor Payment
 A1             123
 B1             223
 C2             234
 D3             678
 D1             343
Total          1601
4

2 回答 2

79

解决您的任务很容易。您应该创建并使用一个新变量来对“医生付款”列的值求和。

在您的情况下,可以像这样声明变量:

<variable name="total" class="java.lang.Integer" calculation="Sum">
    <variableExpression><![CDATA[$F{payment}]]></variableExpression>
</variable>
  • 计算类型Sum
  • 重置类型是报告
  • 变量表达式$F{payment},其中$F{payment}是包含 sum ( Doctor Payment ) 的字段名称。

工作示例。

CSV 数据源:

医生ID,付款
A1,123
B1,223
C2,234
D3,678
D1,343

模板:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="doctor_id" class="java.lang.String"/>
    <field name="payment" class="java.lang.Integer"/>
    <variable name="total" class="java.lang.Integer" calculation="Sum">
        <variableExpression><![CDATA[$F{payment}]]></variableExpression>
    </variable>
    <columnHeader>
        <band height="20" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box leftPadding="10"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="10" isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Doctor ID]]></text>
            </staticText>
            <staticText>
                <reportElement x="100" y="0" width="100" height="20"/>
                <box leftPadding="10"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="10" isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Doctor Payment]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box leftPadding="10"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{doctor_id}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20"/>
                <box leftPadding="10"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{payment}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <summary>
        <band height="20">
            <staticText>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box leftPadding="10"/>
                <textElement>
                    <font isBold="true"/>
                </textElement>
                <text><![CDATA[Total]]></text>
            </staticText>
            <textField>
                <reportElement x="100" y="0" width="100" height="20"/>
                <box leftPadding="10"/>
                <textElement>
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$V{total}]]></textFieldExpression>
            </textField>
        </band>
    </summary>
</jasperReport>

结果将是:

通过 iReport 的预览生成报告


您可以在JasperReports Ultimate Guide中找到很多信息。

于 2012-11-25T15:57:48.990 回答
21

iReports 列的自定义字段(总和、平均值等)

  1. 右键单击变量,然后单击创建变量

  2. 点击新变量

    一种。注意右边的属性

  3. 相应地重命名变量

  4. 将值类名称更改为正确的数据类型

    一种。您可以通过单击 3 个点进行搜索

  5. 选择正确的计算类型

  6. 更改表达式

    一种。点击小图标

    湾。选择您要计算的列

    C。点击完成

  7. 将初始值表达式设置为 0

  8. 将增量类型设置为无

  9. 将增量器工厂类名称留空
  10. 设置重置类型(通常是报告)

  11. 将新的文本字段拖到舞台(通常在最后一页页脚或列页脚中)

  12. 双击新的文本字段
  13. 清除表达式“文本字段”</li>
  14. 选择新变量

  15. 点击完成

  16. 将新文本放在理想的位置 </li>
于 2016-05-12T18:38:37.667 回答