Aggregate in reports

Axpert 11

TStructs (Forms)



Axpert Jobs

Axpert Cards

HTML Plug-ins

Users & Roles


Axpert API

Application Var/Params

Publish Axpert Apps

Axpert Mobile






Aggregate in Axfast reports

  1. Aggregate Functions
  2. Page and report total
  3. Inserting Aggregate functions

Aggregate Functions

In most cases group reports need to display some summary information (such as: “total of a group”, “number of group elements” etc). FastReport provides aggregate functions for calculating aggregate values over some data span. The aggregate functions are:
SUM – returns the total of an expression
MIN – returns the minimal value of an expression
MAX – returns the maximal value of an expression
AVG – returns the average value of an expression
COUNT – returns the number of lines (rows) in the data span

The syntax of all aggregate functions (except COUNT) is similar to that of the SUM function:
SUM(expression, band, flags)
SUM(expression, band)

The parameters are:
expression – the expression to be calculated
band – the name of the data band within which the calculation is performed
flags – a bit field, with values
  1: include invisible bands in calculation
  2: accumulate the aggregate as a running total
  (do not reset the aggregate when the current data span resets)
  3: (both of the two previous options)
An expression is the only mandatory parameter, the other two are optional. Nevertheless, to avoid making mistakes it is recommended that band parameters are always given.
The “COUNT” aggregate function has the following syntax:
COUNT(band, flags)
where the parameters have the same meaning as above.
There is a general rule for all aggregate functions: an aggregate can only be calculated over a data band and can only be used in that band’s footer, which can be one of the footer, page footer, group footer, column footer or report footer (summary band).

How do aggregate functions work? We will look at this using our group report example. Let’s add some new elements to the report:
Agile developer lowcode Axfast Aggregate
The Group.“ItemsTotal” field in the data band displays the current order total. Place a “Text” object in the group footer containing the aggregate SUM shown above. It will display the total of all orders placed by the given customer. Using a calculator, we can check that the result is correct:
Agile developer lowcode Axfast Aggregate

Aggregate functions work like this: before outputting a report, FastReport scans the “Text” object contents to find any aggregate functions. The aggregates found are linked to the data bands in their parameters (in our example “SUM” is linked to the “MasterData1” band). During report output (when the data band is displayed) the values of the aggregates linked to it are calculated. In our case the Group.“ItemsTotal” field values are accumulated. Once the group footer displaying the aggregate has been output the aggregate value is reset to zero, and the cycle is repeated for the next group, and so on.

What is the purpose of the optional “Flags” parameter in aggregate functions? Reports may have some, or all, of the data bands hidden. We may, however, need to calculate aggregates over all the data bands, whether visible or not. In our example, set the “Visible” property of the data band to false, so preventing its display. To still have this hidden data band included in the calculations, we have to set the third, optional parameter in the function call to figure 1, i.e.:
This produces a report looking like this:
Agile developer lowcode Axfast Aggregate

When the “Flags” parameter value is set to 2, the aggregate value is not reset immediately after it is displayed: the aggregate becomes a “running” calculation for each successive output. Let’s modify the function call as shown here:
The value “3” is a bit combination of “1” and “2”, meaning that we need to include the invisible bands, without resetting the total after each group. As a result, we have:
Agile developer lowcode Axfast Aggregate

Page and report total

Quite often, we need to display summary totals for a page or for a whole report. We can use the aggregate functions in this situation as well. We’ll show this by making some changes to our example:
Agile developer lowcode Axfast Aggregate
As you can see, we have added a “Report Summary” band containing a “Text” object with the aggregate SUM to both the “Report Summary” band and the “Page Footer” band. That is all that is needed:
Agile developer lowcode Axfast Aggregate