09 - Subtotalen
Je kunt nu data groeperen met een GroupHeader. Maar groepering wordt pas echt nuttig als je per groep een subtotaal kunt tonen — het totaal aantal, het totaalbedrag of het gemiddelde binnen die groep.
In sessie 3 heb je eenvoudige expressies geleerd. Nu voegen we daar aggregaatfuncties aan toe: functies die rekenen over meerdere rijen.
Aggregaatfuncties
Een aggregaatfunctie berekent een waarde over een reeks rijen in een databand. De belangrijkste:
| Functie | Wat het doet | Voorbeeld |
|---|---|---|
Sum() | Telt alle waarden op | {Sum(Regels.Aantal)} |
Count() | Telt het aantal rijen | {Count()} |
Avg() | Berekent het gemiddelde | {Avg(Regels.PrijsPerStuk)} |
Min() | Geeft de kleinste waarde | {Min(Regels.PrijsPerStuk)} |
Max() | Geeft de grootste waarde | {Max(Regels.PrijsPerStuk)} |
Subtotaal in de GroupFooter
Een subtotaal is een aggregaat dat alleen de rijen binnen de huidige groep telt. Je plaatst het in de GroupFooter:
- Voeg een tekstvak toe in de GroupFooter
- Typ de expressie, bijvoorbeeld:
Subtotaal: {Sum(Producten.Aantal)}
Stimulsoft berekent de som automatisch over alleen de rijen in de huidige groep. Bij de groep “Meel” telt hij alleen de meel-producten, bij “Suiker” alleen de suiker-producten.
Concreet voorbeeld
Data:
| Product | Categorie | Aantal |
|---|---|---|
| Tarwebloem | Meel | 50 |
| Roggebloem | Meel | 20 |
| Speltbloem | Meel | 15 |
| Kristalsuiker | Suiker | 100 |
| Vanillesuiker | Suiker | 25 |
Rapport met groepering op Categorie en subtotaal in de GroupFooter:
── Meel ─────────────────────
Tarwebloem 50
Roggebloem 20
Speltbloem 15
Subtotaal: 85
── Suiker ───────────────────
Kristalsuiker 100
Vanillesuiker 25
Subtotaal: 125 Eindtotaal in de ReportSummary
Naast subtotalen per groep wil je vaak ook een eindtotaal over alle groepen heen. Dat plaats je in de ReportSummary:
Eindtotaal: {Sum(Producten.Aantal)} Dezelfde functie Sum(), maar nu in de ReportSummary in plaats van de GroupFooter. Stimulsoft weet op basis van de sectie of het een subtotaal (per groep) of een eindtotaal (over alles) is.
Combineren van subtotaal en berekening
Je kunt aggregaatfuncties combineren met berekeningen:
{Sum(Regels.Aantal * Regels.PrijsPerStuk)} Dit berekent per rij het regeltotaal en telt die op tot een subtotaal. In de GroupFooter geeft dit het subtotaalbedrag per groep.
Praktijktip: gebruik voorberekende velden
In ReflexBlue is het regelbedrag (aantal x prijs) al voor je uitgerekend in het veld Amount. Gebruik bij voorkeur {Sum(Lines.Amount)} in plaats van zelf te vermenigvuldigen.
Waarom? Het veld Amount houdt rekening met afrondingsregels: eerst wordt de regel afgerond, dan pas opgeteld. Als je zelf Aantal * Prijs berekent in de Sum, kan het eindresultaat afwijken door afrondingsverschillen.
Samenvatting
- Aggregaatfuncties rekenen over meerdere rijen:
Sum(),Count(),Avg(),Min(),Max() - In de GroupFooter berekent een aggregaat het subtotaal per groep
- In de ReportSummary berekent dezelfde functie het eindtotaal over alle rijen
- Combineer aggregaten met berekeningen:
{Sum(Aantal * Prijs)}