如何在列标题中显示列的总和?

时间:2016-02-08 07:20:40

标签: jasper-reports

我必须在iReport 5工具中设计一个Jasper报告,其中包含以下约束:

  1. 我需要在图片
  2. 中显示标题中每列的总和
  3. 我需要像图片一样显示列垂直
  4. 期望的输出

    expected output

    是否可以设计这样的报告?

3 个答案:

答案 0 :(得分:2)

使用普通detail频段和columnHeader频段,可以通过在您想要求和的字段上创建calculationType="sum"变量来实现

请参阅: How to sum all values in a column in Jaspersoft iReport Designer?

然后使用textField频段中的columnHeader显示变量,设置evaluationTime="Report"以便在显示变量之前计算变量。

要轮播textElement垂直,请使用rotation属性(rotation="Left"

示例:

<?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="ReportTest" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" uuid="43c90ca5-f3c3-4dda-8423-9ff1442f90e3">
    <queryString>
        <![CDATA[select * from mytable]]>
    </queryString>
    <field name="descr" class="java.lang.String">
        <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="value" class="java.lang.Double">
        <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <variable name="sumValue" class="java.lang.Double" calculation="Sum">
        <variableExpression><![CDATA[$F{value}]]></variableExpression>
    </variable>
    <columnHeader>
        <band height="70">
            <textField>
                <reportElement mode="Opaque" x="0" y="50" width="100" height="20" forecolor="#000000" backcolor="#CCCCCC" uuid="dfe13f55-12a6-4c33-b5ba-00dd61f37c96"/>
                <box leftPadding="2">
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                    <rightPen lineWidth="0.25"/>
                </box>
                <textElement verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA["TOTALE"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report" pattern="###0.00;-###0.00">
                <reportElement mode="Opaque" x="100" y="50" width="100" height="20" forecolor="#000000" backcolor="#CCCCCC" uuid="ed251db0-474e-4e20-8788-3c2f08bfd1e7"/>
                <box leftPadding="2" rightPadding="2">
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                    <rightPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Right" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$V{sumValue}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement mode="Opaque" x="100" y="0" width="100" height="50" forecolor="#000000" backcolor="#CCCCCC" uuid="62b62711-8cfb-4df2-8f9e-4a34249dcc66"/>
                <box leftPadding="2">
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                    <rightPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle" rotation="Left">
                    <font size="8"/>
                </textElement>
                <text><![CDATA[SESSIONS]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20" splitType="Immediate">
            <textField>
                <reportElement x="0" y="0" width="100" height="20" uuid="6a009a8c-16de-451c-a0f1-516a48f793d0"/>
                <box leftPadding="2">
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                    <rightPen lineWidth="0.25"/>
                </box>
                <textElement verticalAlignment="Middle">
                    <paragraph lineSpacing="Single"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{descr}]]></textFieldExpression>
            </textField>
            <textField pattern="###0.00;-###0.00">
                <reportElement x="100" y="0" width="100" height="20" uuid="1fccff95-408c-4364-b003-c691fefdde62"/>
                <box rightPadding="2">
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                    <rightPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Right" verticalAlignment="Middle">
                    <paragraph lineSpacing="Single"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{value}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

结果(包含一些任意数据)

Result

答案 1 :(得分:1)

如果您不熟悉交叉表,如前所述,您可以创建一个子报表,只显示列总计并将其放在&#34;之前&#34;细节带(例如在页眉带中)。

显然,按照这种方式,您将访问数据源两次,这可能是您想要避免的,特别是在时间很重要的情况下。

基本上,交叉表总体上是更好的解决方案,但是如果你需要更简单的东西(也许你不熟悉iReport)或一次性的话,你可以考虑一个子报告

答案 2 :(得分:0)

在这种类型的报告中,您可以使用交叉表,每隔一个名称放置一个字段。在列中使用,并在行中使用字段名称,并在单元格中使用sum函数

<crosstab>
    <rowGroup name="month" width="128" totalPosition="End">
        ...
    </rowGroup>
    <columnGroup name="monthlyUse" height="66">
            ...
    </columnGroup>
    <measure name="nameMeasure" class="java.lang.Integer" calculation="Sum">
                <measureExpression><![CDATA[$F{number}]]></measureExpression>
    </measure>              
    ....                
</crosstab>

交叉表将生成一个表格,每月使用量与总行数相比