Jasper Reports - 使用CalculationEnum.System计算总计

时间:2016-01-30 12:48:10

标签: jasper-reports

我有3列(从查询中获取数据)

| A | B | C |

| 5 | 15 | 20 |

| 15 | 25 | 40 |

这些栏目的净总额计算如下: - 20 40 0.5(即C的总和= A的总和/ B的总和)。如何使用java获取jasper报告中所需的总计算量。

为了计算列'C'的总和,我将计算枚举常量设置为calculationEnum.SYSTEM。将表达式设置为

expression.setText("new Double($F{" +A + "/" +B +"}.doubleValue())");,它显示相应的字段new Double($F{A/B}.doubleValue())不存在。为了消除这种情况,我在字段列的列表中添加了该字段。但随后它显示相应字段的列不存在。

到目前为止我所做的是否正确?或者有没有更好的方法可以根据需要计算总数。

2 个答案:

答案 0 :(得分:0)

字段A和B必须是class="java.lang.Number"或其子类之一java.lang.Double

要获得它们的总和,表达式为:

$F{A}.doubleValue() + $F{B}.doubleValue()

要计算SUM($F{A}) / SUM($F{B}),您需要使用两个变量

<variable name="sumOfA" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$F{A}]]></variableExpression>
    <initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>

<variable name="sumOfB" class="java.lang.Double" calculation="Sum">
    <variableExpression><![CDATA[$F{B}]]></variableExpression>
    <initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>

然后在textField进行除法,请记住在evaluationTime="Report"上设置textField,以便在显示之前计算变量。

 <textField evaluationTime="Report">
    <reportElement x="208" y="17" width="100" height="20" uuid="414e6633-58c5-4081-a04b-fe3973f29d96"/>
    <textFieldExpression><![CDATA[$V{A}.doubleValue()/$V{B}.doubleValue()]]></textFieldExpression>
  </textField>

答案 1 :(得分:0)

创建两个变量,一个用于A的和,一个用于B的和。 然后使用以下表达式添加文本字段:

($V{sumOfA}/$V{sumOfB})