JasperReports allows you to implement a nested hierarchy of groups in a report. A hierarchy means that a group will contain subgroups.
Subgroups are useful when you want to design a report with multiple levels of logical grouping. For example, a report showing all customer invoices for a particular month may contain a large number of records. You can segregate the records with customer names; that is, all invoices of a particular customer will be grouped together. This is one level of logical grouping.
Now you can introduce another level of logical grouping by further segregating all invoices of a particular customer into subgroups based on products sold to a customer. This will become the second level of logical grouping.
This recipe demonstrates how to design a report with two levels of logical grouping.
Refer to the installPostgreSQL.txt
file included in the source code download for this chapter to install and run PostgreSQL, which should be up and running before you proceed. The source code for this chapter also includes a file named copySampleDataIntoPGS.txt
, which helps you create a database named jasperdb2
and copy sample data for this recipe into the database.
GroupInGroup.jrxml
file from the Task5
folder in the source code for this chapter. (This is the final form of the recipe Inserting a heading for a group of records of this chapter.) The Designer tab of iReport shows a report with a main title Monthly Customer Invoices, as shown in the following screenshot: Product
in the Group name and select ProductName Field in the Group by the following report object: option, as shown in the following screenshot: ORDER BY "CustomerName"
and type , "ProductName"
. Click the OK button to dismiss the dialog, as shown in the following screenshot: ProductName
text field component from the Detail 1 section of your report and right-click on it and select the Copy option from the menu, as shown in the following screenshot: ProductName
text field component will be generated in the section. Align the text field component to the top-middle position in the Product Group Header 1 section, as shown in the following screenshot:The nested group that you formed in this recipe is similar to the group described in the Inserting a heading for a group of records recipe of this chapter. The only difference is that the nested group formed in this recipe is based on product names, whereas grouping in the original (Inserting a heading for a group of records) recipe is based on customer names. This recipe actually fits product name grouping as a nested group inside customer name grouping.
You can learn how the grouping works from the earlier Inserting a heading for a group of records recipe.
18.118.139.224