我必须在iReport 5工具中设计一个Jasper报告,其中包含以下约束:
期望的输出
是否可以设计这样的报告?
答案 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>
结果(包含一些任意数据)
答案 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>
交叉表将生成一个表格,每月使用量与总行数相比