報(bào)表變量是建立在報(bào)表表達(dá)式之上的特殊對(duì)象。報(bào)表變量簡(jiǎn)化以下任務(wù):
報(bào)表,其中大量使用在整個(gè)報(bào)告模板表達(dá)式。這些表達(dá)式可以通過(guò)使用報(bào)表變量只能聲明一次。
計(jì)數(shù),求和,平均,最低,最高,方差等:報(bào)表變量可以基于像對(duì)應(yīng)的表達(dá)式的值執(zhí)行各種計(jì)算
如果變量是在報(bào)表設(shè)計(jì)定義,那么這些可以通過(guò)在表達(dá)式中的新變量引用。因此,在該變量是在報(bào)表設(shè)計(jì)中聲明的順序是非常重要的。
變量聲明如下:
<variable name="CityNumber" class="java.lang.Integer" incrementType="Group" incrementGroup="CityGroup" calculation="Count"> <variableExpression> <![CDATA[Boolean.TRUE]]> </variableExpression> </variable>
如上面所看到的,<variable>元素包含屬性的數(shù)量。這些屬性總結(jié)如下:
類似的參數(shù)和字段,</variable>元素的name屬性是強(qiáng)制性的。它允許引用由它的聲明的名稱在報(bào)表表達(dá)式中的變量。
class屬性也是強(qiáng)制性的,它指定了變量值的類名。它的默認(rèn)值是java.lang.String。這是可以改變的,在classpath可用的任何類無(wú)論是在報(bào)表編譯時(shí)間和報(bào)告充填時(shí)間。無(wú)論報(bào)告值的類型,引擎采用該$V {}標(biāo)記是用來(lái)報(bào)告表達(dá),從而不必要手動(dòng)投射。
這個(gè)屬性決定的變量填充報(bào)表時(shí)要執(zhí)行什么計(jì)算。下面的小節(jié)描述所有的<variable>元素的計(jì)算屬性的可能值。
Average: 變量的值是變量表達(dá)式的每一個(gè)非空值的平均值。有效期僅為數(shù)值變量。
Count: 該變量的值是變量表達(dá)式非空實(shí)例的數(shù)量。
First: 變量的值是變量表達(dá)式的第一個(gè)實(shí)例的值。隨后的值將被忽略。
Highest: 變量的值是變量表達(dá)式的最高值。
Lowest: 該變量的值是變量表達(dá)式在報(bào)表中的最低值。
Nothing: 不進(jìn)行計(jì)算的變量。
StandardDeviation: 該變量的值是所有非空值匹配報(bào)表表達(dá)式的標(biāo)準(zhǔn)偏差。有效期僅為數(shù)值變量。
Sum: 該變量的值是由報(bào)表表達(dá)式返回所有非空值的總和。
System: 該變量的值是一個(gè)自定義計(jì)算(計(jì)算該變量自己的值,使用JasperReports小腳本功能)
Variance: 該變量的值是一個(gè)報(bào)表變量的表達(dá)式求值返回的所有非空值的方差。
此屬性確定填充報(bào)表上的當(dāng)前記錄時(shí),用于計(jì)算變量的值的類。默認(rèn)值是任何類實(shí)現(xiàn)net.sf.jasperreports.engine.fill.JRIncrementerFactory。工廠類將被用于由發(fā)動(dòng)機(jī)來(lái)實(shí)例化對(duì)象的增量在運(yùn)行時(shí)根據(jù)該變量中設(shè)置的計(jì)算屬性。
這個(gè)決定何時(shí)重新計(jì)算變量的值。此屬性使用的值,如下:
Column: 該變量的值重新計(jì)算各列的結(jié)尾
Group: 當(dāng)指定incrementGroup改變?cè)摻M的變量值重新計(jì)算。
None: 該變量的值重新計(jì)算每個(gè)記錄。
Page: 該變量的值被重新計(jì)算在每一頁(yè)的末尾。
Report: 該變量的值被重新計(jì)算一次,在報(bào)表的末尾。
這決定了該變量的值被重新計(jì)算,當(dāng)incrementType是組的名稱。這需要在JRXML報(bào)表模板中聲明的任何組的名稱。
這決定了當(dāng)一個(gè)變量的值被復(fù)位。此屬性使用的值,如下:
Column: 該變量的值復(fù)位在每一列的開(kāi)頭。
Group: 該變量的值是當(dāng)指定incrementGroup修改組復(fù)位。
None: 該變量的值不會(huì)被重置。
Page: 該變量的值復(fù)位在每一頁(yè)的開(kāi)頭。
Report: 該變量的值復(fù)位只有一次,在報(bào)表的開(kāi)頭。
這決定了該變量的值復(fù)位,當(dāng)resetType是組的名稱。該屬性的值是在JRXML報(bào)表模板中聲明的任何組的名稱。
有一些內(nèi)置的系統(tǒng)變量,準(zhǔn)備在表達(dá)式中使用,如下所示:
Variable Name | 描述 |
---|---|
PAGE_NUMBER | 這個(gè)變量的值是它的當(dāng)前頁(yè)碼。它可以被用來(lái)同時(shí)顯示當(dāng)前頁(yè)面的數(shù)量和使用JasperReports文本字段的元素,evaluationTime屬性的一種特殊的功能的總頁(yè)數(shù)。 |
COLUMN_NUMBER | 這個(gè)變量包含了當(dāng)前的列號(hào) |
REPORT_COUNT | 此報(bào)表變量包含的處理記錄的總數(shù)。 |
PAGE_COUNT | 這個(gè)變量包含了生成當(dāng)前頁(yè)面時(shí)所處理的記錄數(shù)。 |
COLUMN_COUNT | 這個(gè)變量包含了生成當(dāng)前列時(shí)所處理的記錄數(shù)。 |
GroupName_COUNT | 這個(gè)變量的名稱是從它所對(duì)應(yīng)的組,后綴為_(kāi)COUNT序列的名稱派生的。這個(gè)變量包含的記錄在當(dāng)前組的數(shù)量。 |
讓一個(gè)變量(countNumber)加入到現(xiàn)有的報(bào)表模板(第報(bào)表設(shè)計(jì))。我們將前綴數(shù)到每個(gè)記錄。修訂后的報(bào)告模板(jasper_report_template.jrxml)如下。將其保存到C: oolsjasperreports-5.0.1 est 目錄:
<?xml version="1.0"?> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <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="jasper_report_template" pageWidth="595" pageHeight="842" columnWidth="515" leftMargin="40" rightMargin="40" topMargin="50" bottomMargin="50"> <parameter name="ReportTitle" class="java.lang.String"/> <parameter name="Author" class="java.lang.String"/> <queryString> <![CDATA[]]> </queryString> <field name="country" class="java.lang.String"> <fieldDescription> <![CDATA[country]]> </fieldDescription> </field> <field name="name" class="java.lang.String"> <fieldDescription> <![CDATA[name]]> </fieldDescription> </field> <variable name="countNumber" class="java.lang.Integer" calculation="Count"> <variableExpression> <![CDATA[Boolean.TRUE]]> </variableExpression> </variable> <title> <band height="70"> <line> <reportElement x="0" y="0" width="515" height="1"/> </line> <textField isBlankWhenNull="true" bookmarkLevel="1"> <reportElement x="0" y="10" width="515" height="30"/> <textElement textAlignment="Center"> <font size="22"/> </textElement> <textFieldExpression class="java.lang.String"> <![CDATA[$P{ReportTitle}]]> </textFieldExpression> <anchorNameExpression> <![CDATA["Title"]]> </anchorNameExpression> </textField> <textField isBlankWhenNull="true"> <reportElement x="0" y="40" width="515" height="20"/> <textElement textAlignment="Center"> <font size="10"/> </textElement> <textFieldExpression class="java.lang.String"> <![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band>