The database entry departmentEmployeesGrouping.xre shows how to use the "group by" feature. The example takes as input a list of employees and groups them by status (in the test file there are 2 status, active and inactive).
For grouping 2 areas are required,
one group header and one group detail:
- The group header must contain the value use for grouping in the "XML
group by" property. In this example the status element. You must also
set the value for "XML Node", these are the nodes you will be
grouping, in this case persons.
In the group header you can output the value of the element you are grouping by (in this case status).
Group detail areas have the following restrictions:
- the value for the XML Node property will be inherited from the header.
- the XML Group by property may not be used.
Note nested groups are not supported.
The example departmentEmployeesGrouping_footer.xre shows how to create group footers. Group footers are used to show total fields of the values in the group for each value being grouped. In the example the group footer is used to show the total number of employees for each status.
Group footers have to be implemented as follow:
- create a new area placed after the group detail area. In the example
the footer area is the "detail 2" area.
- The footer area must have as "super area" the "group header". In our
example the super area of "detail 2" is "detail 1" which is the group
- If you want to count or sum the fields of the current group you use
an xpath expression like this one:
count(/departments/department/person[status = current()/status])
this means, count all persons (/departments/department/person) whose status has the same value as the current's group status. Note we are grouping by status so when this is executed for the "active" employees status, it will count all employees whose status is "active".
Let's assume each person has a child element called "salary", we could sum all salaries of the employees in the current status like this:
sum(/departments/department/person[status = current()/status]/salary)
this means select the salary of all employee whose status is the same status as the current group and then sum all selected salaries.