def groupByData = api.newMatrix()
//Definition of result matrix (columns, rows).
.withColumns('TextColumn1', 'TextColumn2', 'NumericColumn3', 'NumericColumn4')
.withRows(entries)
//Property `.withGroupBy` defines that the `TextColumn1` and `NumericColumn3` are used for group by (The order is important).
.withGroupBy(['TextColumn1', 'NumericColumn3'])
//Property `.withColumnAggregation` defines that the values for subtotal rows are based on the group by definition (`NumericColumn3`) and are to be calculated as SUM. This definition is optional. When not used, like e.g. for TextColumn1, there will be no aggregation for the `TextColumn1`.
.withColumnAggregation('NumericColumn3', SUM)
//Property `.calculateGroupByData` is an end statement for group definition. This statement is only used together with `.withColumnAggregation`.
.calculateGroupByData() |