Jaspersoft Studio User Guide
Jaspersoft Studio User Guide
RELEASE 5.6
http://www.jaspersoft.com
Copyright 2014 Jaspersoft Corporation. All rights reserved. Printed in the U.S.A. Jaspersoft, the Jaspersoft
logo, Jaspersoft iReport Designer, JasperReports Library, JasperReports Server, Jaspersoft OLAP, Jaspersoft
Studio, and Jaspersoft ETL are trademarks and/or registered trademarks of Jaspersoft Corporation in the United
States and in jurisdictions throughout the world. All other company and product names are or may be trade
names or trademarks of their respective owners.
This is version 0514-JSS56-04 of the Jaspersoft Studio User Guide.
TABLE OF CONTENTS
Chapter 1 Getting Started with Jaspersoft Studio
1.1 Introduction to Jaspersoft Studio
1.2 User Interface
1.3 Hardware Requirements
1.4 Software Requirements
1.5 Accessing the Source Code
1.6 Report Structure in Jaspersoft Studio
1.6.1 The Report Lifecycle
1.6.2 Understanding Bands
1.6.3 Band Types
1.6.4 Specifying Report Properties
1.6.5 Columns
1.6.6 Advanced Options
1.7 Measure Units in Jaspersoft Studio
1.7.1 Configuration
1.7.2 Changing the Field Measure Unit
1.7.3 Alias and Autocomplete
1.7.4 Approximations
1.8 Exporting reports with Jaspersoft Studio
1.8.1 Compiling the Report
1.8.2 Preview and Exporting
Chapter 2 Concepts of JasperReports
2.1 JRXML Sources and Jasper Files
2.2 Data Sources and Print Formats
2.3 Expressions
2.3.1 The Type of an Expression
2.3.2 Expression Operators and Object Methods
2.3.3 Using an If-Else Construct in an Expression
2.4 Using Java as a Language for Expressions
2.5 Using Groovy as a Language for Expressions
2.6 Using JavaScript as a Language for Expressions
2.7 Using JasperReports Extensions in Jaspersoft Studio
9
9
9
11
11
12
12
12
13
13
14
16
17
17
17
18
18
19
19
19
19
21
21
25
26
27
27
29
30
31
32
32
Prerequisites
Connecting Jaspersoft Studio to JasperReports Server
Publishing a Report to JasperReports Server
Creating a Topic for JasperReports Server Ad Hoc Views
32
35
36
37
37
37
37
38
40
41
41
41
41
42
42
42
43
44
44
45
45
47
48
49
49
49
50
51
54
59
63
65
65
69
69
72
72
73
74
77
77
77
79
82
Understanding Fields
Registration of Fields from a SQL Query
Registration of JavaBean Fields
Fields and Textfields
85
85
87
88
90
91
91
93
93
95
96
96
97
99
99
101
101
103
104
104
105
106
106
108
109
113
113
113
114
114
115
115
116
116
116
117
119
119
121
123
124
124
124
125
147
147
155
155
157
158
159
159
160
161
161
163
12.1 Datasets
12.1.1 Creating a Dataset
12.2 Creating a Simple Chart
12.3 Setting Chart Properties
12.4 Spider Charts
12.5 Chart Themes
12.5.1 Using the Chart Theme Designer
12.5.2 Editing Chart Theme XML
12.5.3 Creating a JasperReports Extension for a Chart Theme
12.5.4 Applying a Chart Theme
163
164
165
170
171
174
175
176
176
177
179
126
127
128
128
129
130
132
133
135
136
137
138
139
140
141
142
144
146
179
184
184
188
190
191
195
199
199
201
201
203
204
205
206
206
Glossary
207
Index
217
CHAPTER 1
Jaspersoft Studio's primary goal is to provide the features in the well-known Jaspersoft Report Editor, available
as a port of Jaspersoft Studio. This is only the beginning - having its foundations on the Eclipse platform,
Jaspersoft Studio is a more complete solution allowing users to extend its capabilities and functionality.
This chapter contains the following sections:
1.1
1.2
User Interface
Jaspersoft Studio is offered in two different versions: a stand-alone RCP product, and an Eclipse plug-in version.
People who have worked with Eclipse might be familiar with the user interface, while to new users - or those
familiar only with iReport - the layout is different. Both the stand-alone and plug-in versions have a similar user
interface. Figure 1-1 shows a preview of the Jaspersoft Studio interface, with the main areas highlighted:
The Design tab is the main one selected when you open a report file and it allows you to graphically create
your report.
The Source tab contains the JRXML source code for your report.
The Preview tab lets you run the report preview after having selected a data source and output format.
The Repository Explorer view maintains the list of JasperReports Server connections and available data
adapters.
The Project Explorer view maintains the list of the projects in the current workspace, usually JasperReports
Server project.
The Outline view shows the complete structure of the report in a tree-form way.
The Properties view is usually a foundation for any Eclipse based product/plug-in. It is populated with
properties information for the selected element. When you select a report element from the main design area
(such as a text field) or from the Outline, the Properties view shows information about it. Some of these
properties are read-only, but most are editable and their modification change the elements that are drawn
(such as element width or height).
The Problems view shows a list of problems and errors that can, for example, block the correct compilation
of a report.
The Report state summary provides statistics on report compilation/filling/execution. Errors are shown here
as well.
This comparison table shows the differences in terminology between iReport and Jaspersoft Studio
10
1.3
iReport
Jaspersoft Studio
JasperReports Server
Repository
Repository Explorer
Report Inspector
Outline view
Report Designer
Problems List
Problems view
Elements palette
Designer Palette
Formatting tools
Property sheet
Properties view
Styles library
---
---
Project Explorer
Hardware Requirements
Jaspersoft Studio needs a 64-bit or 32-bit processor and at least 500 MB of Hard Disk space. The amount of
RAM needed is dependant upon report complexity. A value of 1 GB dedicated to Jaspersoft Studio is
recommended, 2 GB is suggested.
1.4
Software Requirements
As any other Java project Jaspersoft Studio require the Java Runtime Environment (JRE), but to compile the
report scriptlets a full distribution of Java is required. The installer includes the correct version of Java.
You must accept the license agreement to proceed with the download and then click on the correct link for your
operating system. Jaspersoft Studio support the most common operating systems:
The download of Jaspersoft Studio is found at: http://community.jaspersoft.com/project/jaspersoftstudio/releases. A page that lists all the releases of Jaspersoft Studio appears; click the latest version, and a grid
with many links appears:
11
x.x.x represents the version number of Jaspersoft Studio. If your distribution of Linux doesn't support the deb
format there are also tar versions.
Note that on a 64-bit operating system you can install the 32-bit version of Jaspersoft Studio (although the 64bit is recommended), but you cannot install the 64- bit version of Jaspersoft Studio on a 32-bit operating system.
1.5
1.6
1.6.1
Tasks executed during the development phase: design and planning of the report, and compilation of a
Jasper file source, the JRXML.
Tasks that must be executed in run time: loading of the Jasper file, filling of the report, and export of the
print in a final format.
The main role of Jaspersoft Studio in the cycle is to design a report and create an associated JASPER file,
though it is able to preview the result and export it in all the supported formats. Jaspersoft Studio provides
support for a wide range of data sources and allows users to create custom data sources, thereby becoming a
complete environment for report development and testing.
When you design a report using Jaspersoft Studio, you are creating a JRXML file, which is an XML document
that contains the definition of the report layout. The layout is completely visual, so you can ignore the
underlying structure of the JRXML file. Before executing a report, the JRXML must be compiled in a binary
object called a Jasper file. Jasper files are what you need to ship with your application in order to run the
reports.
12
Report execution is performed by passing a Jasper file and a data source to JasperReports. There are many data
source types. You can fill a Jasper file from an SQL query, an XML file, a .csv file, an HQL (Hibernate Query
Language) query, a collection of JavaBeans, and others. If you don't have a suitable data source, JasperReports
allows you to write your own custom data source. With a Jasper file and a data source, JasperReports is able to
generate the final document in the format you want.
Jaspersoft Studio also lets you configure data sources and use them to test your reports. In many cases, datadriven wizards can help you design your reports much quicker. Jaspersoft Studio includes the JasperReports
engine itself to let you preview your report output, test, and refine your reports.
1.6.2
Understanding Bands
The type page is divided into nine predefined bands to which new groups are added. In addition, Jaspersoft
Studio manages a heading band (group header) and a recapitulation band (group footer) for every group.
A band is as wide as the page width (right and left margins excluded). However, its height, even if it is
established during the design phase, can vary during print creation according to the contained elements; it can
lengthen toward the bottom of a page in an arbitrary way. This typically occurs when bands contain
subreports or text fields that have to adapt to the content vertically. Generally, the height specified by the user
should be considered the minimal height of the band. Not all bands can be stretched dynamically according
to content; in particular the column footer, page footer, and last page footer bands are statically sized.
The sum of all band heights (except for the background) has to always be less than or equal to the page height
minus the top and bottom margins.
1.6.3
Band Types
The following table contains brief descriptions of the available bands:
Band Name
Description
Title
The title band is the first visible band. It is created only once and can be printed on a
separate page. It is not possible during design to exceed the report page height (top and
bottom margins are included). If the title is printed on a separate page, this band height is
not included in the calculation of the total sum of all band heights.
Page Header
The page header band allows you to define a page header. The height specified during the
design phase usually does not change during the creation process, except for the insertion
of vertically resizable components such as a text fields. The page header appears on all
printed pages in the position defined during the design phase. Title and summary bands do
not include the page header when printed on a separate page.
Column
Header
The column header band is printed at the beginning of each detail column. Usually labels
containing the column names of a tabular report are inserted in this band.
13
1.6.4
Band Name
Description
Group Header
A report can contains zero or more group bands which permit the collection of detail records
in real groups. A group header is always accompanied by a group footer (both can be
independently visible or not). Different properties are associated with a group. They
determine its behavior from the graphic point of view. It is possible to always force a group
header on a new page or in a new column and to print this band on all pages if the bands
below it overflow the single page (as a page header, but at group level). It is possible to fix a
minimum height required to print a group header: if it exceeds this height, the group header
band is printed on a new page (please note that a value too large for this property can
create an infinite loop during printing).
Group Footer
The group footer band completes a group. Usually it contains fields to view subtotals or
separation graphic elements, such as lines.
Column Footer
The column footer band appears on at the end of every column. Its dimension are not
resizable at run time (not even if it contains resizable elements such as subreports or text
fields with a variable number of text lines).
Page Footer
The page footer band appears on every page where there is a page header. Like the
column footer, it is not resizable at run time.
Last Page
Footer
If you want to make the last page footer different from the other footers, it is possible to use
the special last page footer band. If the band height is 0, it is completely ignored, and the
layout established for the common page is used for the last page.
Summary
The summary band allows you to insert fields containing total calculations, means, or any
other information you want to include at the end of the report.
Background
The background enables you to create watermarks and similar effects, such as a frame
around the whole page. It can have a maximum height equal to the page height.
14
Page Type
Dimensions in Pixels
Letter
612x792
Page Type
Dimensions in Pixels
Note
540x720
Legal
612x1008
A0
2380x3368
A1
1684x3368
A2
1190x1684
A3
842x1190
A4
595x842
A5
421x595
A6
297x421
A7
210x297
A8
148x210
A9
105X148
A10
74X105
B0
2836x4008
B1
2004x2836
B2
1418x2004
B3
1002x1418
B4
709x1002
B5
501x709
ARCH_E
2592x3456
ARCH_D
1728x2593
ARCH_C
1296x1728
ARCH_B
864x1296
ARCH_A
648x864
15
Page Type
Dimensions in Pixels
FLSA
612x936
FLSE
612x936
HALFLETTER
396x612
11X17
792x1224
LEDGER
1224x792
By modifying width and height, it is possible to create a report of whatever size you like. Although Jaspersoft
enables you to create pixel-perfect reports, the page orientation options, Landscape or Portrait, are there because
they are used by certain report exporters. The page margin dimensions are set by means of the four options on
the Page Margin tab.
1.6.5
Columns
Pages, one or more of which make up a report, presents bands are independent from the data (such as the title or
the page footers) and other bands that are printed only if there are one or more data records to print (such as the
group headers and the detail band). These last sections can be divided into vertical columns in order to take
advantage of the available space on the page. A column does not concern the record fields, but it does concern
the detail band. This means that if you have record with ten fields and you desire a table view, ten columns are
not needed. However, the element must be placed correctly to have a table effect. Ten columns are returned
when long records lists (that are horizontally very narrow) are printed.
Next, let's set up columns in a report as an example. Create a new report from File > New > Jasper Report.
Choose as template BlankA4 and name it ColumnExample. Use Sample DB - Database JBDC Connection
for the data adapter, with the following SQL query: select * from orders. Fields from the database are
discovered. Double-click SHIPNAME, to add it to the report field and click Next twice. Finally, click
Finish.From
the outline view drag the SHIPNAME field in the report in the detail band, resize the detail band, and remove the
unused bands. Go to the Preview tab to see the report compiled.
By default the number of columns is 1, and its width is equal to the entire page, except the margins. The space
between columns is zero by default. Most of the page is unused. If multiple columns are used, this report would
look better. On the Page Format dialog set the number of columns to two and compile the report to see the
changes.
Jaspersoft Studio automatically calculates maximum column width according to the margins and the page width.
If you want to increase the space between the columns, increase the value of the Space field.
The restricted area is used to mark every column after the first, to show that all the elements should be placed in
the first column; the other columns' is replicated automatically during compilation. If you want you can also put
elements in the other columns, but in most cases you need only the first. It is not recommended that you use
parts of the report as margins and columns after the first, if they have to be considered as though they were a
continuation of the first.
16
Multiple columns are commonly used for print-outs of very long lists (for example, a phone directory). It is
important to remember that when you have more than one column, the width of the detail band and of linked
bands is reduced to the width of the columns.
The sum of the margins, column widths, and space between columns has to be less or equal to the page width. If
this condition is not met, the compilation results in an error.
1.6.6
Advanced Options
From the properties tab of the report there are many other options for the report configuration. Select the report
root note from the outline view, and in the Properties tab you see:
1.7
Report Name: It is a logical name, independent form the source file's name, and is used only by the
JasperReports library (for example, to name the produced java file when a report is compiled).
Title on a new page: This option specifies that the title band is to be printed on a new page, which forces
a page break at the end of the title band. In the first page only the title band is printed. However this page
is still included in total page count.
Summary on a new page: This option is similar to Title on a new page except that the summary band
is printed as the last page. If you need to print this band on a new page, the new page only contains the
summary band.
Summary with page header and footer: This option specifies if the summary band is to be accompanied
by the page header and the page footer.
Floating column footer: This option forces the printing of the column footer band immediately after the
last detail band (or group footer) rather than the end of the column. This option is used, for example, when
you want to create tables using the report elements.
When no data type: When an empty data is supplied as the print number (or the SQL associated with the
report returns no records), an empty file is created (or a a stream of zero bytes is returned). This default
behavior can be modified by specifying what to do in the case of absence of data. The possible values for
this field are:
NoPages: This is the default value; the final result is an empty buffer.
BlankPage: This returns an empty page.
AlSectionNoDetails: This returns a page containing all bands except for the detail band.
1.7.1
Configuration
You can set two preferred (default) measure units, one at the field level, the other at the report level. The report
level measure is used wherever there is not a preferred field measure unit. The report's default measure unit is the
pixel.
To change the report level measure:
17
1.
2.
Find the Default Unit where you can set one of the supported measure units, as shown below:
3.
Use the drop-down menu to select one of the following measure units:
1.7.2
Pixels
Inches
Millimeters
Centimeters
Meters
1.7.3
Accepted Values
centimeter
centimeter, centimeters, cm
millimeter
millimeter, millimeters, mm
meter
meter, meters, m
pixel
pixel, pixels, px
inch
After the value is provided and the first character of a measure unit is be typed, all the available units that start
with that character are suggested, and can be selected using the keyboard arrow keys or the mouse.
If a typed value or measure is not understood, the background of its field is colored red; the corresponding value
or measure isn't changed in the report until a correct value is inserted.
18
1.7.4
Approximations
Even through Jaspersoft Studio handled many measure units, JasperReports works only with pixels. Because of
this, pixels are the only measure unit that is allowed in the project file. Jaspersoft Studio approximates
measurement and convert them to pixels. For example, 5 cm is converted to the nearest whole-number value in
pixels. In this case the 5 centimeters is converted to 139 pixels (approximately 4.97 cm).
1.8
1.8.1
1.8.2
19
20
CHAPTER 2
CONCEPTS OF JASPERREPORTS
This chapter illustrates JasperReports' base concepts for a better understanding of how Jaspersoft Studio works.
The JasperReports API, the XML syntax for report definition, and details for using the library in your own
programs are documented in the JasperReports Library Ultimate Guide. This guide, along with other
information and examples, is directly available on the Jaspersoft community site at
http://community.jaspersoft.com.
JasperReports is published under the LGPL license, which is less restrictive a GPL license. JasperReports can be
freely used on commercial programs without buying expensive software licenses and without remaining trapped
in the complicated net of open source licenses. This is important when reports created with Jaspersoft Studio are
used in a commercial product; in fact, programs only need the JasperReports library to produce prints, which
work something like run time executables.
This chapter contains the following sections:
2.1
21
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="My first report" pageWidth="595" pageHeight="842" columnWidth="535"
leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<queryString language="SQL">
<![CDATA[select * from address order by city]]>
</queryString>
<field name="ID" class="java.lang.Integer">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="FIRSTNAME" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="LASTNAME" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="STREET" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="CITY" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<group name="CITY">
<groupExpression><![CDATA[$F{CITY}]]></groupExpression>
<groupHeader>
<band height="27">
<staticText>
<reportElement mode="Opaque" x="0" y="0" width="139" height="27"
forecolor="#FFFFFF" backcolor="#000000"/>
<textElement>
<font size="18"/>
</textElement>
<text><![CDATA[CITY]]></text>
</staticText>
<textField hyperlinkType="None">
<reportElement mode="Opaque" x="139" y="0" width="416" height="27"
forecolor="#FFFFFF" backcolor="#000000"/>
<textElement>
<font size="18" isBold="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{CITY}]]>
</textFieldExpression>
</textField>
</band>
</groupHeader>
<groupFooter>
<band height="8">
<line direction="BottomUp">
<reportElement key="line" x="1" y="4" width="554" height="1"/>
</line>
</band>
22
</groupFooter>
</group>
<background>
<band/>
</background>
<title>
<band height="58">
<line>
<reportElement x="0" y="8" width="555" height="1"/>
</line>
<line>
<reportElement positionType="FixRelativeToBottom" x="0" y="51" width="555"
height="1"/>
</line>
<staticText>
<reportElement x=65 y=13 width 424 height=35/>
<textElement textAlignment=Center>
<font size=26 isBold=true/>
</textElement>
<text><![CDATE[Classic template]]> </text>
</staticText>
</band>
</title>
<pageHeader>
<band/>
</pageHeader>
<columnHeader>
<band height="18">
<staticText>
<reportElement mode="Opaque" x="0" y="0" width="138" height="18"
forecolor="#FFFFFF" backcolor="#999999"/>
<textElement>
<font size="12"/>
</textElement>
<text><![CDATA[ID]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="138" y="0" width="138" height="18"
forecolor="#FFFFFF" backcolor="#999999"/>
<textElement>
<font size="12"/>
</textElement>
<text><![CDATA[FIRSTNAME]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="276" y="0" width="138" height="18"
forecolor="#FFFFFF" backcolor="#999999"/>
<textElement>
<font size="12"/>
</textElement>
<text><![CDATA[LASTNAME]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="414" y="0" width="138" height="18"
forecolor="#FFFFFF" backcolor="#999999"/>
23
<detail>
<band height="20">
<textField hyperlinkType="None">
<reportElement x="0" y="0" width="138" height="20"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.Integer"><![CDATA[$F{ID}]]>
</textFieldExpression>
</textField>
<textField hyperlinkType="None">
<reportElement x="138" y="0" width="138" height="20"/>
</textField>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{FIRSTNAME}]]>
</textFieldExpression>
<textField hyperlinkType="None">
<reportElement x="276" y="0" width="138" height="20"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{LASTNAME}]]>
</textFieldExpression>
</textField>
<textField hyperlinkType="None">
<reportElement x="414" y="0" width="138" height="20"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{STREET}]]>
</textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band/>
</columnFooter>
<pageFooter>
<band height="26">
<textField evaluationTime="Report" pattern="" isBlankWhenNull="false"
hyperlinkType="None">
<reportElement key="textField" x="516" y="6" width="36" height="19"
forecolor="#000000" backcolor="#FFFFFF"/>
<textElement>
<font size="10"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["" +
$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField pattern="" isBlankWhenNull="false" hyperlinkType="None">
<reportElement key="textField" x="342" y="6" width="170" height="19"
24
forecolor="#000000" backcolor="#FFFFFF"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement textAlignment="Right">
<font size="10"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA["Page " +
$V{PAGE_NUMBER} + " of "]]></textFieldExpression>
</textField>
<textField pattern="" isBlankWhenNull="false" hyperlinkType="None">
<reportElement key="textField" x="1" y="6" width="209" height="19"
forecolor="#000000" backcolor="#FFFFFF"/>
<box>
<topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
<rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
</box>
<textElement>
<font size="10"/>
</textElement>
<textFieldExpression class="java.util.Date"><![CDATA[new Date()]]>
</textFieldExpression>
</textField>
</band>
</pageFooter>
<summary>
<band/>
</summary>
</jasperReport>
During compilation of the JRXML file (using some JasperReports classes), the XML is parsed and loaded in a
JasperDesign object, which is a rich data structure that allows you to represent the exact XML contents in
memory. Regardless of which language is used for expressions inside the JRXML , JasperReports creates a
special Java class that represents the whole report. The report is then compiled, instanced, and serialized in a
JASPER file, ready for loading at any time.
JasperReports' speedy operation is due to all of a reports formulas being compiled into Java-native bytecode
and the report structure being verified during compilation instead of at run time. The JASPER file does not
contain extraneous resources, such as images used in the report, resource bundles to run the report in different
languages, or extra scriptlets and external style definitions. All these resources must be provided by the host
application and located at run time.
2.2
25
Figure 2-1 Data Source and Parameter Flows for Report Creation
JRDataSource allows a set of records that are organized in tables (rows and columns) to be read. It enables
JasperReports to fill a report with data from an explicit data source, using a JDBC connection (already instanced
and opened) to whichever relational database you want to run a SQL query on (which is specified in the report).
If the data don't meet your requirements, you may need to specify particular values to condition the reports
execution; you can create name/value pairs to pass to the print engine. These pairs are named parameters, and
they have to be preventively declared in the report. Through fillManager, it is possible to join a JASPER file
and a data source in a JasperPrint object. This object is a meta-print that can create a real print after you have
exported it in the desired format through appropriate classes that implement the JRExporter interface.
JasperReports puts at your disposal different pre-defined exporters, such as those for creating files in such
formats as PDF, XLS, CVS, XML, RTF, ODF, text, HTML and SWF. Through the JRViewer class, you can
view the print directly on the screen and print a hardcopy.
2.3
Expressions
Many settings in a report are defined using formulas, such as conditions that can hide an element, special
calculations, or text processing that requires knowledge of a scripting language.
Formulas can be written in at least three languages, two of which (JavaScript and Groovy) can be used without
knowledge of programming methods.
All of the formulas in JasperReports are defined through expressions. The default expression language is Java,
but if you are not a programmer, we recommend that you design your projects with JavaScript or Groovy
because those languages hide a lot of the Java complexity. The language is a property of the document, so, to
set it select the document root node in the Outline view and choose your language in the Language property in
the Properties view.
An expression is a formula that operates on some values and returns a result, such as a formula in a spreadsheet
cell. A cell can have a simple value or a complex formula that refers to other values. In a spreadsheet you refer
26
to values contained in other cells, whereas in JasperReports you use the report fields, parameters, and variables.
Whatever is in your expression, when it is computed, it returns a value (which can be null).
2.3.1
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.String
java.util.Date
java.lang.Object
If an expression is used to determine the value of a condition that determines, for instance, whether an element
should be printed, the return type is java.lang.Boolean; to create it, you need an expression that returns an
instance of a Boolean object. Similarly, if an expression shows a number in a textfield, the return type is
java.lang.Integer or java.lang.Double.
Neither JavaScript nor Groovy is particularly formal about types, since they are not typed languages; the
language itself treats a value in the best way by trying to guess the value type or by performing implicit casts
(conversion of the type).
2.3.2
27
Description
Example
Sum (it can be used to sum two numbers or to concatenate two strings)
A+B
Subtraction
A-B
Division
A/B
A%B
||
Boolean operator OR
A || B
&&
A && B
==
Equals1
A == B
!=
Not equals2
A != B
!A
Within an expression, you can use the syntax thats summarized in Table 2-3, Syntax for referring to report
objects, on page28 to refer to the parameters, variables, and fields defined in the report.
Table 2-3 Syntax for referring to report objects
Syntax
Description
$F{name_field}
$V{name_variable}
$P{name_parameter}
$P!{name_
parameter}
Special syntax used in the report SQL query to indicate that the parameter does not
have to be dealt as a value to transfer to a prepared statement, but that it represents
a little piece of the query.
$R{resource_key}
In summary, fields, variables and parameters represent objects; specify their type when you declare them within
a report.
Although expressions can be complicated, usually it is a simple operation that returns a value. There is a simple
if-else expression that is very useful in many situations. An expression is just an arbitrary operation that any
stage must represent a value. In Java, these operators can be applied only to primitive values, except for the sum
operator (+). The sum operator can be applied to a String expression with the special meaning of concatenate.
For example:
1In Java, the == operator can only be used to compare two primitive values. With objects, you need to use the special
method equals; for example, you cannot write an expression like test == test, you need to write test.equals(test).
2In Java, the != operator can only be used to compare two primitive values.
28
$F{city} + , + $F{state}
Any object in an expression can include methods. A method can accept zero or more arguments, and it can
return or not a value. In an expression you can use only methods that return a value; otherwise, you would have
nothing to return from your expression. The syntax of a method call is:
Object.method(argument1, argument2, <etc.>)
Some examples:
Expression
Result
test.length()
test.substring(0, 3)
tes
test.startsWith(A)
false
test.substring(1, 2).startsWith(e)
true
The methods of each object are usually explained in the JasperReports Library Javadocs, which that are
available at http://jasperreports.sourceforge.net/api/.
You can use parentheses to isolate expressions and make the overall expression more readable.
2.3.3
The syntax is (<condition>) ? <value on true> : <value on false>. It is extremely useful, and can be
recursive, meaning that the value on true and false can be represented by another expression which can be a
new condition:
(($F{name}.length() > 50) ?
(($F{name}.startsWidth(A)) ? AAAA : BBB)
:
$F{name})
This expression returns the String AAAA when the value of the field name is longer than 50 characters and starts
with A, returns BBB if it is longer than 50 characters but does not start with A, and, finally, returns the original
field value if neither of these conditions is true.
Despite the possible complexity of an expression, it can be insufficient to define a needed value. For example, if
you want to print a number in Roman numerals or return the name of the weekday of a date, it is possible to
transfer the elaborations to an external Java class method, which must be declared as static, as shown in the
following example:
MyFormatter.toRomanNumber( $F{MyInteger}.intValue() )
29
The function operand toRomanNumber is a static method of the MyFormatter class, which takes an int as
argument (the conversion from Integer to int is done by means of the intValue() method; it is required only
when using Java as language) and gives back the Roman version of a number in a lace.
This technique can be used for many purposes; for example, to read the text from a CLOB field or to add a
value into a HashMap (a Java object that represents a set of key/value pairs).
2.4
This is an expression
new Boolean(true)
new Integer(3)
(($P{MyParam}.equals("S")) ? "Yes" : "No")
The first thing to note is that each of these expressions represents a Java Object, meaning that the result of each
expression is a non-primitive value. The difference between an object and a primitive value makes sense only in
Java, but it is very important: a primitive value is a pure value like the number 5 or the Boolean value true.
Operations between primitive values have as a result a new primitive value, so the expression:
5+5
results in the primitive value 10. Objects are complex types that can have methods, can be null, and must be
instanced with the keyword new most of the time. In the second example above, for instance (new Boolean
(true)), we must wrap the primitive value true in an object that represents it.
By contrast, in a scripting language such as Groovy and JavaScript, primitive values are automatically wrapped
into objects, so the distinction between primitive values and objects wanes. When using Java, the result of our
expression must be an object, which is why the expression 5+5 is not legal as-is but must be fixed with
something like this:
new Integer( 5 + 5 )
The fix creates a new object of type Integer representing the primitive value 10.
So, if you use Java as the default language for your expressions, remember that expressions like the following
are not valid:
3 + 2 * 5
true
(($P{MyParam} == 1) ? "Yes" : "No")
These expressions dont make the correct use of objects. In particular, the first and the second expressions are
not valid because they are of primitive types (integer in the first case and boolean in the second case) which
do not produce an object as a result. The third expression is not valid because it assumes that the MyParam
parameter is a primitive type and that it can be compared through the == operator with an int, but it cannot. In
fact, we said that parameters, variables, and fields are always objects and primitive values cannot be compared
or used directly in a mathematical expression with an object.
30
2.5
Java
Groovy
Field
$F{field_name}
$F{field_name}
Sum of two
double fields
$F{f1} + $F
{f2}
Comparison
of numbers
new Boolean($F{f}.intValue() == 1)
$F{f} == 1
Comparison
of strings
$F{f} ==
"test"
to null). You can see how you can instance this class (a pure Java class) in Groovy without any problem. At the
same time, Groovy allows you to use a simple expression like this one:
5+5
The language automatically encapsulates the primitive value 10 (the result of that expression) in a proper object.
Actually, you can do more: you can treat this value as an object of type String and create an expression such
as:
5 + 5+ my value
Whether or not such an expression resolves to a rational value, it is still a legal expression and the result is an
object of type String with the value:
10 my value
Hiding the difference between objects and primitive values, Groovy allows the comparison of different types of
objects and primitive values, such as the legal expression:
$F{Name} == John
Always returns true (since the substring method call produces the
string 34, which is less than 100).
31
Groovy provides a way to greatly simplify expressions and never complains about null objects that can crash a
Java expression throwing a NullPointerException. It really does open the doors of JasperReports to people
who dont know Java.
2.6
This is a valid JavaScript expression creating a Java object (in this case a java.lang.String) and using its
methods.
JavaScript is the best choice for users who have no knowledge of other languages. The other significant
advantage of JavaScript is that it is not interpreted at run time, but instead generates pure Java byte-code. As a
result, it offers almost the same performance as Java itself.
2.7
2.8
A Simple Program
In conclusion, following is an example of a simple program that shows how to produce a PDF file from a Jasper
file using a data source named JREmptyDataSource, a utility data source that provides zero or more records
without fields. The file test.jasper, referenced in the example, is the compiled version of the code in Table 2-1
on page 21.
Table 2-5 JasperTest.java
import
import
import
public
{
net.sf.jasperreports.engine.*;
net.sf.jasperreports.engine.export.*;
java.util.*;
class JasperTest
public static void main(String[] args)
{
String fileName = "/devel/examples/test.jasper";
String outFileName = "/devel/examples/test.pdf";
HashMap hm = new HashMap();
try
{
32
33
34
CHAPTER 3
REPORT ELEMENTS
The basic building block of a report is the element. An element is a graphical object, such as a text string or a
rectangle. In Jaspersoft Studio, the concept of line or paragraph does not exist, as it does in word processing
programs. Everything is created by means of elements, which can contain text, create tables, display images, and
so on. This approach follows the model used by the majority of report authoring tools.
Jaspersoft Studio relies on the nine basic elements are offered by the JasperReports library:
Line
Rectangle
Ellipse
Static text
Text field (or simply Field)
Image
Frame
Subreport
Crosstab
Chart
Break
Through a combination of these elements, it is possible to produce every kind of report. JasperReports also
allows developers to implement their own generic elements and custom components for which it is possible to
add support in Jaspersoft Studio to create a proper plug-in.
All elements have common properties, such as height, width, position, and the band to which they belong.
Other properties are specific to the type of element (for example, font or, in the case of a rectangle, thickness of
the border). There are several types; graphic elements are used to create shapes and display images (they are line,
rectangle, ellipse, image); text elements are used to print text strings such as labels or fields (they are static text
and text field); the frame element is used to group a set of elements and optionally draw a border around them.
Subreports, charts, and crosstabs are more complex elements and are discussed later in the this chapter; detail is
found in separate chapters. Finally, there is a special element used to insert a fixed-in-place page or column
break.
Elements are inserted into bands, and every element is associated inextricably with its band. If an element is not
completely contained within its band, the report compiler returns a message about the position of the element;
the report is compiled despite this error, and in the worst case, the element simply isn't printed.
This chapter contains the following sections:
35
3.1
36
The Appearance tab allows you to set the location, size, color, and text style of the field.
The Borders tab allows you to set the padding and border style, color, and width of the field.
The Static Text tab allows you to define unchangeable text for a field, and control its appearance.
The Text Field tab allows you to place text in an element.
The Inheritance tab allows you to view any attributes inherited from another level, and override those
attributes when possible.
The Hyperlink tab allows you to define a hyperlink in an element.
The Advanced tab displays detailed information about the element.
Appearance and Borders are shared among many elements and contain the attributes that define the graphical
appearance of the elements, such the width of its borders, the background color, and so on. The Image category
is a special one, because it is present only for the elements of the type Image.
Commonly, the value of an attribute is undefined, and it has a common default value. This means that the
element does not have a specific behavior defined, but gets a behavior from somewhere else. For example, the
default value of the attribute "background color" is undefined in most of cases, but when a non-transparent
element is added to the designer, we can see that it has a white background. The value of the background color
attribute is inherited from a lower level.
3.2
3.2.1
3.2.2
Selecting Elements
To select the element, click it in the report editing area or in the Outline view. You can adjust the element
position by dragging it; to modify its size, select it then drag a corner of the selection frame.
It is possible to select several elements at the same time by drawing a rectangle around the elements with the
arrow tool. Depending on the direction in which the rectangle is drawn, elements can be selected only if fully
contained in the selected area or partially selected.
Alternatively, you can select more than one element at the same time by holding down the Shift key and
clicking each desired elements.
Specifying a value for a particular property applies that value to all selected elements. However, if two or more
elements are selected, only their common properties are displayed in the Properties view. If the values of the
properties are different, the value fields are blank (usually the field is shown empty). To edit properties unique
to one element, select only that element.
3.2.3
Positioning Elements
Jaspersoft Studio offers a number of ways to place the elements in your report with precision.
37
3.3
Formatting Elements
Formatting tools help organize the elements in the report editing area. Right-click the element you want to work
on and select a tool from the context menu.
38
Tool Name
Description
Multiple Select?
Send
Backward
Yes
Send to Back
Yes
Align to Left
Yes
Align to
Center
Yes
Align to Right
Yes
Align to Top
Aligns the top sides (or the upper part) to that of the
primary element.
Yes
Align to
Middle
Yes
Order Tools
39
Icon
Tool Name
Description
Multiple Select?
Align to
Bottom
Yes
Match Width
Yes
Match Height
Yes
Match Size
Yes
Fit to Width
Yes
Fit to Height
Yes
Fit to Both
Yes
Horizontal
Layout
Yes
Vertical
Layout
Yes
N/A
Miscellaneous Tools
Stretch to
Content
PDF 508
Tags
XLS Tags
3.4
Graphic Elements
Graphic elements are drawing objects such as lines and rectangles; they don't show data, but they are used to
make prints more readable and attractive. Graphic elements are added, like most elements, by dragging from the
Designer palette to the report editing area.
40
3.4.1
Line
In Jaspersoft Studio, a line is defined by a rectangle for which the line represents the diagonal. By default, the
foreground color is used as the default color and a 1-pixel-width line is used as the line style.
You can customize the look, style, and direction of the line in the elements Properties view.
3.4.2
3.4.3
Images
An image is the most complex of the graphic elements. It can be used to insert raster images (such as GIF, PNG
and JPEG images) in the report, but it can be also used as a canvas object to render, for example, a Swing
component, or to leverage some custom rendering code.
When you drag an image element from the Palette into the report editing area, the Create new image element
dialog appears. This is the most convenient way to specify an image to use in the report. Jaspersoft Studio does
not save or store the selected image anywhere, it just uses the file location, translating the absolute path of the
selected image into an expression to locate the file when the report is executed. The expression is then set as the
value for the Image Expression property.
You can add an image by explicitly defining the full absolute path of the image file in your expression. This is
an easy way to add an image to the report, but, overall, it has a big impact on the reports portability, since the
file may not be found on another machine (for instance, after deploying the report on a web server or running
the report on a different computer).
3.4.4
Padding allows you to define padding widths for each of the four sides, or to apply the same value to all
sides.
Borders allow you to select their color, style, and width, as well as choose where it appears.
41
3.5
Text Elements
Two elements are specifically designed to display text in a report: static text and text field. Static text is used
for creating labels or to print static text set at design time, that is not meant to change when the report is
generated. That said, in some cases you still use a text field to print labels too, since the nature of the static text
elements prevents the ability to display text dynamically translated in different languages when the report is
executed with a specific locale and it is configured to use a resource bundle leveraging the JasperReports
internationalization capabilities.
A text field is similar to a static text string, but the content (the text in the field) is provided using an
expression (which can be a simple static text string itself). That expression can return several kinds of value
types, allowing the user to specify a pattern to format that value. Since the text specified dynamically can have
an arbitrary length, a text field provides several options about how the text must be treated regarding alignment,
position, line breaks and so on. Optionally, the text field is able to grow vertically to fit the content when
required.
By default both text elements are transparent with no border, with a black text color. The most used text
properties can be modified using the text tool bar displayed when a text element is selected. Text element
properties can also be modified using the Properties view.
Text fields support hyperlinks as well. See 3.8.4, Defining Hyperlinks, on page48 for more information.
3.5.1
Static Text
The static text element is used to show non-dynamic text in reports. The only parameter that distinguishes this
element from a generic text element is the Text property, where the text to view is specified: it is normal text,
not an expression, and so it is not necessary to enclose it in double quotes in order to respect the conventions of
Java, Groovy, or JavaScript syntax.
3.5.2
Text Fields
A text field allows you to print an arbitrary section of text (or a number or a date) created using an expression.
The simplest case of use of a text field is to print a constant string (java.lang.String) created using an
expression like this:
"This is a text"
A text field that prints a constant value like the one returned by this expression can be easily replaced by a
static field; actually, the use of an expression to define the content of a text field provides a high level of
control on the generated text (even if its just constant text). A common case is when labels have to be
internationalized and loaded from a resource bundle. In general, an expression can contain fields, variables and
parameters, so you can print in a text field the value of a field and set the format of the value to present. For this
purpose, a text field expression does not have to return necessarily a string (thats a text value): the text field
expression class name property specifies what type of value is returned by the expression. It can be one of
the following:
Valid Expression Types
java.lang.Object
42
java.sql.Time
java.lang.Long
java.lang.Double
java.lang.Short
java.lang.Byte
java.lang.Float
java.math.BigDecimal
java.util.Date
java.lang.Integer
java.lang.String
java.sql.Timestamp
java.io.InputStream
An incorrect expression class is frequently the cause of compilation errors. If you use Groovy or JavaScript you
can choose String as expression type without causing an error when the report is compiled. The side effect is
that without specifying the right expression class, the pattern (if set) is not applied to the value.
Lets see what properties can be set for a text field:
Blank when null
If set to true, this option avoids printing the text field content if the expression result is
a null object that would be produce the text null when converted in a string.
Evaluation time
Determines in which phase of the report creation the Text field Expression has
to be elaborated.
Evaluation group
Stretch with over- When it is selected, this option allows the text field to adapt vertically to the content, if
flow
the element is not sufficient to contain all the text lines.
Pattern
3.6
The pattern property allows you to set a mask to format a value. It is used only when
the expression class is congruent with the pattern to apply, meaning you need a
numeric value to apply a mask to format a number, or a date to use a date pattern.
Using Frames
A frame is an element that can contain other elements and optionally draw a border around them. Since a frame
is a container of other elements, in the document outline view the frame is represented as a node containing
other elements.
A frame can contain other frames, and so on recursively. To add an element to a frame, just drag the new
element from the palette inside the frame. Alternatively you can use the outline view and drag elements from a
band into the frame and so on. The position of an element is always relative to the container position. If the
container is a band, the element position is relative to the top of the band and to the left margin. If the container
(or element parent) is a frame, the element coordinates are relative to the top left corner of the frame. Since an
element dragged from a container to another does not change its top/left properties, when moving an element
from a container to another its position is recalculated based on the new container location.
The advantages of using a frame to draw a border around a set of elements, with respect to using a simple
rectangle element, are:
When you move a frame, all the elements contained in the frame move.
43
3.7
While using a rectangle to overlap some elements, the elements inside the rectangle are not treated as if
they overlap (respect to the frame), so you don't have problems when exporting in HTML (which does not
support overlapped elements).
Finally, the frame automatically stretches according to its content, and the element position type
property of its elements refer to the frame itself, not to the band, making the design a bit easier to manage.
3.8
To set anchor, bookmark, or hyperlink properties, go to the Hyperlink tab in the Properties view.
44
Use Anchor and Bookmark to create an anchor inside the current document; it is only available for elements
that support hyperlinks (textfield, image, and chart). The name of the anchor is specified by means of an
expression, and the bookmark level is used when the report is exported in PDF to create the Table of Content.
Bookmarks can also be displayed in JasperReports Serverwhen the report is displayed in the interactive viewer.
Note for developers:
In JasperReports 5.6 and later the same table of content is also available in the JasperPrint object, and can be
explored by calling the method:
List<PrintBookmark> getBookmarks()
3.8.1
button opens the Expression Editor, in which you write or build the expression.
If you plan to export your report as a PDF, set a bookmark level to populate the bookmark tree, making the final
document navigation much easier. To make an anchor available in a bookmark, simply choose a bookmark level
higher than 1. Defining different levels creates nested bookmarks.
3.8.2
45
The values of the fields city and country are used to dynamically build a URL.
So why are these parameters interesting?Because they can be used by URL Handlers, especial JasperReports
Library extensions, to manipulate and generate a hyperlinks.
The hyperlink type ReportExecution is one of these custom hyperlink extensions. It is used to execute a
JasperReports Server report from another JasperReports Server report. This hyperlink type requires that the
parameter _report is defined and points to the JasperReports Server report to execute. If this destination report
contains one or more input controls, their value can be set by specifying the name of the input control as the
parameter name and providing a value.
A ReportExecution hyperlink is configured in Jaspersoft Studio by simply dragging a report unit in the
JasperReports Server repository explorer over an element that supports hyperlink (such as a textfield).
Figure 3-4 Dragging a report from the server into the Report Design
The auto configured hyperlink has the type set to ReportExecution and all the _report parameter set. Moreover,
if the JasperReports Server Report has input controls, they are added to the list of parameters, ready to be
populated with a proper value expression, as shown below.
46
3.8.3
Hyperlink Types
Jaspersoft Studio provides six types of built-in hypertext links: Reference, LocalAnchor, LocalPage,
RemoteAnchor and RemotePage. Other types of hyperlinks can be implemented and plugged into JasperReports.
The following table lists the hyperlink types:
Reference
The Reference link indicates an external source that is identified by a normal URL. This
is ideal to point, for example, to a servility to manage a record drill-down tools. The only
expression required is the hyperlink reference expression.
47
To point to a local anchor means to create a link between two locations into the same
document. It can be used, for example, to link the titles of a summary to the chapters to
which they refer.
To define the local anchor, specify a hyperlink anchor expression that produces a valid
anchor name.
LocalPage
If instead of pointing to an anchor you want to point to a specific current report page, you
need to create a LocalPage link. In this case, it is necessary to specify the page number
you are pointing to by means of a hyperlink page expression (the expression has to
return an Integer object)
RemoteAnchor
If you want to point to a particular anchor that resides in an external document, you use
the RemoteAnchor link. In this case, the URL of the external file referenced must be
specified in the Hyperlink Reference Expression field, and the name of the anchor must
be specified in the Hyperlink Anchor Expression field.
RemotePage
This link allows you to point to a particular page of an external document. Similarly, in
this case the URL of the external file pointed to must be specified in the Hyperlink
Reference Expression field, and the page number must be specified by means of the
hyperlink page expression. Some export formats have no support for hypertext links.
ReportExecution
3.8.4
Defining Hyperlinks
Some types of datasets let you assign a hyperlink to the value represented in the chart; in the report output,
clicking the chart opens a web page or navigates to a different location in the report.
The click-enabled area depends on the chart type. For example, in pie charts, the hyperlink is linked to each
slice of the pie; in bar charts, the click-enabled areas are the bars themselves.
Image, text field, and chart elements can be used both as anchors into a document and as hypertext links to
external sources or local anchors.
To create hyperlinks:
1. Click the Hyperlink tab in the Properties view.
2.
In the Link Target drop-down, choose one of the following target types:
3.
Self: This is the default setting. It opens the link in the current window.
Blank: Opens the target in a new window. Used for output formats such as HTML and PDF.
Top: Opens the target in the current window but outside eventually frames. Used for output formats
such as HTML and PDF.
Parent: Opens the target in the parent window (if available). Used for output formats such as HTML
and PDF.
In the Link Type drop-down, choose whether the link type is None, Reference, LocalAnchor, LocalPage,
RemoteAnchor, RemotePage, or ReportExecution.
See Hyperlink Types on page47 for an explanation of the different choices.
48
4.
5.
3.8.5
Click the
button next to Hyperlink When Expression to create a tooltip for your hyperlink.
Save your report.
Hyperlink Parameters
Sometimes you need to define some parameters that must be attached to the link. The Link parameters table
provides a convenient way to define them. The parameter value can be set using an expression. The parameter
expression is supposed to be a string (since it is encoded in the URL). But when using custom link types it
makes sense to set different types for parameters.
3.8.6
Hyperlink Tooltips
The tooltip expression is used to set a text to display as tooltip when the mouse is over the element that
represents the hyperlink (this only works when the document is exported in a format that supports this type of
interactive use).
3.8.7
Create a new report, following the steps described at the beginning of this chapter (when we created a static
link to http://www.jaspersoft.com)
2.
Modify the # of orders measure by adding the following properties in the advanced properties tab:
3.
a.
b.
c.
Publish the report in JasperReports Server and preview it on the web. Click a bar column to open the report
units we defined in the previous step.
Note that there is no special syntax to define a parameter, just use as property name the name of the parameter,
and select the value (static, bucket or measure based).
49
The report unit 06. Profit Detail Report (/public/Samples/Reports/ProfitDetailReport) is a good candidate for this
test. It exposes the parameter ProductFamily, so by adding the ProductFamily hyperlink property, and by setting
it to a value like Drink, can pre-filter its results.
3.9
This section describes functionality that can be restricted by the software license for Jaspersoft Studio. If
you dont see some of the options described in this section, your license may prohibit you from using
them. To find out what you're licensed to use, or to upgrade your license, contact Jaspersoft.
For most types of elements, hyperlinks are created as described in 3.8, Anchors, Bookmarks, and Hyperlinks,
on page44. For HTML5 charts, they are defined in a different way.
While the creation of hyperlinks for text fields, images and other object, like for instance the items of JfreeChart
based charts involve the use of the hyperlink panel seen in the previous chapter, working with hyperlink with
the HTML5 Component involve a little more work. This is because the HTML5 charts are based on a multidimensional dataset the values that are attached to a dimension so that the URL of the link is formed by values
that differ in nature.
50
The final hyperlinks displayed in an HTML5 chart are created by a specific extension to the HTML5 chart
component, which evaluates properties attached to a measure (what the user actually clicks in a chart are items
like a point, a line, a bar, a slice, which represent a measure).
To understand how to configure a hyperlink in HTML5 charts, let's start with a basic sample. We create a
simple bar chart and set the hyperlink of each column to the same URL (http://www.jaspersoft.com).
3.9.1
Create an empty report by using the Sample DB data adapter and the query:
SELECT * FROM ORDER
2.
3.
Double click the chart to access the chart configuration, click on the tab Chart Data and select the sub-tab
Configuration to setup the multi-dimensional dataset for the chart.
4.
Modify the Level 1 category by renaming it Country and setting as Expression for this category the field
Country ($F{Country})
51
52
If still in preview, switch back to design mode, double click the chart and edit the measure # of orders.
8.
Double-click hyperlinkReference.
The property definition dialog, which defaults to a constant: http://www.jaspersoft.com
53
Preview your chart using the interactive report viewer to see that the columns are actually clickable and
point to http://www.jaspersoft.com
3.9.2
54
2.
Create a new bucket property for the Country category level, with the following settings:
Property name: country_link
Expression: http://en.wikipedia.org/wiki/ + SF{SHIPCOUNTRY}
Once done, open up the configuration dialog of our measure, move to Advanced Properties, and double
click the HyperlinkReference property, and set as value the newly create country_link bucket propert
55
Save the report and preview. Now, when clicking on a column, a web page on Wikipedia related to our
country should open up.
By using bucket properties, it is possible to create links connected to a dimension. In this case it was the
Country dimension (the Country category), but the same approach can be used to create a link related to series.
This mechanism, anyway, is still not powerful enough to create an URL that combines more dimension values
at the same time, at least when those values coming from different dimensions need to be used in a single
expression to form a link (a later section explains why this doesn't pose a problem in case of a hyperlink of type
ReportExecution when the values can be passed as individual hyperlink parameters).
The only expression that can be created by accessing all the dimension values at the same time is a measure, so
we can create a measure to hold our very complex hyperlink, and refer it in the hyperlinkReference property.
To make this example a little bit more useful, and see how we can really use in hyperlink information coming
form different dimensions, let'sadd an extra dimension called year, so the chart can display the number of orders
placed in a specific country in a specific year. Then we can create a hyperlink that contains both the country
and the year.
1.
Add the new dimension by creating a new series level configured as follow:
56
Name: Year
Expression: YEAR($F{ORDERDATE} )
57
Figure 3-17 Defining the URL to Open when the Measure is Clicked
The most important things to note are 3:
The expression produces a String which represent an URL having both a reference to the country and the
year of the order.
Now, let's use this measure.
2.
58
Open the # of orders measure to edit the hyperlinkReference and set as value the measure we just
created.
Now, each column, slice, bar, column section in stacked column chart points to the country/year the object is
representing.
3.10 Subreports
The subreport element is used to include inside a report another report represented by an external Jasper file and
feed using the same database connection used by the parent report or thought a data source that is specified in
the subreport properties. Subreport Expression identifies the expression that returns a subreport expression
class object at run time. According to the return type, the expression is evaluated in order to recover a Jasper
object to be used to produce the subreport. In case the expression class is set to java.lang.String,
JasperReports looks for a file following the same approach as Image Expression of the Image element.
The following briefly describes the characteristics of subreports:
Subreport Expression
59
This is the class type of the expression; there are several options, each
of one subtends to a different way to load the JasperReport object used
to fill the subreport.
Using cache
Connection/Datasource
Expression
This identifies the expression that returns at run time a JDBC connection
or a JRDataSource used to fill in the subreport. Alternatively the user
can choose to avoid to pass any data. This last option is possible and
many times it is very useful, but requires some expedient in order to
make the subreport to work. Since a subreport (like a common report)
returns an empty document if no data are provided, the subreport
document should have the document property When No Data Type
set to something like All Sections, No Detail.
Subreport parameters
This table allows you to define how to store in local variables values
calculated or processed in the subreport (such as totals and record
count).
To create a subreport:
Subreports are useful when your chart does not need all the same data as the main report.
1.
Drag the Subreport element from the Palette to the area of your report where you want to use it.
The Subreport wizard opens. You have three options:
60
Create a new report - Use this option when you need to use different data or a new query from your
main report.
Select an existing report - Use this option when you already have a report using the data and query
you need.
Just create the subreport element - Use this option to create a placeholder to be used later.
3.
Select a template for your subreport. For this example, select one of the blank templates. Click Next.
The New Report Wizard > Report file window opens.
4.
Select a location for your subreport, and name it. Click Next.
The Data Source window opens.
61
In this step you can choose to use the same data adapter as the main report, or a different data adapter.
For this example, choose the same adapter (Sugar CRM). Enter the following SQL statement:
select count (*), shipcity from orders group by shipcity
Add all the fields to the list on the right. Click Next.
6.
62
7.
In this window you have a choice of whether to connect to the same database as the main report or to a
different database. For this example, click Use same connection used to fill the master report. Click
Next.
The Subreport Parameters window opens.
In this window you can add any parameters needed in your subreport. For this example, skip this window
and click Finish.
A new report opens, containing all bands.
9.
Delete all bands but the Title or Summary band, because those two bands only print once per report.
Deleting the other bands eliminates extra white space in your report.
You now have a location into which to place your table, chart, or other element attached to the new
subreport.
63
64
CHAPTER 4
JasperReports Library is a powerful tool, and Jaspersoft Studio exposes much of its functionality to help you
design reports. Learning the full capabilities of the report designed can be daunting, but the first step is to build
a simple report to help introduce you to the basic concepts and ways of achieving the desired results.
To that end this chapter introduces the basic steps for defining a report and includes the following sections:
4.1
One Empty Record - Empty rows: This is default data adapter used to create a report without any data.
It can be used to define the layout of a report before connecting it to a data source. A data source can be
added or changed at a later time, after the creation of a report.
Sample DB - Database JBDC Connection: This is a SQL database provided with the Jaspersoft Studio
installation.
Creating a new data adapter: Jaspersoft Studio supports a wide variety of data sources. Using the New
button allows you to browse and connect to an existing data source.
65
66
3.
Select the folder in the workspace where you want to put the report, and name the new report.
You can use the default folder MyReports, name the report use Example,.
If you want to create a new project folder for the report, see Creating a Project Folder on page74.
4.
Click Next.
The New Report Wizard > Datasource window appears.
5.
67
7.
The left-hand list shows all the discovered fields; the right-hand list shows those that will be added to the
report. Select the following fields, then click the right arrow to add them to your report.
ORDERID
SHIPNAME
SHIPADDRESS
SHIPCITY
SHIPREGION
After selecting the fields click Next.
The New Report Wizard > Grouping window appears.
8.
Click Next.
9.
Click Finish.
Jaspersoft Studio now builds the report layout with the selected fields included, as shown in Figure 4-5:
68
4.2
4.2.1
69
4.
70
6.
Click OK.
You return to the Design view.
7.
Expand Fields in the Outline view to see all the fields now available for your report.
71
To add fields to your report, click the field in the Outline view and drag it to the Design view.
When the field object is dragged inside the detail band, Jaspersoft Studio creates a text field element and
sets the text field expression for that element.
4.2.2
Deleting Fields
To delete a field from a report: in the Design view, right-click the field you want to remove, and select Delete.
4.2.3
72
4.3
Previewing a Report
To preview a report, switch to Preview mode by clicking the Preview tab (towards the bottom of the screen in
Design view). The preview compiles the report in the background and fills it with data retrieved by the query
through your JDBC connection. As shown in Figure 4-10, the Detail band repeats for every row in the query
results, creating a simple table report:
73
4.4
74
Enter Jasper in the Wizards bar to filter all actions. showing only the ones related to Jaspersoft Studio
3.
4.
Figure 4-12
75
76
CHAPTER 5
Connecting Jaspersoft Studio to JasperReports Server works much the same as it did for iReport.
This chapter contains the following sections:
Prerequisites
Connecting Jaspersoft Studio to JasperReports Server
Publishing a Report to JasperReports Server
This section describes functionality that can be restricted by the software license for JasperReports
Server. If you dont see some of the options described in this section, your license may prohibit you from
using them. To find out what you're licensed to use, or to upgrade your license, contact Jaspersoft.
5.1
Prerequisites
In order to connect Jaspersoft Studio to JasperReports Server, you need:
If you do not have both of these things, you can install JasperReports Server locally. You can find the installers
on the Community Site.
5.2
Click the Repository Explorer tab, then click the Create a JasperReports Server Connection icon
.
The Server profile wizard appears.
77
Enter the URL, user names and password for your server. If the server hosts multiple organization, enter the
name of your organization as well.
The defaults are:
URL: http://localhost:8080/jasperserver-pro/
User name: jasperadmin
Password: jasperadmin
Note that if you are upgrading from a previous version of Jaspersoft Studio, the old URL
(http://localhost:8080/jasperserver-pro/services/repository ) still works.
4.
5.
6.
78
5.3
Data source from repository: the server uses a data source already there it to fill the report, so we only need
to browse the server for our data source.
Local data source
Don't use any data source: only the report is exported without any data source connection
79
Navigate the directory structure and choose the directory where you want to store your report.
4.
Name the report unit. The report unit contains all report files. Click Next.
The Select Resources window opens.
80
Select any resources you want to upload with your report and check the box if you want to overwrite
previous versions of those resources. Click Next.
The Configure the data source window opens.
81
5.4
82
2.
Select any report template, such as the Blank Letter template, and click Next.
3.
Select a location to save the JRXML, and enter a name for it and click Next.
Select a data adapter for the Topic. In this case, select the Sample DB - database JDBC connection.
This sample includes the same data as the SugarCRM data source in the JasperReports Server samples.
5.
6.
Click Next.
7.
Move all the fields in the left-hand list into the right-hand list and click Next.
8.
9. Click Finish.
10. The wizard closes and Jaspersoft Studio displays the JRXML, which has been saved in the location
specified in step3.
To upload the Topic:
1. In the Repository Explorer, expand the Servers node and select the JasperReports Server instance where you
want to put the Topic.
If you haven't created any server connections, create one before proceeding. for more information, see
Chapter 5, Connecting Jaspersoft Studio to JasperReports Server, on page77.
2.
Navigate to the Topic folder. For example, if you are logged in as jasperadmin, navigate to Ad Hoc
Components> Topics.
3.
4.
5.
6.
7.
8.
9.
Enable the Data Source from Repository radio button and click
to its right.
Navigate to Analysis Components >Analysis connections, click the SugarCRM data source, and click OK.
10. Click Finish to upload the report unit to the Topics folder so it can be used in the JasperReports Server Ad
Hoc Editor.
To test the Topic:
1. Login to JasperReports Server.
2.
3.
4.
Click the Topic you created above and click Table,Chart, or Crosstab.
5.
Verify that the fields you selected in Jaspersoft Studio all appear in the list of available fields.
83
If the Topic includes fields with unusual datatypes, those fields don't appear in the Ad Hoc Editor because
JasperReports Server is not equipped to manage them properly. For example, if the Topic is defined
against a MongoDB instance that returns data of type array, this field isn't available in the Ad Hoc Editor.
For more information on datatype support in the Ad hoc editor, see the JasperReports Server
Administrator Guide.
When you create a JRXML file for use as a Topic, you can specify the name to display for each field that the
Topic returns. To do so, define a field property named adhoc.display for each field declared in the JRXML.
The adhoc.display field property must have the following syntax:
<property name=adhoc.display value=Any Name/>
For example, this JRXML code declares a StoreState field that is displayed in reports as Store State:
<field name=StoreState class=java.lang.String>
<property name=adhoc.display value=Store State/>
</field>
Topics also support the $R expressions for field names; for more information, see the food.When you create a
JRXML file for use as a Topic, you can specify the name to display for each field that the Topic returns. To do
so, define a field property named adhoc.display for each field declared in the JRXML. The adhoc.display
field property must have the following syntax:
<property name=adhoc.display value=Any Name/>
For example, this JRXML code declares a StoreState field that is displayed in reports as Store State:
<field name=StoreState class=java.lang.String>
<property name=adhoc.display value=Store State/>
</field>
Topics also support the $R expressions for field names; for more information, see Expression Operators.
For fields in a non-domain topic the following properties may be of interest:
84
CHAPTER 6
In a report, there are three groups of objects that can store values:
Fields
Parameters
Variables
Jaspersoft Studio uses these objects in data source queries. In order to use these objects in a report, they must be
declared with a discrete type that corresponds to a Java class, such as String or Double. After they have been
declared in a report design, the objects can be modified or updated during the report generation process.
This chapter contains the following sections:
6.1
Understanding Fields
Registration of Fields from a SQL Query
Registration of JavaBean Fields
Fields and Textfields
Understanding Fields
A print is commonly created starting from a data source that provides a set of records composed of a series of
fields. This behavior is exactly like obtaining the results of an SQL query.
Jaspersoft Studio displays available fields as children of the Fields node in the document outline view. To
create a field, right-click the Fields node and select Create Field. The new field is included as an undefined
entry on the Properties tab. You can configure the field properties by selecting it.
Press the Object button to name your field, enter a description, and choose a class.
85
Press the Advanced button to enter advanced properties for the field.
where <field name> must be replaced with the name of the field. When using a field expression (for example,
calling a method on it), keep in mind that it can have a value of null, so you should check for that condition.
An example of a Java expression that checks for a null value is:
($F{myField} != null) ? $F{myFiled}.doSomething() : null
This method is generally valid for all the objects, not just fields. Using Groovy or JavaScript this is rarely a
problem, since those languages handle a null value exception in a more transparent way, usually returning an
empty string.
In some cases a field can be a complex object, like a JavaBean, not just a simple value like a String or an
Integer. A trick to convert a generic object to a String is to concatenate it to a empty string this way:
$F{myfield}+
All Java objects can be converted to a string; the result of this expression depends on the individual object
implementation (specifically, by the implementation of the toString() method). If the object is null, the result
returns the literal text string null as a value.
86
6.2
CQL
HiveQL
JSON
MongoDBQuery
87
PLSQL
SQL
XLS
XPath
If the selected data source is a JDBC connection, Jaspersoft Studio tests the access connection to the data source
as you define the query. This allows Jaspersoft Studio to identify the fields using the query metadata in the
result set. The design tool lists the discovered fields in the bottom portion of the window. For each field,
Jaspersoft Studio determines the name and the Java type specified for that field by the JDBC driver.
A query that accesses one or more tables containing a large amount of data may require a long delay while
Jaspersoft Studio scans the data source to discover field names. You may want to disable the Automatically
Retrieve Fields option in order to quickly finish your query definition. When you have completed the query,
click the Read Fields button in order to start the fields discovery scan.
All fields used in a query must have a unique name. Use alias field names in the query for fields having
the same name.
In case of an error during the query execution (due to a syntax error or to an unavailable database connection),
an error message appears instead of the fields list.
The field name scan may return a large number of field names if you are working with complex tables. I suggest
that you review the list of discovered names and remove any fields that you are not planning to use in your
report, in order to reduce unnecessary complexity.When you click the OK button all the fields in the list are
included in the report design. You can also remove them later in the outline view, but its a good idea at this
point in the design process to remove any field names that you wont be using.
6.3
88
Put the class name in the name field and click Read attributes. Jaspersoft Studio scans the class.
Check the scan results to make sure that Jaspersoft Studio has captured the correct object attributes for the
class type.
3.
4.
Select the fields you want to use in your report and click Add.
Jaspersoft Studio creates new fields corresponding to the selected attributes and adhesion to the list. The
description, in this case, stores the method that the data source must invoke in order to retrieve the value for
the specified field.
Jaspersoft Studio parses a description such as address.state (with a period character between the two
attributes) as an attribute path. This attribute path is passed to the function getAddress() in order to locate the
target attribute, and then to getState() in order to query the status of the attribute. Paths may be arbitrary
long, and Jaspersoft Studio can recursively parse attribute trees within complex JavaBeans and in order to
register very specific fields.
We have just discussed the two tools used most frequently to register fields, but were not done yet. There are
many other tools you can use to discover and register fields, for instance, the HQL and XML node mapping
tools.
89
6.4
90
CHAPTER 7
REPORT TEMPLATES
One of the most useful tools of Jaspersoft Studio is the ability to use and create templates. The provided
templates can form the base for new reports with no further changes, or they can be used as a model to which
fields, text fields and groups can be added in the Report Wizard.
This chapter explains how to build a custom template and add them so that they appear in the Template
Chooser. It has the following sections:
7.1
Template Structure
Creating and Customizing Templates
Saving Templates
Adding Templates to Jaspersoft Studio
Template Structure
A template is a JRXML file. When a new report is created, the JRXML file of the selected template is loaded
and modified according to any options you have specified in the wizard steps. If the user chooses not to use the
wizard, the selected template is just copied along with all the referenced images in the location the user has
specified.
When the Report Template dialog box appears, it scans all paths specified as template directories. Any valid
JRXML files found are included in the Report Template dialog box. If a template provides a preview image,
the image is displayed. Otherwise, a white box appears.
91
Every band has the same size in the template and in the report generated from the template. For example, if
your template has a Detail band with a height of 100 pixels and a Summary band with height of 10
pixels then every report generated with this template has by default a Detail band with a height of 100
pixels and a Summary band with a height of 10 pixels.
Page formatting is the same in a report in the template that generates it. For example, if your template or A4
paper with half-inch margins, any report using that template uses an A4 paper with half-inch margins.
The content of the Summary, Title, Page Header and Page Footer bands, as well as the background, is
static. Every element that is placed in these bands in a template appears in every report that uses this
template.
In the Column Header band there should be only a Static Text element, and its text content must be
Label. The appearance, font and the other attributes of this label create every label that is inserted in this
band.
In the Group Header band there should be only a Text Field with the string GroupField (including
the double quotes). As with the Column Header this assumes an example to generate every field that goes
in this band.
In the Detail band there should be only a Text Filed with the string Field (including the double
quotes). Again, this is used to generate every field that goes in this band.
When you group data using the wizard, the wizard creates all the necessary report structures to produce the
requested groups. The Report Wizard permits the creation of up to four groups, and a group header and group
92
footer is associated with each. If the template defines one or more groups and you group the data, the wizard
tries to use any existing groups before creating new ones. By default, groups in the template are deleted if they
are not used. For each group, the wizard sets the group expression and adds a label for the name and a text field
showing the value of the group expression (which is always a field name, since the grouping criteria set using
the wizard is one of the selected fields).
7.2
7.2.1
From the New Report wizard, select a template from which to start. Click Blank Letter, and Next.
3.
Choose where you want to store the file, and name the new template. Click Next.
4.
For creating a template, there is no need to connect to a data source. Select One Empty Record - Empty
rows and click Finish.
Title
Page Header
93
5.
Column Header
Detail
Column Footer
Page Footer
Summary
Right-click on the report root node in the Outline, and select Create Group.
94
Leave both Add the Group Header and Add the Group Footer checked, and click Finish.
Your report is similar to the one in Figure 7-5.
7.2.2
Customizing a Template
Now that you have a blank template, you can customize it to suit your preference. For example, you can add
your company name and logo, page numbering, add a background for your report, and set band and column
sizes. You also use this procedure to make changes to an existing template.
To customize a template:
1. To add a graphic, drag an Image element into the band where you want the image to appear. This is
usually the Title band.
For more information about the Image element, see Graphic Elements on page40.
2.
To add a title you want to see in your template, drag a Static Text element to the Title band. Style the text
in the Properties tab. For more information about Static Text elements, see Text Elements on page42.
3.
If you want the background to cover the entire page, right-click the element in the Outline and choose
Maximize Band Height. Otherwise, set the Background band to the size you want. Drag an Image
element into the Background band to create your background.
4.
You can add page numbering to the Page Footer band. Drag a Page Number element into the band, and
place it where you want the page number to be. You can also add a Page X of Y element if you prefer.
5.
If you want a label in the Column Header band, add a Static Text element with the text Label.
6.
To set styles for your reports text, add a Text field to the Group Header and a Text field to the Detail
band. Set the text of the first Text field to GroupField and the text of the second Text field to Field.
Format the text as you like.
7.
95
8.
Click the Preview tab. Your template should like something like the one in Figure 7-6.
7.3
Saving Templates
Jaspersoft Studio templates require a flat folder structure (resources and report must be on the same folder), so
when you export a template, the resources are moved and the paths in the report exported are changed to point
to the same directory. Because in a flat structure one resource overwrites another, if there are resources in
multiple folders with the same name, an error message is shown.
7.3.1
96
Click the New... button and navigate to the directory in which you want to store your template.
3.
4.
Click OK.
7.3.2
Exporting a Template
After you have created a template, save it for future use.
1.
97
Click the Browse button and navigate to the directory where you want to save your template. Click Next.
The Define Type and Categories dialog opens.
98
In the drop-down, choose whether the template type is a Standard Report or a Table-Based report.
This selection is used to validate the report. For example. by selecting Standard Report, the validation
process searches for the group field with the text group or for the column header label with the text label. If
any of the required fields is not found, an error message is displayed.
4.
Select the categories in which you want to make the template available, and using the arrow button, add
them to the Selected Categories box.
5.
Click Finish.
7.3.3
7.4
1.
2.
3.
99
3.
4.
Click OK.
When you go to File > New > Jasper Report, your new template appears, along with the default templates.
100
CHAPTER 8
USING PARAMETERS
Parameters are values usually passed to the report from the application that originally requested it. They can be
used for configuring features of a particular report during report generation (such as the value to use for a
condition in a SQL query) and to supply additional data to the report that cannot properly provided by the data
source (for example, a custom title for the report, an application-specific path to search for images, or even a
more complex object like an image).
Report parameters are used in many different ways inside a report. They can be used in the where condition of
an SQL query, or to provide additional data to the report (for example, the a value for a title or the name of user
that executed the report). A parameter is defined by a name and a Class, which is a Java class type like
java.lang.String or java.lang.Integer. Any Java class is a valid parameter class. In example a parameter of type
java.sql.Connection may be used to populate a subreport, while a simple java.lang.Boolean parameter may be
used to show or hide a section of the report.
This chapter contains the following sections:
8.1
Managing Parameters
Default Parameters
Using Parameters in Queries
Parameters Prompt
Managing Parameters
Parameters are the best communication channel between the report engine and the execution environment (your
application).
A parameter can have a default value which is defined by means of the default expression property. This
expression is evaluated by JasperReports only when a value for the parameter has not been provided by the user
at run time.
101
102
As with fields, you may specify pairs of type name/value as properties for each parameter. This is a way to add
extra information to the parameter for use by external applications. For example, the designer can use properties
to include the description of the parameter in different languages or perhaps add instructions about the format of
the input prompt.
8.2
Default Parameters
JasperReports provides some built-in parameters (they are internal to the reporting engine) that you may read but
cannot modify. Some the most important are the "REPORT_CONNECTION", which holds the JDBC connection
used to run the SQL query of the report (if the report is filled using a JDBC connection), the "REPORT_DATA_
SOURCE" which contains, if available, the data source used to fill the report, the "REPORT_LOCALE" which
contains the Locale used to fill the report and so on.
Some built-in parameters are specific of some query languages, in example when using the Hibernate query
language, the reports automatically includes the parameter "HIBERNATE_SESSION" that holds the Hibernate
session used to run the HQL query. As said, the built-in parameters can not be modified or deleted.
The built-in parameters are:
Table 8-1 JasperReports Default Parameters
Parameter
Description
REPORT_CONTEXT
REPORT_PARAMETERS_MAP
JASPER_REPORT
REPORT_CONNECTION
This is the JDBC connection passed to the report when the report is
created through a SQL query.
REPORT_MAX_COUNT
REPORT_DATA_SOURCE
This is the data source used by the report when it is not using a JDBC
connection.
REPORT_SCRIPTLET
REPORT_LOCALE
This is used to set the locale used to fill the report. If no locale is provided,
the system default is used.
REPORT_RESOURCE_BOUNDLE
REPORT_TIME_ZONE
This is used to set the time zone used to fill the report. If no value is
provided, the system default is used.
103
Parameter
Description
REPORT_FORMAT_FACTORY
This is an instance of a
net.sf.jasperreports.engine.util.FormatFactory. The user can
replace the default one and specify a custom version using a parameter.
Another way to use a particular format factory is by setting the report
property format factory class.
REPORT_CLASS_LOADER
This parameter can be used to set the class loader to use when filling the
report.
REPORT_URL_HANDLER_
FACTORY
REPORT_FILE_RESOLVER
This is an instance of
net.sf.jasperreports.engine.util.FileResolver used to resolve
resource locations that can be passed to the report in order to replace the
default implementation.
REPORT_TEMPLATES
SORT_FIELDS
FILTER
8.3
REPORT_VIRTUALIZER
This defines the class for the report filler that implements the
JRVirtualizer interface for filling the report.
IS_IGNORE_PAGINATION
You can switch the pagination system on and off with this parameter (it
must be a Boolean object). By default, pagination is used except when
exporting to HTML and Excel formats.
8.3.1
104
In this example my_order_id is a parameter that contains the ID of the order to read. This parameter can be
passed to the report from the application that is running it to select only a specific order. Please note that the
parameter here is a valid SQL parameter, meaning that the query can be executed using a prepared statement
like:
SELECT * FROM ORDERS WHERE ORDER_ID = ?
and the value of the parameter my_order_id is then passed to the statement.
In this query:
SELECT * FROM ORDERS ORDER BY $P!{my_order_field}
my_order_field cannot be treated as a SQL parameter. JasperReports considers this parameter a placeholder
(note the special syntax $P!{}) which is replaced with the text value of the parameter (in this case
"ORDERDATE DESC").
With the same logic, a query can be fully passed using a parameter. The query string would look like:
$P!{my_query}
The number of parameters in a query is arbitrary. When passing a value using the $P!{} syntax, the value of the
parameter is taken as is, the user is responsible of the correctness of the passed value (SQL escaping is not
performed by JasperReports in this case). When using a parameter in a query, a default value must be set for the
parameter to allow Jaspersoft Studio to execute the query to retrieve the available fields.
8.3.2
In this case $P should be used, because we don't have $X{GREATER,..}, and Null has no meaning for the
operation greater than.
2.
Both generate the same output if parameter has not Null value: "select * where num_column = 1"
However, if the parameter has a Null value the output is different:
The key difference that databases don't understand "= null", but "is null". So if you want your query
with the condition "=" to work with null values, you need to use $X{EQUAL/NOTEQUAL, column,
parameter}.
105
8.3.3
The set here is defined by the countries USA, Italy and Germany. Assuming we are passing the set of countries
in a list (or better a java.util.Collection) or in an array, the syntax to make the previous query dynamic in
reference to the set of countries is:
SELECT * FROM ORDERS WHERE $X{IN, SHIPCOUNTRY, myCountries}
where myCountries is the name of the parameter that contains the set of country names. The $X{} clause
recognizes three parameters:
JasperReports handles special characters in each value. If the parameter is null or contains an empty list,
meaning no value has been set for the parameter, the entire $X{} clause is evaluated as the always true
statement 0 = 0.
8.3.4
Relative Dates
The relative dates feature enables you create reports that to filter information based on a date range relative to
the current system date. To do this, use the following template:
<Keyword> <+/-> <N> where:
<Keyword> indicates the time span you want to use. Options include: DAY, WEEK, MONTH, QUARTER,
SEMI, and YEAR.
<+/-> indicates whether the time span occurs before or after the chosen date.
<N> indicates the number of the above-mentioned time spans you want to include in the filter.
For example, if you want to look at Sales for the prior month, your expression would be MONTH - 1.
Relative dates are sensitive to time zones. The relative date expression is calculated in the time zone of
the logged-in user.
Only one property is configurable: the start day of the week does not depend on locale.
The class attribute of a JasperReports Parameter of type Relative Date should have one of the following
values:
and Time).
For example: <parameter name=myParam
class="net.sf.jasperreports.engine.rd.TimestampRange>
Following are two examples of when and how to use relative dates:
106
Problem
Solution
Valid answer:
select * from orders where order_date >= QUARTER and order_
date < QUARTER + 1
Better answer using DateRanges:
select * from orders where $X{EQUAL, order_date, QUARTER}
If you want to set a relative date as a default value expression of a JasperReports parameter, use the following
relative date-builder pattern:
new
new
new
new
DateRangeBuilder("DAY-1").toDateRange()
DateRangeBuilder("WEEK").set(Timestamp.class).toDateRange()
DateRangeBuilder("2012-08-01").toDateRange()
DateRangeBuilder("2012-08-01 12:34:56").toDateRange();
For queries, Relative dates are not supported by the $P{} function because it can handle only a limited number
of classes (standard Java classes Integer, String etc.). Instead, a new implementation of pluggable functions and
parameters in JasperReports supports relative dates with $X{} functions.
The following is a JRXML example that shows data from the previous day:
<parameter name=myParameter class=net.sf.jasperreports.engine.rd.DateRange>
<defaultValueExpression>
<![CDATA[
new DateRangeBuilder("DAY-1").toDateRange()
]]>
</defaultValueExpression>
</parameter>
<queryString>
<![CDATA[
Select * from account where $X{EQUAL, OpportunityCloseDate, SelectedDateRange}
]]>
</queryString>
Older reports that have date parameters work just as before, though Relative Dates functionality is not
available for them. In order to make older reports support relative dates, you need to modify the JRXML;
change the parameter class, and, if needed, set a default value expression. In addition, remember to use
the $X{} function instead of $P{}.
Relative dates currently do not support keywords like Week-To-Date (from the start of the current week to the
end of the current day). However, you can emulate that by using IS_BETWEEN:
107
8.3.5
fillReport is a key method that allows you to create a report instance by specifying the file name as a
parameter, a parameter map, and a data source. (This example uses a dummy data source created with the class
JREmptyDataSource and an empty parameter map created using a java.util.HashMap object.)
Lets see how to pass a simple parameter to a reporting order to specify the title of a report.
The first step is to create a parameter in the report to host the title (that is a String). We can name this parameter
REPORT_TITLE and the class is java.lang.String (Figure 8-3).
108
...
HashMap hm = new HashMap();
hm.put(REPORT_TITLE,This is the title of the report);
...
JasperPrint print = JasperFillManager.fillReport(
fileName,
hm,
new JREmptyDataSource());
...
We have included a value for the REPORT_TITLE parameter in the parameter map. You do not need to pass a
value for all the parameters. If you dont provide a value for a certain parameter, JasperReports assigns the value
of Default Value Expression to the parameter with the empty expression evaluated as null.
Printing the report, Jaspersoft Studio includes the String This is the title of the report in the Title
band. In this case we just used a simple String. However, it is possible to pass much more complex objects as
parameters, such as an image (java.awt.Image) or a data source instance configured to provide a specified
subreport with data. The most important thing to remember is that the object passed in the map as the value for
a certain parameter must have the same type (or at least be a super class) of the type of the parameter in the
report. Otherwise, Jaspersoft Studio fails to generate the report, returning a ClassCastException error.
8.4
Parameters Prompt
If a parameter is set to be used as a prompt, when a report is executed, Jaspersoft Studio asks for the value of the
parameter.
To create a parameter prompt:
1.
2.
Create a simple report with the template Blank A4, name ParameterExample and data adapter One
Empty Record - Empty Rows.
In this report create a parameter and rename it (from its properties tab) to MESSAGE, with type
java.lang.String set to be used as a prompt (check the box next to the property Is For Prompting).
Drag the parameter from the outline view inside the Title band and Jaspersoft Studio creates a text field to
display the parameter value.
You should have something like the following image:
109
3.
110
Press the Play button. The message is printed in the title band.
111
112
CHAPTER 9
VARIABLES
Variables can be used to store partial results and do complex calculations with the data extracted from data
source. These values can then be used in other parts of the report, including other variables.
This chapter contains the following sections:
9.1
Click to select the new variable. Information for this variable opens in the Properties view.
3.
4.
There are some built-in variables on Jaspersoft Studio, which present in every report. You can identify these
variables because their name has a light gray color, instead of a black color, and the properties of these variables
can not be edited. For information on these variables, see Built-In Variables on page116
9.2
Name: A string used to refer to a variable. It is necessary to use this variable inside other expressions (such
the valorization of a Text Field or the computation of another variable). To refer to a variable the following
syntax is used: $V{variable_name}.
113
9.3
Type: Necessary because a variable is an object that probably is used in other expressions, so its type must
be known to be manipulated correctly.
Expression: The function used to define the variable value, it can be composed of more fields and
variables, and could be logic operators, math operators and so on. To easily define the expression an
expression editor is provided in Jaspersoft Studio. This can be opened using the button to the right of the
text Field used to write the expression. The expression is evaluated on each iteration, every time a record is
read from the data source. If there isn't a calculation function defined, the result of the expression is
assigned to the variable. Thus it's important that the result has a type compatible with the one in the
variable.
Initial Value: The value assumed from the variable at the beginning, before the first computation of its
expression. The initial value is an expression itself, so it can be defined through the expression editor. It's
not mandatory, but it is good practice to define an initial value. For example, if you have a variable called
variable1 with the expression new Integer(5). At every record read, the variable is assigned the integer
value 5, so the initial value it isn't important in this context. However, if you change the expression to $V
{variable1}+5, at every iteration the variable is incremented by 5. In this case, an initial value is
necessary because if at the first iteration the variable1 is undefined, all future evaluations will break. So
while an initial value is not mandatory, but undefined variables can be dangerous.
9.3.1
Evaluation Time
The evaluation time is not an attribute of the variable but of the elements that can use variables in their
expressions (like a Text Field) and define the "time" when the value of the variable should be read. A variable
can potentially change value at every iteration, so a value read at one time may be different from the one
obtained during another time. So for every element that can define an expression is possible to say when
evaluate it. And since in the expression could be defined one or more variables this parameter also influences
also when these variables are read.
The possible values are:
114
Report: The value of the expression is evaluated ad the end of the report.
Page: The value of the expression is evaluated at the end of every page of the report.
Column: The value of the expression is evaluated at the end of each column (if the report is composed
only of a column this is equivalent to Page).
Group: The value of the expression is evaluated after the break of the specified group. This option is
visible only if at least one group is defined.
Band: The value of the expression is evaluated after the end of the band where the element with this
evaluation time is placed. This is a very particular case, introduced to wait that the other elements in the
band are completely created. Typically the value of the variables are read at the start of the band, but for
example suppose to have a subreport with an output parameter to print in the main report. To print this
parameter it must be read when the subreport was already computed, so the value could be printed when the
band is completely created, in this cases the Band evaluation time is necessary.
Chapter 9 Variables
9.3.2
Auto: This is used when in the expression of the element there are more variables and fields, that need to
be evaluated at different times. The variables are evaluated at a time corresponding to their Reset Type (see
below for more information), instead the fields are always evaluated at time -now. This type is useful when
report elements have expressions that combine values evaluated at different times (for example, percentage
out of a total).
Now: The value of the expression is evaluated after the read of every record, so at every iteration, this is the
default behavior.
Calculation Function
A calculation function is an attribute of a variable that defines when the variable can be used in association
with the expression to determinate the value of the variable. When using a calculation function, the value of the
variable is not determinate directly by its expression. Instead, it is passed to the calculation function that uses it
(depending on the function) to calculate the variable value.
There are many functions built-in to Jaspersoft Studio:
9.3.3
Sum: At every iteration the value of the expression is taken it is summed at the value of the variable. This
is one of the cases where the initial value is really important.
Count: At every iteration the variable value is incremented by one unit. This only if the expression is
different from null, in that case the value of the variable is left unchanged.
Distinct Count: At every iteration the variable value is incremented by one unit, but only if the value of
the expression was never returned before.
Average: The value of the variable is the arithmetic average of all values received in input from the
expression.
Lowest: The variable take the value of the lowest element received from the expression.
Highest: The variable take the value of the highest element received from the expression.
Standard Deviation: The standard deviation of all the value received from the expression.
First: The variable take the value from the first value returned by the expression.
System: No calculation is done and the expression is not evaluated, the value of this variable is the last
value set on it. Useful to store partial results or the final result of a computation.
Increment Type
As stated above, when a calculation function is defined, the value of the expression is passed to the function
that calculates the variable. The default behavior is to do this for every record read, but sometimes a different
behavior is desired. Using the increment type parameter is possible to change the "time" on which the
calculation function is used.
The possible values for this attribute are:
Report: The Calculation Function is called only at the end of the report, passing to it the value of the
expression at that moment.
Page: The Calculation Function is called at the end of each page, passing to it the value of the expression
at that moments.
Column: The Calculation Function is called at the end of each column (if the report is composed only of a
column this is equivalent to Page).
Group: The Calculation Function is called at the start of every occurrence of the specified group. This
option is visible only if at least one group is defined.
None: The Calculation Function is called after the read of every record, this is the default behavior.
115
Remember that the expression is evaluated at every record read, independently from the increment type selected,
but the calculation function is used only when the times match those defined in the increment type.
9.3.4
Reset Type
The reset type defines when a variable should be reset to the initial value, or to null if an initial value is
undefined. This is useful when the variable is used to compute a partial value, such a sum or an average of only
some of the records read.
The possible values for this attribute are:
9.3.5
Report: The variable is initialized only one time at the beginning of the report creation.
Page: The variable is initialized on each page.
Column: The variable is initialized again in each new column (if the report is composed only of a column
this is equivalent to Page).
Group: The variable is initialized at the start of every occurrence of the specified group. This option is
visible only if at least one group is defined.
None: The variable is never initialized, so the initial value expression is ignored.
9.4
Built-In Variables
Jaspersoft Studio offers a number of built-in variables for your use, listed in the table below.
You can identify these variables because their name has a light gray color, instead of a black color, and the
properties of these variables cannot be edited.
116
Variable Name
Description
PAGE_NUMBER
COLUMN_NUMBER
REPORT_COUNT
PAGE_COUNT
COLUMN_COUNT
Contains the current number of records processed during the current column
creation.
Chapter 9 Variables
9.5
117
118
Data Adapters
Creating and Using Database JDBC Connections
Working with Your JDBC Connection
Understanding the JRDataSource Interface
Data Source Types
Importing and Exporting Data Sources
Define the data connection type. The connection is a SQL connection rather than a JasperReports or
Jaspersoft Studio object.
Bind information to connect your data to Jaspersoft Studio.
Create the connection and necessary parameters for JasperReports library.
119
Inside Jaspersoft Studio, data adapters can be stored in your Eclipse settings or in files. Files are the preferred
method, because its easier to deploy them later.
For report developers, Jaspersoft Studio data adapters serve the same purpose as what iReport calls data
sources.
The most frequently used connection in Jaspersoft Studio is the JDBC data adapter. Other connection types
provided by Jaspersoft Studio include:
JDBC connection
JavaBean collection data source
XML data source
CSV data source
Hibernate connection
Spring-loaded Hibernate connection
Hadoop Hive data source
JRDataSourceProvider
Custom data source
Mondrian OLAP connection
XML/A connection
EJBQL connection
Empty data source
All the connections are opened and passed directly to JasperReports during report generation. For many
connections, JasperReports provides one or more built-in parameters that can be used inside the report for
several purposes (for example, to fill a subreport that needs the same connection as the parent).
The XML data source allows you to take data from an XML document.
A CSV (comma-separated values) data adapter allows you to open a CSV file for use in a report.
The JavaBean set data source, custom data adapter, and JRDataSourceProvider allow you to print data using
purposely written Java classes.
The Hibernate connection provides the environment to execute HQL (Hibernate Query Language) queries
(this connection can be configured using Spring, as well).
EJBQL (Enterprise JavaBean Query Language) queries can be used with an EJBQL connection.
MDX queries can be used with either type of OLAP client connection (native direct connection to
Mondrian servers or standard XML/A providers (such as JasperReports Server or Microsoft Analysis
Services) to interrogate OLAP databases.
An empty data adapter is something like a generator of records having zero fields. Use this for testing or to meet
specific needs, such as static content reports or subreports.
Connections and data adapters are managed through the DataAdapter Wizard. To set up a new data source,
right-click Data Adapters from the Repository view and choose Create Data Adapter.
120
You can set the active data adapter in several ways. The easiest and most intuitive way is to select the data
adapter from the Repository view.
If no data adapter is selected, the report can't be filled, so by default Jaspersoft Studio uses a pre-configured
empty data adapter. Data adapters can also be used in conjunction with the Report Wizard. But it's always
better to start your report with the data you want to fill it. Thats why configuring the connection to your data
is usually the first step when starting with Jaspersoft Studio.
121
122
If a driver is displayed in red, the JDBC driver class for that driver is not present in the classpath and you must
obtain and install the driver before using it. See Working with Your JDBC Connection on page124.
Thanks to the JDBC URL Wizard, it is possible to automatically construct the JDBC URL to use the
connection to the database by inserting the server name and the database name in the correct text fields. Click
the Wizard button to create the URL.
Enter a username and password to access the database. By means of a check box option, you can save the
password for the connection.
Jaspersoft Studio saves passwords in Eclipse secure storage. In some cases, this can cause problems
when trying to test and save data adapters. For more information, refer to our Eclipse Secure Storage in
Jaspersoft Studio Community wiki page.
10.2.1
ClassNotFoundError
The ClassNotFoundError exception occurs when the required JDBC driver is not present in the classpath. For
example, suppose you want to create a connection to an Oracle database. Jaspersoft Studio has no driver for this
database, but you could be deceived by the presence of the oracle.jdbc.driver.OracleDriver driver in the
JDBC drivers list shown in the window for creating new connections. If you were to select this driver, when
you test the connection, the studio throws the ClassNotFoundException, as shown in Figure 10-5.
123
10.2.2
If a wrong URL is specified (for example, due to a typing error), youll get an arbitrary exception when you
click the Test button. The exact cause of the error can be deduced by the stack trace available in the exception
dialog box.
In this case, if possible, it is better to use the JDBC URL Wizard to build the JDBC URL and try again.
10.2.3
A less-problematic error scenario occurs when you try to establish a connection to a database with the wrong
parameters (for example invalid credentials (username or password) or nonexistent/inaccessible database). In this
case, the same database returns a message is fairly explicit about the reason behind the failure of the connection.
124
This parameter contains the java.sql.Connection class passed to JasperReports from the calling program.
The use of JDBC or SQL connections is the simplest and easiest way to fill a report.
10.3.1
Fields Registration
In order to use SQL query fields in a report, you need to register them. It is not necessary to register all the
selected fieldsonly those effectively used in the report are enough. For each field, you must specify its name
and type. Table 10-1, Conversion of SQL and JAVA types , on page125 shows the mapping of the SQL
types to the corresponding Java types.
Table 10-1 Conversion of SQL and JAVA types
SQL Type
Java Object
SQL Type
Java Object
CHAR
String
REAL
Float
VARCHAR
String
FLOAT
Double
LONGVARCHAR
String
DOUBLE
Double
NUMERIC
java.math.BigDecimal
BINARY
byte[]
DECIMAL
java.math.BigDecimal
VARBINARY
byte[]
BIT
Boolean
LONGVARBINARY
byte[]
TINYINT
Integer
DATE
java.sql.Date
SMALLINT
Integer
TIME
java.sql.Time
INTEGER
Integer
TIMESTAMP
java.sql.Timestamp
BIGINT
Long
The table does not include the BLOB and CLOB types and other special types, such as ARRAY, STRUCT, and
REF, because these types cannot be managed automatically by JasperReports. However, it is possible to use
them by declaring them generically as Object and managing them by writing supporting static methods. The
BINARY, VARBINARY, and LONGBINARY types should be dealt with in a similar way. With many
databases, BLOB and CLOB can be declared as java.io.InputStream.
Whether a SQL type is converted to a Java object depends on the JDBC driver used.
For the automatic registration of SQL query fields, Jaspersoft Studio relies on the type proposed for each field
by the driver itself.
125
10.3.2
Filtering Records
The records retrieved from a data source (or from the execution of a query through a connection) can be ordered
and filtered. Sort and filter options may be set from the Report query dialog box by clicking the Dataset and
Query button
.
126
The first method, public boolean next(), is useful for moving a virtual cursor to the next record. In fact, data
supplied by a JRDataSource is ideally organized into records as in a table. The second method, public Object
getFieldValue(JRField jrField), returns true if the cursor is positioned correctly in the subsequent record,
false if there are no more available records.
Every time that JasperReports executes the public boolean next() method, all the fields declared in the
report are filled and all the expressions (starting from those associated with the variables) are calculated again;
subsequently, it's determined whether to print the header of a new group, to go to a new page, and so on. When
next returns false, the report is ended by printing all final bands (Group Footer, Column Footer, Last Page
Footer, and Summary). The method can be called as many times as there are records present (or represented) from
the data source instance.
127
The method public Object getFieldValue(JRField jrField) is called by JasperReports after a call to
next results in a true value. In particular, it is executed for every single field declared in the report. In the call, a
JRField object is passed as a parameter; it is used to specify the name, the description and the type of the field
from which you want to obtain the value (all this information, depending by the specific data source
implementation, can be combined to extract the field value).
The type of the value returned by the public Object getFieldValue(JRField jrField) method has to be
adequate to that declared in the JRField parameter, except when a null is returned. If the type of the field was
declared as java.lang.Object, the method can return an arbitrary type. In this case, if required, a cast can be
used in the expressions. A cast is a way to dynamically indicate the type on an object, the syntax of a cast is:
(type)object
in example:
(com.jaspersoft.ireport.examples.beans.PersonBean)$F{my_person}
Usually a cast is required when you need to call a method on the object that belongs to a particular class.
A JavaBeans set data source allows you to use JavaBeans as data to fill a report. In this context, a JavaBean is a
Java class that exposes its attributes with a series of getter methods, with the following syntax:
public <returnType> getXXX()
where <returnType> (the return value) is a generic Java class or a primitive type (such as int, double, and so
on).
In order to create a connection to handle JavaBeans, select Collection of JavaBeans in the list of data source
types to bring up the dialog box shown in Figure 10-8.
128
10.5.2
One peculiarity of a JavaBeans set data source is that the fields are exposed through get methods. This means
that if the JavaBean has a getXyz() method, xyz is the name of a record field (the JavaBean represent the
record).
In this example, the PersonBean object shows two fields: name and age; register them in the fields list as
String and Integer, respectively.
Create a new empty report and add the two fields by right-clicking the Fields node in the outline view and
selecting Add field. The name and the type of the fields are: name (java.lang.String) and age
(java.lang.Integer).
Drag the fields into the Detail band and run the report (being sure the active connection is the Test Factory). To
refer to an attribute of an attribute, you can use a special notation in which attributes are separated by periods.
For example, to access the street attribute of a hypothetical Address class contained in the PersonBean, you
can use the syntax address.street. The real call would be <someBean>.getAddress().getStreet().
129
10.5.3
For attributes that are also Java objects, you can double-click the objects to display the objects other
attributes.
To map a field, select an attribute name and click the Add Selected Field(s) button.
JasperReports provides the ability to use XML as a data adapter in three different ways: XML documents,
remote XML documents, and XML/A servers.
An XML document is typically organized as a tree, and its structure hardly matches the table-like form required
by JasperReports. For this reason, you have to use an XPath expression to define a node set. The specifications
of the XPath language are available at http://www.w3.org/TR/xpath; it is used to identify values or nodes in an
XML document. Some examples can help you understand how to define the nodes.
The XML file in Table 10-2, Example XML file, on page130 is a hypothetical address book in which
different people appear, grouped in categories. At the end of the categories list, a second list, of favorites
objects, appears. In this case, it is possible to define different node set types. The choice is determined by how
you want to organize the data in your report.
Table 10-2 Example XML file
<addressbook>
<category name="home">
<person id="1">
<lastname>Davolio</lastname>
<firstname>Nancy</firstname>
</person>
<person id="2">
<lastname>Fuller</lastname>
<firstname>Andrew</firstname>
</person>
<person id="3">
<lastname>Leverling</lastname>
130
</person>
</category>
<category name="work">
<person id="4">
<lastname>Peacock</lastname>
<firstname>Margaret</firstname>
</person>
</category>
<favorites>
<person id="1"/>
<person id="3"/>
</favorites>
</addressbook>
To select only the people contained in the categories (that is, all the people in the address book), use the
following expression:
/addressbook/category/person
Four nodes are returned, as shown in Table 10-3, Node set with expression /addressbook/category/person.
Table 10-3 Node set with expression /addressbook/category/person
<person id="1">
<lastname>Davolio</lastname>
<firstname>Nancy</firstname>
</person>
<person id="2">
<lastname>Fuller</lastname>
<firstname>Andrew</firstname>
</person>
<person id="3">
<lastname>Leverling</lastname>
</person>
<person id="4">
<lastname>Peacock</lastname>
<firstname>Margaret</firstname>
</person>
If you want to select the people appearing in the favorites node, the expression to use is
/addressbook/favorites/person
Here is another expression. It is a bit more complex, but it shows all the power of the Xpath language. The idea
is to select the person nodes belonging to the work category. The expression to use is the following:
/addressbook/category[@name = "work"]/person
The expression returns only one node, that with an ID equal to 4, as shown here:
<person id="4">
<lastname>Peacock</lastname>
<firstname>Margaret</firstname>
</person>
131
After you have created an expression for the selection of a node set, you can proceed to the creation of an XML
data source.
Open the window for creating a new data source and select XML File data source from the list of connection
types to bring up the dialog box shown in Figure 10-10, Configuring an XML Data Adapter.
10.5.4
In the case of an XML data source, the definition of a field in the report needs a particular expression inserted as
a field description in addition to the type and the name. As the data source aims always to be one node of the
selected node set, the expressions are relative to the current node.
To select the value of an attribute of the current node, use the following syntax:
@<name attribute>
For example, to define a field that must point to the id attribute of a person (attribute id of the node person), it
is sufficient to create a new field, name it as you want, and set the description to
132
@id
Similarly, it is possible to get to the child nodes of the current node. For example, if you want to refer to the
lastname node, child of person, use the following syntax:
lastname
To move to the parent value of the current node (for example, to determine the category to which a person
belongs), use a slightly different syntax:
ancestor::category/@name
The ancestor keyword indicates that you are referring to a parent node of the current node; in particular, you are
referring to the first parent of category type, of which you want to know the value of the name attribute.
Now, lets see everything in action. Prepare a simple report with the registered fields shown here:
Field name
Description
Type
id
@id
Integer
lastname
lastname
String
firstname
firstname
String
name of category
ancestor::category/@name
String
Jaspersoft Studio provides a visual tool to map XML nodes to report fields; to use it, open the query window
and select XPath as the query language. If the active connection is a valid XML data source, the associated
XML document is shown in a tree view. To register the fields, set the record node by right-clicking a Person
node and selecting the menu item Set record node. The record nodes are displayed in bold.
Then one by one, select the nodes or attributes and select the pop-up menu itemAdd node as fieldto map them
to report fields. Jaspersoft Studio determines the correct XPath expression to use and creates the fields for you.
You can modify the generated field name and set a more suitable field type after the registration of the field in
the report (which happens when you close the query dialog).
Insert the different fields into the Detail band. The XML file used to fill the report is that shown:
The XPath expression for the node set selection specified in the query dialog is:
/addressbook/category/person
10.5.5
A node set allows you to identify a series of nodes that represent, from a JRDataSource point of view, some
records. However, due to the tree-like nature of an XML document, it may be necessary to see other node sets
that are subordinated to the main nodes.
Consider the XML in Table 10-4, Complex XML example, on page134. This is a slightly modified version
of the document presented in Table 10-2. For each person node, a hobbies node is added which contains a
series of hobby nodes and one or more e-mail addresses.
133
What we want to produce is a document that is more elaborate than those you have seen until nowfor each
person, we want to present their e-mail addresses, hobbies, and favorite people.
To obtain such a document, use subreports; in particular, you need a subreport for the e-mail addresses list, one
for hobbies, and one for favorite people (that is a set of nodes out of the scope of the XPath query we used). To
generate these subreports, you need to understand how to produce new data sources to feed them. In this case,
you use the JRXmlDataSource, which exposes two extremely useful methods:
public JRXmlDataSource dataSource(String selectExpression)
public JRXmlDataSource subDataSource(String selectExpression)
134
The difference between the two is that the first method processes the expression by applying it to the whole
document, starting from the actual root, while the second assumes the current node is the root.
Both methods can be used in the data source expression of a subreport element to produce dynamically the data
source to pass to the element. The most important thing to note is that this mechanism allows you to make both
the data source production and the expression of node selection dynamic.
The expression to create the data source that feeds the subreport of the e-mail addresses is:
((net.sf.jasperreports.engine.data.JRXmlDataSource)
$P{REPORT_DATA_SOURCE}).subDataSource("/person/email")
This code returns all the e-mail nodes that are direct descendants of the present node (person).
The expression for the hobbies subreport is similar, except for the node selection:
((net.sf.jasperreports.engine.data.JRXmlDataSource)
$P{REPORT_DATA_SOURCE}).subDataSource("/person/hobbies/hobby")
Next, declare the master reports fields. In the subreport, you have to refer to the current node value, so the field
expression is simply a dot (.),
Proceed with building your three reports: xml_addressbook.jasper, xml_addresses.jasper, and xml_
hobbies.jasper.
In the master report, xml_addressbook.jrxml, insert a group named Name of category, in which you
associate the expression for the category field ($F{name of category}). In the header band for Name of
category, insert a field to display the category name. By doing this, the names of the different people are
grouped by category (as in the XML file).
In the Detail band, position the id, lastname, and firstname fields. Underneath these fields, add the two
Subreport elements, the first for the e-mail addresses, the second for the hobbies.
The e-mail and hobby subreports are identical except for the name of the field in each one. The two reports
should be as large as the Subreport elements in the master report, so remove the margins and set the report width
accordingly.
Preview both the subreports just to compile them and generate the relative .jasper files. Jaspersoft Studio
returns an error during the fill process, but that's expected. We haven't set an Xpath query, so JasperReports can't
get any data. You can resolve the problem by setting a simple Xpath query (it isn't used in the final report), or
you can preview the subreport using an empty data source (select it from the combo box in the tool bar).
When the subreports are done, execute the master report. If everything is okay, the report groups people by
home and work categories and the subreports associated with each person.
As this example demonstrates, the real power of the XML data source is the versatility of XPath, which allows
navigation of the node selection in a refined manner.
10.5.6
XML for Analysis is an XML standard used to access remote data stored in an OLAP schema. Jaspersoft Studio
supports an XML/A data adapter that can connect various XML/A providers such as JasperReports Server and
Microsoft SQL Server Analytic Services (SSAS). Because Jaspersoft Studio uses OLAP4J
(http://www.olap4j.org/), it may also be able to connect to other types of XML/A provider.
The remote server must also be configured for XML/A. For more information, including instructions for
configuring Jaspersoft OLAP, see the Jaspersoft OLAP User Guide .
135
4.
5.
6.
7.
Select the data source, catalog, and cube that stores the data you want to fill your report.
8.
Click Test.
Jaspersoft Studio attempts to connect to the server and read the cube you selected. If it connects, a message
indicating success appears. If the connection fails, check the URL, ensure that the remote server is available,
and try again.
9.
When the test succeeds, click OK to close the message and click Finish to close the New Data Adapter
wizard.
When you create a report using this data adapter, you may see a message indicating that the data adapter doesn't
support the ability to retrieve fields. The point of this message is that Jaspersoft Studio does not have enough
information at this point to preview your data. Once you supply an MDX query, Jaspersoft Studio can
automatically read fields and suggest their datatypes.
10.5.7
When you create an XML/A data adapter, you define the cube from which to read data. Jaspersoft Studio can
then inspect the remote server and suggest datatypes for the fields returned.
To register fields returned by an XML/A data adapter:
1.
2.
3.
4.
5.
136
Jaspersoft Studio returns the XML/A provider's data, including fields and parameters, and populates the
window's tabs with information. For more information on how these tabs can be used to define the data in
your report, see Chapter 14, Using the Dataset and Query Dialog and the Query Builder, on page199.
Jaspersoft Studio also sets the class type of each field to an appropriate Java datatype. If Jaspersoft Studio
sets an incorrect datatype, you can set the correct type after the fields are added to your report.
6.
10.5.8
When the data in the Data Preview tab looks like the data you want to fill your report, click OK to close
the Dataset and Query window.
Initially, the data source for CSV documents was a very simple data source proof-of-concept that showed how to
implement a custom data source. The CSV data source interface was improved when JasperReports added a
native implementation to fill a report using a CSV file.
To create a connection based on a CSV file, click the New button in the Connections/Datasources dialog box
and select File CSV data source from the data source types list to bring up the dialog box shown in Figure
10-11.
If the first line in your file contains the names of the columns, click the Get column names from the first
row of the file button and select the Skip the first line check box option. This forces JasperReports to
137
skip the first line (the one containing your column labels). In any case, the column names that are read from
the file are used instead of the declared ones, so avoid modifying the names found with the Get column
names button.
If the first line of your CSV file doesnt contain the column names, set a name for each column using the
syntax COLUMN_0, COLUMN_1, and so on.
If you define more columns than the ones available, youll get an exception at report filling time.
JasperReports assumes that, for each row, all the columns have a value (even if they are empty).
If your CSV file uses nonstandard characters to separate fields and rows, you can adjust the default setting for
separators using the Separators tab.
10.5.9
When you create a CSV data source, you must define a set of column names that is used as fields for your
report. To add them to the fields list, set your CSV data source as the active connection and open the Report
query dialog box. Open the Dataset and Query Dialog and click the Read Fields button.
138
By default, Jaspersoft Studio sets the class type of all fields to java.lang.String. If you are sure that the text
of a particular column can be easily converted to a number, a date, or a Boolean value, set the correct field type
yourself after the fields are added to your report.
The pattern used to recognize a timestamp (or date) object can be configured at the data source level by
selecting the Use custom date format check box option.
The first constructor indicates how many records to return, and the second sets the number of records to one.
By default, Jaspersoft Studio provides a pre-configured empty data source that returns a single record.
To create a new empty data source with more records:
1. Double-click One Empty Record from the Repository View.
The Data Adapter Wizard appears, with Empty rows.
Set the number or empty records that you need. Remember, whatever field you add to the report, its value is
set to null. Since this data source doesnt care about field names or types, this is a perfect way to test any
report (keeping in mind that the fields are always set to null).
3.
Click Finish.
139
5.
6.
Click Open.
Repeat for any additional files.
7.
8.
Click the Test button to check the path resolution to be certain that hibernate.cfg.xml is in the
classpath.
Currently Jaspersoft Studio works only with the first hibernate.cfg.xml file found in the classpath.
9.
140
Click Finish.
If you use the Spring framework, you can use a Spring configuration file to define your connection. In this case,
youll need to set the configuration file name and the Session Factory Bean ID.
Now that a Hibernate connection is available, use an HQL query to select the data to print. You can use HQL
in the same way that you use SQL: open the Report query dialog box and choose HQL as the query language
from the combo box at the top of the window.
When you enter an HQL query, Jaspersoft Studio tries to retrieve the available fields. According to the
JasperReports documentation, the field mappings are resolved as follows:
If the query returns one object per row, a field mapping can be one of the following:
If the objects type is a Hibernate entity or component type, the field mappings are resolved as the
property names of the entity/component. If a select alias is present, it can be used to map a field to the
whole entity/component object.
Otherwise, the object type is considered scalar, and only one field can be mapped to its value.
If the query returns a tuple (object array) per row, a field mapping can be one of the following:
A select alias. The field is mapped to the value corresponding to the alias.
A property name prefixed by a select alias and a period (.). The field is mapped to the value of the
property for the object corresponding to the alias. The type corresponding to the select alias has to be
an entity or component.
If you dont understand this field mapping information, simply accept the fields listed by Jaspersoft Studio
when the query is parsed.
Jaspersoft Studio provides a mapping tool to map objects and attributes to report fields. The objects (or
JavaBeans) available in each record are listed in the combo box on top of the object tree.
To add a field from the tree, select the corresponding node and click the Add selected field(s) button.
141
3.
4.
5.
Click Finish.
Now that a Hive connection is available, use a HiveQL query to retrieve data in your report. You can use
HiveQL the same way that you use SQL. To use a HiveQL query, open the Report Query dialog box and
choose HiveQL as the query language from the combo box at the top of the window.
When you enter a HiveQL query, Jaspersoft Studio retrieves all available fields. In the next two screens, select
the fields you want to display in your report, and how you want to group them. After defining your HiveQL
query and choosing your fields, your report is configured to receive data from your Hadoop Hive data source.
The Hive JDBC driver does not yet fully implement the JDBC specifications, and it does not yet work
correctly with the JasperReports Server metadata layer (Data Domains). If reporting against a Hive data
source and you are using JasperReports Server, use Topics rather than Domains.
142
The next method is used to set the current record into the data source. It has to return true if a new record to
elaborate exists; otherwise it returns false.
If the next method has been called positively, the getFieldValue method has to return the value of the
requested field or null. In particular, the requested field name is contained in the JRField object passed as a
parameter. Also, JRField is an interface through which it is possible to get the information associated with a
fieldthe name, description, and Java type that represents it (as mentioned previously in 10.4, Understanding
the JRDataSource Interface, on page127).
Now try writing your personalized data source. The idea is a little originalyou have to write a data source
that explores the directory of a file system and returns the found objects (files or directories). The fields you
create to manage your data source are the same as the file name, which should be named FILENAME; a flag
that indicates whether the object is a file or a directory, which should be named IS_DIRECTORY; and the file
size, if available, which should be named SIZE.
You data source should have two constructors: the first receives as a parameter the directory to scan; the second
has no parameters and uses the current directory to scan.
Once instantiated, the data source looks for the files and the directories present in the way you indicate and fill
the array files.
The next method increases the index variable that you use to keep track of the position reached in the array
files, and returns true until you reach the end of the array.
Table 10-6 Sample personalized data source
import net.sf.jasperreports.engine.*;
import java.io.*;
public class JRFileSystemDataSource implements JRDataSource
{
File[] files = null;
int
index = -1;
public JRFileSystemDataSource(String path)
{
File dir = new File(path);
if (dir.exists() && dir.isDirectory())
{
files = dir.listFiles();
}
}
public JRFileSystemDataSource()
{
this(".");
}
public boolean next() throws JRException
{
143
index++;
if (files != null && index < files.length)
{
return true;
}
return false;
}
public Object getFieldValue(JRField jrField) throws JRException
{
File f = files[index];
if (f == null) return null;
if (jrField.getName().equals("FILENAME"))
{
return f.getName();
}
else if (jrField.getName().equals("IS_DIRECTORY"))
{
return new Boolean(f.isDirectory());
}
else if (jrField.getName().equals("SIZE"))
{
return new Long(f.length());
}
// Field not found...
return null;
}
}
The getFieldValue method returns the requested file information. Your implementation does not use the
information regarding the return type expected by the caller of the method, but it assumes that the name has to
be returned as a string, the flag IS_DIRECTORY as a Boolean object, and the file size as a Long object.
The next section shows how to use your personalized data source in Jaspersoft Studio and test it.
144
This class, and in particular the static method that is called, executes all the necessary code for instancing the
data source correctly. In this case, you create a new JRFileSystemDataSource object by specifying a way to
scan the directory root ("/").
Now that you have defined the way to obtain the JRDataSource you prepared and the data source is ready to
be used, you can create the connection through which it can be used.
Create a new connection as you normally would (see Creating and Using Database JDBC Connections on
page121), then select Custom implementation of JRDataSource from the list and specify a data source
name such as TestFileSystemDataSource (or whatever name you want), as shown in Figure 10-16.
In this case, you know that the JRFileSystemDataSource provides three fields: FILENAME (String), IS_
DIRECTORY (Boolean), and SIZE (Long). After you have created these fields, insert them in the reports Detail
band.
Divide the report into two columns, and in the Column Header band, insert Filename and Size tags. Then add
two images, one representing a document and the other an open folder. In the Print when expression setting of
the Image element that is placed in the foreground, insert the expression $F{IS_DIRECTORY}, or use as your
image expression a condition like the following:
($F{IS_DIRECTORY}) ? folder.png : file.png
145
In this example, the class that instantiated the JRFileSystemDataSource was very simple. However, you can
use more complex classes, such as one that obtains the data source by calling an Enterprise JavaBean or by
calling a web service.
146
Creating a Table
Editing a Table
Table Structure
Working with Columns
147
If you choose to create an empty table, a new dataset is created and bound to the table. If you don't have an
existing dataset, that option is disabled and Create a Table using a new dataset is selected.
To create a table from a new dataset:
1. From Table Wizard - New Table click Next.
The Dataset window appears.
Name your dataset and select whether to create the dataset from a connection or data source or to create an
empty dataset. For this example, select Create new dataset from a connection or datasource. Click
Next.
The Dataset > Datasource window appears.
148
Select a data source and enter an SQL query such as: select * from orders. Click Next.
The Dataset > Fields window appears.
Using the arrow buttons, select the fields you want in your table. Click Next.
The Dataset > Group By window appears.
149
150
In this window you have the choice to use the same connection as the master report, another connection, an
empty data source, a JRDatasrouce expression or no connection or data source.
In most cases, choose Use the same connection used to fill the master report.
Choose empty data source if you want to create a table without relying on external data.
Choose Dont use any connection or datasource in the unusual case that the dataset uses a special
query executer that does not need a source to produce data.
Click Next. The Table Wizard > Table Columns window appears.
151
Using the arrow buttons, select the fields you want to use as table columns. Click Next.
The Table Wizard > Layout window appears.
152
153
1.
2.
In the Table Wizard > Dataset window, select Create a Table using an existing dataset.
Select a dataset from the drop-down.
154
detail rows.
11.2.1
The look and feel of a table can be edited by choosing an element from the Table Styles tab. To create a style,
click the Create a New Style button . The Table Wizard > Layout window opens (Figure 11-8). You can
select an existing style, which adds it to your palette, or you can create a new style and save it to your palette.
If you want the style to have a name, you must add a name in the Layout window, even for the default styles.
155
156
11.2.2
You can edit the content, style, and size of each cell or group of cells in your table. To edit table content,
double-click your table. The table opens in a separate tab in Design view.
157
11.2.3
The dataset run for the table can be edited by right-clicking the table and selecting Dataset and Query. The
Dataset and Query dialog appears, filled in with the data and query from your current table.
158
11.3.1
Table Elements
A table must have at least one column, but it can have more than one. A set of columns can be grouped into
column groups; the groups can have headers that span several columns.
Each table is divided into sections similar the main document bands:
Table header and footer, which are each printed only once.
Column header and footer, which are repeated on each page that the table spans. If there are one or more
column groups, the table can display a group header and footer section for each group, as well as for each
column.
159
Detail section that is repeated for each record of the table. Each column contains only one detail section,
and the section cannot span multiple columns.
11.3.2
Table Cells
A cell can contain any element provided by JasperReports, but since usually a cell displays only text, when an
element is dropped on a cell, Jaspersoft Studio automatically arranges the element to fit the cell size. The
elements in the cell can be arranged differently by right-clicking the cell (or an element in the cell) and
selecting Arrange Elements Vertically or Arrange Elements Horizontally. If this approach does not fit the
user requirements, the best solution is to insert a frame element in the cell and add all the required elements in
that frame.
You can delete a cell by right-clicking and choosing Delete cell. If the cell is the only defined cell in the
column, the entire column is removed. Similarly, if a cell is undefined, right-click it and select Add cell to
create the cell. An undefined cell is automatically created when the user drags an element into it (see Working
with Columns on page161).
Edit cell properties from the Properties tab:
160
The Appearance sub-tab allows you to set location, size, color, style and print details.
You can set cell padding as well as borders from the Properties > Borders tab.
Cell height defines the vertical dimension of a cell. When its value is changed, the new dimension is
propagated to all the cells in the row.
11.4.1
Column Groups
A column is composed of a set of cells, one for each section of the table. In order for a header cell to span
several columns, we have to create a column group. The group must contain one or more columns and can
contain other column groups. It also provides an additional header cell for each section of the table except for
the detail section. These new header cells span all the columns of the group.
Figure 11-22 shows a simple column and a column group. On the left is a simple column. On the right is a
column group with a header cell (the violet one) that spans the columns. This new group header cell does not
replace the table header cell or the individual column header cells; those header cells remain.
161
162
Datasets
Creating a Simple Chart
Setting Chart Properties
Spider Charts
Chart Themes
12.1 Datasets
The data represented by charts is collected when a report is generated and stored within the associated dataset.
The dataset types are as follows:
Pie
Category
Time period
Time series
XY
XYZ
High low
Value
Think of a dataset as a table. Each dataset has different columns (fields). When a new record is inserted into the
dataset, values are added to the fields.
Every report has a main dataset defined during its creation. But sometimes we need fields that are not returned
by a query from the main dataset, or the fields needed may be in a different data source. The dataset element
allows you to define many datasets inside a report, each with its own fields and data source. Every dataset is
163
independent, so its fields are separated from the ones of the main dataset, and also from the ones of the other
datasets
12.1.1
Creating a Dataset
1.
Right-click on the report root node in the outline view and choose Create Dataset:
Name your dataset, choose Create new dataset from a connection or Data Source and click Next.
The Dataset > Data Source window opens.
5.
Click Next.
The Dataset > Fields window opens.
164
Move the fields listed in the Dataset Fields box into the Fields box. Click Next.
The Dataset > Group By window opens. In this window you can choose fields by which to group, as well
as choose whether or not to use the group fields as sort fields.
7.
165
1.
2.
3.
Place the fields in the Detail band by dragging them from the Outline. This creates a small table of the
values to display in the chart.
166
From the Palette, select the Chart tool and drag it into the Summary band. When you add a new chart
element to a report, Jaspersoft Studio shows the Chart Wizard from which you can pick the chart type.
7.
8.
To configure a chart:
167
1.
Double click on the chart element. The Chart Wizard > Chart Data Configuration window opens.
The Max slices to show field is useful for charts with many slices. When set, your chart only shows the
number of slices you specify; additional values are included in a slice labeled Other.
Set this field to 10.
3.
On the Dataset tab, you can define the dataset within the context of the report.
The Reset on drop-downs allow you to periodically reset the dataset. This is useful, for example, when
summarizing data relative to a special grouping. Increment on specifies the events that determine when
new values must be added to the dataset. By default, each record of the dataset used to fill the chart
corresponds to a value printed in the chart. This behavior can be changed, forcing the engine to collect the
data for the chart at a specific time (for instance, every time the end of a group is reached).
168
Also in the Chart Data Configuration dialog, enter an expression to associate with each value in the data
source. For a Pie 3D chart, three expressions can be entered: key, value, and label.
Key expression must be a unique value to identify a slice of the pie chart. If a key value is repeated,
the label and value values previously associated with that key are overwritten. A key can never be
null.
Value expression specifies the numeric value associated with the key.
Label expression allows you to specify a label for each slice of the pie chart. This expression is
optional, and the default value is the key value.
Value: $F{orders}
Label: $F{shipcountry}
Key: $F{shipcountry}
5.
6.
Click Finish.
Save your report, and preview it to see the result:
169
In this chart, each slice represents a country, and the value of the slice represents the shipping total for that
country.
Currently, JasperReports takes advantage of only a small portion of the capabilities of the JFreeChart library.
To customize a graph, a class must be written that implements the following interface:
net.sf.jasperreports.engine.JRChartCustomizer
170
It takes a JFreeChart object and a JRChart object as its arguments. The first object is used to actually produce
the image, while the second contains all the features you specify during the design phase that are relevant to the
customize method.
Click Next.
2.
Move all the fields into the right-hand box. Click Next.
3.
4.
Right-click on each band in the outline view, and choose Delete to delete all bands except for Title and
Summary.
5.
Drag a Static Text element into the title bar, and name your report something like Employee Orders by
Month and Country.
6.
Enlarge the Summary band to 350 pixels by changing the Height entry in the Band Properties view.
171
Select the report in the Outline view, and in the Properties tab, click the Edit query, filter, and sort
options button.
The Dataset and Query dialog opens.
172
To filter data so that the chart is more readable, click the Filter Expression tab and add the following
expression:
( $F{shipcountry}.startsWith("N") || $F{shipcountry}.startsWith("M") || $F
{shipcountry}.startsWith ("U") || $F{shipcountry}.startsWith ("I") ) || $F
{shipcountry}.startsWith("A") && ( $F{shipname}.startsWith( "M" ) || $F
{shipname}.startsWith( "A" ) || $F{shipname}.startsWith( "G" ) )
5.
6.
7.
8.
Click Finish.
In the Legend category, set the drop-down menu for Show Legend to True.
3.
4.
5.
Drag a Static Text element just to the left and above the legend. Label the legend Employee Number.
Save your report. The Design view should look like the following:
173
174
Figure 12-17
3.
Select the file in which you want to store your theme, and name it. The file needs to have the extension
.jrctx.
Click Finish. The Chart Theme Designer opens.
12.5.1
JasperReports organizes a chart theme into seven sub-sections, visible in the Outline view.
175
Legend: Set whether or not to show a legend, and if so, set position, alignment, colors, frame, and font.
Plot: Set properties for label rotation, foreground, orientation, colors, image alignment, padding, grid lines,
chart outline, series stroke and colors, and display and tick label fonts.
Domain Axis: Set properties, color, and visibility for line, tick count, tick mark, tick label, tick padding,
and tick label font. Set properties, color, and visibility for label, label padding, and label font.
Range Axis: Set properties, color, and visibility for line, tick count, tick mark, tick label, tick padding, and
tick label font. Set properties, color, and visibility for label, label padding, and label font.
Any properties you set are applied to all chart types. If you want to see one of the chart types in close up, click
on that chart. Click on the close up view of the chart to return to viewing all charts.
12.5.2
You can see and edit the chart theme XML from the Source tab. However, the XML appears as one long line.
It is better to copy-and-paste it into the text editor of your choice and edit it there.
12.5.3
The JRCTX file cannot be used in a report until it is wrapped into a JasperReports extension JAR file.
To export the theme as a JAR:
1.
176
button.
2.
Enter or select the parent folder, name the file, and name your theme. Click OK.
A dialog appears, indicating that the Chart Theme was generated.
12.5.4
After you create a chart theme, you want to be able to see it in the list of themes. For that to happen, add the
theme to your classpath.
Your theme is now available in the list of themes.
177
178
All editions of Jaspersoft Studio include basic charting functionality in the form of JFree Charts. Commercial
editions provide more advanced options in the form of HTML5 charts implemented through Highcharts.
Written in pure HTML5 and JavaScript, Highcharts offer sophisticated, interactive charts that animate
automatically. Jaspersoft Studio currently supports many of the charts available in the Highcharts library.
This chapter has the following sections:
For details about charts implemented through JFreeCharts, see Working with Charts on page163.
Before you add a chart to your report, consider the best way to display your data. The following table describes
the available chart types:
179
Description
Stacked Bar. Multiple measures of a group are depicted as portions of a single bar
whose size reflects the aggregate value of the group.
Percent Bar. Multiple measures of a group are depicted as portions of a single bar of
fixed size representing 100% of the amounts for a category. Used when you have three
or more data series and want to compare distributions within categories and at the
same time display the differences between categories.
Line charts - Compare values displayed as points connected by lines
Line. Displays data points connected with straight lines, typically to show trends.
Spline. Displays data points connected with a fitted curve. Allow you to take a limited
set of known data points and approximate intervening values.
180
Icon
Description
Stacked Line. Displays series as a set of points connected by a line. Values are
represented on the y-axis and categories are displayed on the x-axis. Lines do not
overlap because they are cumulative at each point.
Stacked Spline. Displays series as a set of points connected with a fitted curve. Values
are represented on the y-axis and categories are displayed on the x-axis. Lines do not
overlap because they are cumulative at each point
Percent Line. A variation of a line chart in which each series adjoins but does not
overlap the preceding series.
Percent Spline. A variation of a spline chart in which each series adjoins but does not
overlap the preceding series.
Area charts - Compare values displayed as shaded areas. Compared to line charts, area charts
emphasize quantities rather than trends.
Area. Displays data points connected with a straight line and a color below the line;
groups are displayed as transparent overlays.
Stacked Area. Displays data points connected with a straight line and a solid color
below the line; groups are displayed as solid areas arranged vertically, one on top of
another.
Percent Area. Displays data points connected with a straight line and a solid color
below the line; groups are displayed as portions of an area of fixed sized, and arranged
vertically one on top of the another.
Area Spline. Displays data points connected with a fitted curve and a color below the
line; groups are displayed as transparent overlays.
181
Icon
Description
Stacked Area Spline. Displays a series as a set of points connected by a smooth line
with the area below the line filled in. Values are represented on the y-axis and
categories are displayed on the x-axis. Areas do not overlap because they are
cumulative at each point.
Percent Area Spline. A variation of area spline charts that present values as trends for
percentages, totaling 100% for each category.
Dual-Level Pie. A variation of pie charts that present grouped values in two concentric
circles; the inner circle represents the coarsest grouping level in the data. In Jaspersoft
Studio, note these rules about data configuration for dual-level pie charts:
Scatter and Bubble Charts - Show the extent of correlation, if any, between the values of observed
quantities.
Scatter. Displays a single point for each point in a data series without connecting the
points.
Bubble. Compares the relationships between three measures displayed on the x-y
axis. The location and size of each bubble indicates the relative values of each data
point
Multi-Axis Charts - Compare trends in two or more data sets whose numeric range differ greatly.
Multi-Axis Column. A column chart with two series and two axis ranges.
182
Icon
Description
Multi-Axis Line. A line chart with two series and two axis ranges.
Multi-Axis Spline. A spline chart with two series and two axis ranges.
Combination Charts - Display multiple data series in a single chart, combining the features of a area, bar,
column, or line charts.
Column Line. Combines the features of a column chart with a line chart.
Column Spline. Combines the features of a column chart with a spline chart.
Stacked Column Line. Combines the features of a stacked column chart with a line
chart.
Stacked Column Spline. Combines the features of a stacked column chart with a line
chart.
Time Series Charts - Illustrate data points at successive time intervals. Also called Fever Chart.
Time Series Area. Displays data points over time connected with a straight line and a
color below the line.
Time Series Area Spline. Displays data points over time connected with a fitted curve
and a color below the line.
183
Icon
Description
Time Series Line. Displays data points over time connected with straight lines.
Time Series Spline. Displays data points over time connected with a fitted curve.
Spider Charts - Display data in line or data bars arranged on a circular spider web chart. Also called a
Radar Chart.
Spider Column. Plots one or more series over multiple common quantitative variables
by providing axes for each variable arranged as spokes around a central point. The
column variation of spider charts displays values as bars that extend out from the
central point towards the edges of the circular web. The bar's length indicates the
relative value.
Spider Line. Plots one or more series over multiple common quantitative variables by
providing axes for each variable arranged as spokes around a central point. The line
variation of spider charts displays values as points arranged around the circular web.
The data points are joined by a line. Each point's distance from the central point
indicates the relative value.
Spider Area. Plots one or more series over multiple common quantitative variables by
providing axes for each variable arranged as spokes around a central point. The area
variation of spider charts is similar to the line variation, but the shape defined by the
line that connects each series' points is filled with color.
13.2.1
1.
2.
184
Choose HTML5 Charts from the Components Pro section of the Palette, and drag it into your report.
Select the type of chart you want to add. Table 13-1 can help you choose the most appropriate way to
display your information.
For this example, choose Pie chart.
185
186
Figure 13-4 HTML5 Charts Properties > Chart Data > Configuration
5.
6.
7.
8.
9.
Save and click the Preview tab to see your chart. To preview your chart in a web browser, choose XHTML
Preview from the Preview drop-down.
HTML5 charts require XHTML for web preview. The HTML preview option will be deprecated.
In an HTML preview, the chart is interactive. Hover your cursor over a slice of the pie to see the exact
number of orders.
187
13.2.2
1.
To add a title to the chart, in the Design tab, double-click the chart.
2.
3.
4.
To see fewer countries in your pie chart, select Edit Chart Properties > Chart Data > Dataset.
You can filter your data set. To do so, add a Filter expression such as:
$F{shipcountry}.startsWith("A") ||
$F{shipcountry}.startsWith ("U") ||
$F{shipcountry}.startsWith ("I") ||
$F{shipcountry}.startsWith ("S")
From the Design tab, right-click your chart and choose Edit Chart Properties.
2.
3.
Choose an appropriate type of chart. For this example, choose Bar, and click OK.
Jaspersoft Studio discards data that isn't right for the new chart type.
4.
188
Click Close.
Save and preview your report. Because it was originally designed as a pie chart, there is no label for the Yvalues.
From the Design tab, right-click and choose Edit Chart Properties.
2.
On the Chart Data > Configuration tab, there are now places to define Series and more than a single
measure.
3.
4.
5.
Create a series:
6.
Name: Year
Expression: new java.text.SimpleDateFormat(yyyy).format( $F{orderdate} )
Value Class Name: java.lang.Comparable
Order: Ascending
189
13.2.3
Creating Hyperlinks
With HTML5 charts (Highcharts) functionality added to JasperReports, using hyperlinks in charts is similar to
using JFreeCharts (regular Charts) and Fusion charts (Charts Pro). You open the chart properties, select the
Hyperlink tab, and add your link.
Because HTML5 charts are so different than other types of chart that Jaspersoft Studio supports,their chart
items (such as bars or pie section) support hyperlinks in a very different manner than other types of chart.
You must specify these link is a different manner than is done with other chart libraries. This section gives
some basic steps for defining hyperlinks for HTML5 charts; for more detailed instructions, see 3.9.1,
Creating Hyperlinks in HTML5 Charts, on page51.
1.
2.
3.
4.
5.
Click OK.
Double-click the measure Total Orders.
6.
7.
8.
Click the down arrow and choose Built-In Hyperlink Property. Close that window.
9.
Click the Hyperlink button. That provides a shortcut to the two most important properties needed to create
a hyperlink.
10. Double-click hyperlinkReference (SeriesItemHyperlink). The Add/modify property dialog opens with
some information filled in. You customize this information to the values you need.
11. Click the radio button for Use a bucket property value and type Country.url. Click OK.
12. Save and preview your report. In the HTML preview, click the bar for any country to open the Ask.com
page for that country.
To create hyperlinks that use expressions:
190
Bucket-level properties are the only place where you can create expressions to be used with your link. If
you are not using an expression, you must either use static values or reference a bucket level property.
1.
2.
Create a bucket property for that series. For example, if you are using a pie chart, the category bucket may
have a property called myUrl which contains your url built with the category value.
3.
This can be done in Edit Chart Properties > Chart Data > Data Axes > Categories.
Identify the measure to which you need to add a link.
This can be done in Edit Chart Properties > Chart Data > Data Axes > Measures.
4.
2.
3.
Any additional data series are plotted as y values correlated to the x values provided by the first series.
As a result, a scatter chart always displays one less plot than the number of data series included.
Now let's create a scatter chart that shows maximum and average freight in each city and each year.
To create the report for the chart:
1. Open a new, blank report using the Sugar CRM database and the following query:
select * from orders
Click Next.
2.
Move all the fields into the right-hand box. Click Next.
3.
4.
Right-click on each band in the outline view, and choose Delete to delete all bands except for Title and
Summary.
5.
Enlarge the Summary band to 500 pixels by changing the Height entry in the Band Properties view.
191
2.
Drag the HTML5 Charts element into the summary band, and select Scatter.
3.
In the Outline view, right click on the chart element, and choose Edit chart properties.
4.
In HTML5 Chart Properties > Chart Properties > Chart Data > Configuration create a Category with
the following:
5.
Click OK.
Create a second Category with the following:
6.
Click OK.
Add a Measure for maximum freight:
8.
Name: ShipCity
Expression: $F{shipcity}
Value Class Name: java.lang.String
Order: Ascending
Click OK.
Create a Series with the following:
7.
Name: ShipCountry
Expression: $F{shipcountry}
Value Class Name: java.lang.String
Order: Ascending
Click OK.
Add a Measure for average freight:
Click OK.
Your Chart Properties dialog should look like the following:
192
193
b.
Highlight Legend.
c.
d.
Click OK.
10. To add a border to the chart:
194
a.
Click the arrow next to Chart and highlight Borders and Plot Area.
b.
Create a border for your chart by using the arrows next to Border Width or by typing the number of
pixels.
c.
d.
Click OK.
195
Similarly, combination charts are used to display multiple data series in a single chart that combines the features
of two different charts.
In this example, we create a column spline chart that plots freight and orders per country, per year.
To create the report for the chart:
1. Open a new, blank report using the Sugar CRM database and the following query:
select * from orders
Click Next.
2.
Move all the fields into the right-hand box. Click Next.
3.
4.
Right-click on each band in the outline view, and choose Delete to delete all bands except for Title and
Summary.
5.
Enlarge the Summary band to 500 pixels by changing the Height entry in the Band Properties view.
In HTML5 Chart Properties > Chart Properties > Chart Data > Configuration create a Category with
the following:
3.
Click OK.
Create a Series with the following:
4.
Name: Year
Expression: new java.text.SimpleDateFormat ("yyyy").format( $F{orderdate} )
Value Class Name: java.lang.Comparable
Order: Ascending
Click OK.
Add a Measure for freight:
5.
Name: Country
Expression: $F{shipcountry}
Value Class Name: java.lang.String
Order: None
Click OK.
Add a second Measure for orders:
Click OK.
196
6.
7.
To see fewer countries in your chart, select Edit Chart Properties > Chart Data > Dataset.
Add a Filter expression such as:
$F{shipcountry}.startsWith("A") ||
$F{shipcountry}.startsWith ("U") ||
$F{shipcountry}.startsWith ("I")
8.
Click OK.
To change the position or layout of the legend:
9.
a.
b.
c.
Highlight Items.
d.
e. Click OK.
Save and preview your report. It should look like the following:
197
198
AND
Jaspersoft Studio provides tools to help you define report fields and create a proper query if a query language is
used to acquire the data for the report. These tools are presented in the Dataset and Query dialog.
It also provides an easy way to build SQL queries by using a drag-and-drop query builder. This allows users
who dont know SQL or just are not sure about the syntax to quickly join tables and produce complex data
filters and where conditions. SQL Builder also provides a way for skilled users to explore the database and list
the metadata such as schemas and available tables.
This chapter contains the following sections:
When working with a sub-dataset, open the dialog by right-clicking the dataset name inside the Outline view,
and selecting Dataset and Query....
199
Select a data adapter with which to configure the dataset. Usually a data adapter is selected, but it is
possible to change it if necessary.
Select a query language for the dataset being edited (which can be the main dataset or a sub-dataset used to
populate a chart or a table).
Specify the query by typing text or by using a tool, if available, designed for the selected language. A tool
is available for several languages including SQL, XPath and JSON.
Retrieve the fields from the selected Data Adapter: these can be provided directly by the Data Adapter or
by executing the query and reading the response metadata.
Add, edit, and remove fields and parameters.
Edit sort options.
Provide an expression to filter dataset records.
Preview your data, if supported by the selected data adapter.
200
Chapter 14 Using the Dataset and Query Dialog and the Query Builder
multidimensional result coming from MDX results (MDX is the query language used with OLAP and XML/A
connections): in this case each field is mapped by specifying an expression stored in the field description. For
some of languages, such as instance XPath and JSON query, the Query dialog displays a tool that simplifies the
creation of both the query and the mapping.
14.2.1
The purpose of SQL is to select data from the tables of the database. SQL allows you to join tables, so that you
can get data from more than one table at a time.
201
HAVING works in a similarly to WHERE, but it is used with aggregate functions. For example the following query
filters the records by showing only the countries with at least 40 orders:
ORDER BY specifies a set of columns to be used to sort the result set.
SELECT
count(*) as number_of_orders,
Orders.country
202
Chapter 14 Using the Dataset and Query Dialog and the Query Builder
FROM
Orders
GROUP BY
Orders.country
HAVING
count(*) > 40
The Diagram view shows the tables in the query with the relative join connections and the selected fields. This
view is very useful especially to select the relevant fields and easily edit the table joins by double-clicking the
connection arrows.
14.2.2
Selecting columns
Columns can be dragged from the database explorer to the outline view into the SELECT node or other nodes.
From there they can be used like the ORDER BY node. When selecting a column, be sure the table it comes from
is present in the FROM part of your query.
Fields can also be selected in the diagram view by selecting the relative checkbox.
Finally you can add a column by right-clicking the SELECT node in the outline view and selecting Add
Column. A new dialog prompts you to pick the column from the ones available, which are the columns present
in all tables mentioned in the FROM clause. In case the column to add is not a table column, but a more complex
expression, for instance an aggregation function like COUNT(*), add it by right-clicking the SELECT node in the
outline view and selecting Add Expression.
When a column is added to the query as part of the SELECT section, it is possible to set an alias for it by
double-clicking it.
203
14.2.3
Joining tables
Tables added to the FROM clause or dragged inside the Diagram view can be joined by selecting shared fields. In
the Diagram view the relationship can be created by dragging a column of the first table onto the column of the
table to join. This type of join can be edited by double-clicking the join arrows. Currently a single join
condition is supported.
204
Chapter 14 Using the Dataset and Query Dialog and the Query Builder
14.2.4
A WHERE clause allows you to specify the criteria that must be satisfy by each record in order to be part of the
query result. Right click the WHERE node in the outline view and select Add Condition to add a new
condition.
If you know in advance which column should be involved in the condition, you can drag this column on the
WHERE node to create the condition. In both cases the condition dialog appears.
205
When using parameters of type collection, the $X{}expressions allow you to use operators like IN and NOT IN,
which test if a value is present or not in the provided list. $X{} syntax allows also the use of other operators
like BETWEEN that can be used with numbers, Date Range and Time Range type of parameters.
14.2.5
Acquiring fields
Once the query is ready, it's time map the columns of the result set to fields of the report. When using SQL, this
is a pretty straight forward operation: by pressing the button Read Fields the query is executed, and the
metadata is read; if the query is valid and no errors occurred, for each column a field is added to the fields list
with the proper class type.
This is also a good way to test if a query contains syntactical errors. In general, if the query has been created by
using the designer, it should always be valid.
14.2.6
Data Preview
The Data Preview tab allows you to generate a ghost report having the fields map to the fields tab and current
query by using the selected Data Adapter. This tool works independently of the query language and is a good
way to debug a query or check which records the dataset returns.
206
Glossary
GLOSSARY
Ad Hoc Editor
The interactive data explorer in JasperReports Server Professional and Enterprise editions. Starting from a
predefined collection of fields, the Ad Hoc Editor lets you drag and drop fields, dimensions, and measures to
explore data and create tables, charts, and crosstabs. These Ad Hoc views can be saved as reports.
Ad Hoc Report
In previous versions of JasperReports Server, a report created through the Ad Hoc Editor. Such reports could be
added to dashboards and be scheduled, but when edited in iReport, lost their grouping and sorting. In the
current version, the Ad Hoc Editor is used to explore views which in turn can be saved as reports. Such reports
can be edited in iReport and Jaspersoft Studio without loss, and can be scheduled and added to dashboards.
Ad Hoc View
A view of data that is based on a Domain, Topic, or OLAP client connection. An Ad Hoc view can be a table,
chart, or crosstab and is the entry point to analysis operations such as slice and dice, drill down, and drill
through. Compare OLAP View. You can save an Ad Hoc view as a report in order to edit it in the interactive
viewer, schedule it, or add it to a dashboard.
Aggregate Function
An aggregate function is one that is computed using a group of values; for example, Sum or Average. Aggregate
functions can be used to create calculated fields in Ad Hoc views. Calculated fields containing aggregate
functions cannot be used as fields or added to groups in an Ad Hoc view and should not be used as filters.
Aggregate functions allow you to set a level, which specifies the scope of the calculation; level values include
Current (not available for PercentOf), ColumnGroup, ColumnTotal, RowGroup, RowTotal, Total.
Analysis View
See OLAP View.
Audit Archiving
To prevent audit logs from growing too large to be easily accessed, the installer configures JasperReports Server
to move current audit logs to an archive after a certain number of days, and to delete logs in the archive after a
certain age. The archive is another table in the JasperReports Servers repository database.
Audit Domains
A Domain that accesses audit data in the repository and lets administrators create Ad Hoc reports of server
activity. There is one Domain for current audit logs and one for archived logs.
207
Audit Logging
When auditing is enabled, audit logging is the active recording of who used JasperReports Server to do what
when. The system installer can configure what activities to log, the amount of detail gathered, and when to
archive the data. Audit logs are stored in the same private database that JasperReports Server uses to store the
repository, but the data is only accessible through the audit Domains.
Auditing
A feature of JasperReports Server Enterprise edition that records all server activity and allows administrators to
view the data.
Calculated Field
In an Ad Hoc view or a Domain, a field whose value is calculated from a user-defined formula that may include
any number of fields, operators, and constants. For Domains, a calculated field becomes one of the items to
which the Domains security file and locale bundles can apply. There are more functions available for Ad Hoc
view calculations than for Domains.
CRM
Customer Relationship Management. The practice of managing every facet of a companys interactions with its
clientele. CRM applications help businesses track and support their customers.
CrossJoin
An MDX function that combines two or more dimensions into a single axis (column or row).
Cube
The basis of most OLAP applications, a cube is a data structure that contains three or more dimensions that
categorize the cubes quantitative data. When you navigate the data displayed in an OLAP view, you are
exploring a cube.
Custom Field
In the Ad Hoc Editor, a field that is created through menu items as a simple function of one or two available
fields, including other custom fields. When a custom field becomes too complex or needs to be used in many
reports, it is best to define it as a calculated field in a Domain.
Dashboard
A collection of reports, input controls, graphics, labels, and web content displayed in a single, integrated view.
Dashboards often present a high level view of your data, but input controls can parametrize the data to display.
For example, you can narrow down the data to a specific date range. Embedded web content, such as other webbased applications or maps, make dashboards more interactive and functional.
Derived Table
In a Domain, a derived table is defined by an additional query whose result becomes another set of items
available in the Domain. For example, with a JDBC data source, you can write an SQL query that includes
complex functions for selecting data. You can use the items in a derived table for other operations on the
Domain, such as joining tables, defining a calculated field, or filtering. The items in a derived table can also be
referenced in the Domains security file and locale bundles.
Data Policy
In JasperReports Server, a setting that determines how the server processes and caches data used by Ad Hoc
reports. Select your data policies by clicking Manage > Ad Hoc Settings.
208
Glossary
Data Source
Defines the connection properties that JasperReports Server needs to access data. The server transmits queries to
data sources and obtains datasets in return for use in filling reports and previewing Ad Hoc reports.
JasperReports Server supports JDBC, JNDI, and Bean data sources; custom data sources can be defined as well.
Dataset
A collection of data arranged in columns and rows. Datasets are equivalent to relational results sets and the
JRDataSource type in the JasperReports Library.
Datatype
In JasperReports Server, a datatype is used to characterize a value entered through an input control. A datatype
must be of type text, number, date, or date-time. It can include constraints on the value of the input, for example
maximum and minimum values. As such, a datatype in JasperReports Server is more structured than a datatype
in most programming languages.
Denormalize
A process for creating table joins that speeds up data retrieval at the cost of having duplicate row values
between some columns.
Dice
An OLAP operation to select columns.
Dimension
A categorization of the data in a cube. For example, a cube that stores data about sales figures might include
dimensions such as time, product, region, and customers industry.
Domain
A virtual view of a data source that presents the data in business terms, allows for localization, and provides
data-level security. A Domain is not a view of the database in relational terms, but it implements the same
functionality within JasperReports Server. The design of a Domain specifies tables in the database, join clauses,
calculated fields, display names, and default properties, all of which define items and sets of items for creating
Ad Hoc reports.
Domain Topic
A Topic that is created from a Domain by the Data Chooser. A Domain Topic is based on the data source and
items in a Domain, but it allows further filtering, user input, and selection of items. Unlike a JRXML-based
Topic, a Domain Topic can be edited in JasperReports Server by users with the appropriate permissions.
Drill
To click on an element of an OLAP view to change the data that is displayed:
Drill down. An OLAP operation that exposes more detailed information down the hierarchy levels by
delving deeper into the hierarchy and updating the contents of the navigation table.
Drill through. An OLAP operation that displays detailed transactional data for a given aggregate measure.
Click a fact to open a new table beneath the main navigation table; the new table displays the low-level
data that constitutes the data that was clicked.
Drill up. An OLAP operation for returning the parent hierarchy level to view to summary information.
Eclipse
An open source Integrated Development Environment (IDE) for Java and other programming languages, such as
C/C++.
209
ETL
Extract, Transform, Load. A process that retrieves data from transactional systems, and filters and aggregates the
data to create a multidimensional database. Generally, ETL prepares the database that your reports will access.
The Jaspersoft ETL product lets you define and schedule ETL processes.
Fact
The specific value or aggregate value of a measure for a particular member of a dimension. Facts are typically
numeric.
Field
A field is equivalent to a column in the relational database model. Fields originate in the structure of the data
source, but you may define calculated fields in a Domain or custom fields in the Ad Hoc Editor. Any type of
field, along with its display name and default formatting properties, is called an item and may be used in the Ad
Hoc Editor.
Frame
A dashboard element that displays reports or custom URLs. Frames can be mapped to input controls if their
content can accept parameters.
Group
In a report, a group is a set of data rows that have an identical value in a designated field.
In a table, the value appears in a header and footer around the rows of the group, while the other fields
appear as columns.
In a chart, the field chosen to define the group becomes the independent variable on the X axis, while the
other fields of each group are used to compute the dependent value on the Y axis.
Hierarchy Level
In an OLAP cube, a member of a dimension containing a group of members.
Input Control
A button, check box, drop-down list, text field, or calendar icon that allows users to enter a value when running
a report or viewing a dashboard that accepts input parameters. For JRXML reports, input controls and their
associated datatypes must be defined as repository objects and explicitly associated with the report. For
Domain-based reports that prompt for filter values, the input controls are defined internally. When either type of
report is used in a dashboard, its input controls are available to be added as special content.
iReport Designer
An open source tool for graphically designing reports that leverage all features of the JasperReports Library. The
Jaspersoft iReport Designer lets you drag and drop fields, charts, and sub-reports onto a canvas, and also define
parameters or expressions for each object to create pixel-perfect reports. You can generate the JRXML of the
report directly in iReport, or upload it to JasperReports Server. iReport is implemented in NetBeans.
Item
When designing a Domain or creating a Topic based on a Domain, an item is the representation of a database
field or a calculated field along with its display name and formatting properties defined in the Domain. Items
can be grouped in sets and are available for use in the creation of Ad Hoc reports.
JasperReport
A combination of a report template and data that produces a complex document for viewing, printing, or
archiving information. In the server, a JasperReport references other resources in the repository:
210
Glossary
Information about the data source that supplies data for the report
Any additional resources, such as images, fonts, and resource bundles referenced by the report template.
The collection of all the resources that are referenced in a JasperReport is sometimes called a report unit. End
users usually see and interact with a JasperReport as a single resource in the repository, but report creators must
define all of the components in the report unit.
Level
Specifies the scope of an aggregate function in an Ad Hoc view. Level values include Current (not available for
PercentOf), ColumnGroup, ColumnTotal, RowGroup, RowTotal, Total.
JasperReports Library
An embeddable, open source, Java API for generating a report, filling it with current data, drawing charts and
tables, and exporting to any standard format (HTML, PDF, Excel, CSV, and others). JasperReports processes
reports defined in JRXML, an open XML format that allows the report to contain expressions and logic to
control report output based on run-time data.
JasperReports Server
A commercial open source, server-based application that calls the JasperReports Library to generate and share
reports securely. JasperReports Server authenticates users and lets them upload, run, view, schedule, and send
reports from a web browser. Commercial versions provide metadata layers, interactive report and dashboard
creation, and enterprise features such as organizations and auditing.
Jaspersoft ETL
A graphical tool for designing and implementing your data extraction, transforming, and loading (ETL) tasks. It
provides hundreds of data source connectors to extract data from many relational and non-relational systems.
Then, it schedules and performs data aggregation and integration into data marts or data warehouses that you
use for reporting.
Jaspersoft OLAP
A relational OLAP server integrated into JasperReports Server that performs data analysis with MDX queries.
The product includes query builders and visualization clients that help users explore and make sense of
multidimensional data. Jaspersoft OLAP also supports XML/A connections to remote servers.
Jaspersoft Studio
An open source tool for graphically designing reports that leverage all features of the JasperReports Library.
Jaspersoft Studio lets you drag and drop fields, charts, and sub-reports onto a canvas, and also define parameters
or expressions for each object to create pixel-perfect reports. You can generate the JRXML of the report directly
in Jaspersoft Studio, or upload it to JasperReports Server. Jaspersoft Studio is implemented in Eclipse.
JavaBean
A reusable Java component that can be dropped into an application container to provide standard functionality.
JDBC
Java Database Connectivity. A standard interface that Java applications use to access databases.
JNDI
Java Naming and Directory Interface. A standard interface that Java applications use to access naming and
directory services.
211
Join Tree
In Domains, a collection of joined tables from the actual data source. A join is the relational operation that
associates the rows of one table with the rows of another table based on a common value in given field of each
table. Only the fields in a same join tree or calculated from the fields in a same join tree may appear together in
a report.
JPivot
An open source graphical user interface for OLAP operations. For more information, visit
http://jpivot.sourceforge.net/.
JRXML
An XML file format for saving and sharing reports created for the JasperReports Library and the applications
that use it, such as iReport Designer and JasperReports Server. JRXML is an open format that uses the XML
standard to define precisely all the structure and configuration of a report.
MDX
Multidimensional Expression Language. A language for querying multidimensional objects, such as OLAP (On
Line Analytical Processing) cubes, and returning cube data for analytical processing. An MDX query is the
query that determines the data displayed in an OLAP view.
Measure
Depending on the context:
In a report, a formula that calculates the values displayed in a tables columns, a crosstabs data values, or a
charts dependent variable (such as the slices in a pie).
In an OLAP view, a formula that calculates the facts that constitute the quantitative data in a cube.
Mondrian
A Java-based, open source multidimensional database application.
Mondrian Connection
An OLAP client connection that consists of an OLAP schema and a data source. OLAP client connections
populate OLAP views.
Mondrian Schema Editor
An open source Eclipse plug-in for creating Mondrian OLAP schemas.
Mondrian XML/A Source
A server-side XML/A source definition of a remote client-side XML/A connection used to populate an OLAP
view using the XML/A standard.
MySQL
An open source relational database management system. For information, visit http://www.mysql.com/.
Navigation Table
The main table in an OLAP view that displays measures and dimensions as columns and rows.
ODBO Connect
Jaspersoft ODBO Connect enables Microsoft Excel 2003 and 2007 Pivot Tables to work with Jaspersoft OLAP
and other OLAP servers that support the XML/A protocol. After setting up the Jaspersoft ODBO data source,
business analysts can use Excel Pivot Tables as a front-end for OLAP analysis.
212
Glossary
OLAP
On Line Analytical Processing. Provides multidimensional views of data that help users analyze current and past
performance and model future scenarios.
OLAP Client Connection
A definition for retrieving data to populate an OLAP view. An OLAP client connection is either a direct Java
connection (Mondrian connection) or an XML-based API connection (XML/A connection).
OLAP Schema
A metadata definition of a multidimensional database. In Jaspersoft OLAP, schemas are stored in the repository
as XML file resources.
OLAP View
Also called an analysis view. A view of multidimensional data that is based on an OLAP client connection and
an MDX query. Unlike Ad Hoc views, you can directly edit an OLAP views MDX query to change the data
and the way they are displayed. An OLAP view is the entry point for advanced analysis users who want to
write their own queries. Compare Ad Hoc View.
Organization
A set of users that share folders and resources in the repository. An organization has its own user accounts, roles,
and root folder in the repository to securely isolate it from other organizations that may be hosted on the same
instance of JasperReports Server.
Organization Admin
Also called the organization administrator. A user in an organization with the privileges to manage the
organizations user accounts and roles, repository permissions, and repository content. An organization admin
can also create suborganizations and mange all of their accounts, roles, and repository objects. The default
organization admin in each organization is the jasperadmin account.
Outlier
A fact that seems incongruous when compared to other members facts. For example, a very low sales figure or a
very high number of helpdesk tickets. Such outliers may indicate a problem (or an important achievement) in
your business. The analysis features of Jaspersoft OLAP excel at revealing outliers.
Parameter
Named values that are passed to the engine at report-filling time to control the data returned or the appearance
and formatting of the report. A report parameter is defined by its name and type. In JasperReports Server,
parameters can be mapped to input controls that users can interact with.
Pivot
To rotate a crosstab such that its row groups become column groups and its column groups become rows. In the
Ad Hoc Editor, pivot a crosstab by clicking
Pivot Table
A table with two physical dimensions (for example, X and Y axis) for organizing information containing more
than two logical dimensions (for example, PRODUCT, CUSTOMER, TIME, and LOCATION), such that each
physical dimension is capable of representing one or more logical dimensions, where the values described by
the dimensions are aggregated using a function such as SUM. Pivot tables are used in Jaspersoft OLAP.
213
Properties
Settings associated with an object. The settings determine certain features of the object, such as its color and
label. Properties are normally editable. In Java, properties can be set in files listing objects and their settings.
Report
In casual usage, report may refer to:
Report Run
An execution of a report, Ad Hoc view, or dashboard, or a view or dashboard designer session, it measures and
limits usage of Freemium instances of JasperReports Server. The executions apply to resources no matter how
they are run (either in the web interface or through the various APIs, such as REST web services). Users of our
Community Project and our full-use commercial licenses are not affected by the limit. For more information,
please contact sales@jaspersoft.com.
Repository
The tree structure of folders that contain all saved reports, dashboards, OLAP views, and resources. Users access
the repository through the JasperReports Server web interface or through iReport. Applications can access the
repository through the web service API. Administrators use the import and export utilities to back up the
repository contents.
Resource
In JasperReports Server, anything residing in the repository, such as an image, file, font, data source, Topic,
Domain, report element, saved report, report output, dashboard, or OLAP view. Resources also include the
folders in the repository. Administrators set user and role-based access permissions on repository resources to
establish a security policy.
Role
A security feature of JasperReports Server. Administrators create named roles, assign them to user accounts, and
then set access permissions to repository objects based on those roles. Certain roles also determine what
functionality and menu options are displayed to users in the JasperReports Server interface.
Schema
A logical model that determines how data is stored. For example, the schema in a relational database is a
description of the relationships between tables, views, and indexes. In Jaspersoft OLAP, an OLAP schema is the
logical model of the data that appears in an OLAP view; they are uploaded to the repository as resources. For
Domains, schemas are represented in XML design files.
Schema Workbench
A graphical tool for easily designing OLAP schemas, data security schemas, and MDX queries. The resulting
cube and query definitions can then be used in Jaspersoft OLAP to perform simple but powerful analysis of
large quantities of multi-dimensional data stored in standard RDBMS systems.
214
Glossary
Set
In Domains and Domain Topics, a named collection of items grouped together for ease of use in the Ad Hoc
Editor. A set can be based on the fields in a table or entirely defined by the Domain creator, but all items in a
set must originate in the same join tree. The order of items in a set is preserved.
Slice
An OLAP operation for filtering data rows.
SQL
Structured Query Language. A standard language used to access and manipulate data and schemas in a
relational database.
System Admin
Also called the system administrator. A user who has unlimited access to manage all organizations, users, roles,
repository permissions, and repository objects across the entire JasperReports Server instance. The system admin
can create root-level organizations and manage all server settings. The default system admin is the superuser
account.
Topic
A JRXML file created externally and uploaded to JasperReports Server as a basis for Ad Hoc reports. Topics are
created by business analysts to specify a data source and a list of fields with which business users can create
reports in the Ad Hoc Editor. Topics are stored in the Ad Hoc Components folder of the repository and
displayed when a user launches the Ad Hoc Editor.
Transactional Data
Data that describe measurable aspects of an event, such as a retail transaction, relevant to your business.
Transactional data are often stored in relational databases, with one row for each event and a table column or
field for each measure.
User
Depending on the context:
A person who interacts with JasperReports Server through the web interface. There are generally three
categories of users: administrators who install and configure JasperReports Server, database experts or
business analysts who create data sources and Domains, and business users who create and view reports and
dashboards.
A user account that has an ID and password to enforce authentication. Both people and API calls accessing
the server must provide the ID and password of a valid user account. Roles are assigned to user accounts to
determine access to objects in the repository.
View
Several meanings pertain to JasperReports Server:
215
WCF
Web Component Framework. A low-level GUI component of JPivot. For more information, see
http://jpivot.sourceforge.net/wcf/index.html.
Web Services
A SOAP (Simple Object Access Protocol) API that enables applications to access certain features of
JasperReports Server. The features include repository, scheduling and user administration tasks.
XML
eXtensible Markup language. A standard for defining, transferring, and interpreting data for use across any
number of XML-enabled applications.
XML/A
XML for Analysis. An XML standard that uses Simple Object Access protocol (SOAP) to access remote data
sources. For more information, see http://www.xmla.org/
XML/A Connection
A type of OLAP client connection that consists of Simple Object Access Protocol (SOAP) definitions used to
access data on a remote server. OLAP client connections populate OLAP views.
216
INDEX
Ad Hoc views
localizing 84
Add selected field(s) 141
data sources
JRDataSource 144
data sources
connections 120
CSV 137
exporting 146
Hadoop
Hive 141
Hibernate 140
importing 146
importing and exporting 146
JavaBeans 119-120, 128-129
JRDataSource 25, 119, 142
JREmptyDataSource 139
JRXmlDataSource 134
types 119-120
XML 130
datasets
for Table component 147, 158
in charts 163
types 163
DATASOURCE 103
declaring objects 85
drivers 122-124
B
Beans. See Java. 129
C
charts
datasets 163
themes 174
types 163
columns
column groups 159, 161
in Table component 159, 161
CONNECTION 103
connections
creating 121
JDBC 121
See data sources 140
types 120
Connections/Datasources 137
CSV 137
Add node as field 133
comma-separated values 120
Connections/Datasources 137
PersonBean 129
E
EJBQL 120
elements
Table component 160
217
extensions 32
fields 86
Java types vs. SQL types 125
G
getFieldValue 144
Groovy 26
groups
column groups 159, 161
H
Hibernate 140
HQL 120, 140
hyperlinks 44
hypertext. See hyperlinks. 44
J
JasperReport
extensions 32
Java
JavaBeans 119-120, 128-129
JavaScript 26
JDBC connections 121
JDBC driver 123
JDBC drivers 122, 124
JFreeChart 170
JRChart 171
JRDataSource 25, 119, 127, 142, 144
JREmptyDataSource 139
JRExporter 26
JRFileSystemDataSource 145-146
JRViewer 26
JRXML files 12, 21
field names in 84
JRXmlDataSource 134
L
languages
Java types vs. SQL types 125
MDX 136
XPath 130
locales
in Ad Hoc views 84
218
outputs 26
P
parameters 109
PARAMETERS 103
Pie 3D 165
printing 90
Q
queries 124
results 126
query languages
and data sources 119
EJBQL 120
HQL 120, 141
types 87
XPath 133
R
records, sorting and filtering 126
reports
charts 163
output files 26
Report Wizard 121
resources
and Ad Hoc views 84
runs
dataset 158
S
scripting languages 26
Spring 141
SQL queries
field types 125
fields 86
results 126
specifying 124
subdatasets
for Table component 147, 158
subreports
and XML data sources 133
Index
T
Table component 147
Test button 124
themes 174
Topics
field names in 84
localization 84
X
XML
data sources 130
report file 21
XML/A 135-136
XPath 130, 133
219
220