Nested aggregations in Reporting Services

Als je al wat langer met een bepaald product werkt, vergeet je wel eens nieuwe mogelijkheden te gebruiken die er in recentere versies aan zijn toegevoegd. Zo zag ik onlangs iemand vragen hoe hij een gemiddelde over subtotalen in een SSRS rapport kon bepalen. Sinds Reporting Services 2008 R2 is dat heel gemakkelijk. Die versie introduceerde namelijk nested aggregations. Hierdoor kun je verschillende aggregatiefuncties nesten, iets wat tot en met Reporting Services 2008 niet kon. Met deze feature kun je gemakkelijk een rapport als het onderstaande maken:

image

In het rapport moet een jaartotaal getoond worden als de gemiddelde maandomzet. In de eerste foutieve regel is dit gedaan met de expressie “=Avg(Fields!Omzet)”. Dit gaat fout omdat de maandcijfers al getotaliseerd zijn. Het getoonde rapport is namelijk opgebouwd uit detailcijfers die gegroepeerd zijn naar maand en jaar. Met de gegeven expressie, wordt het gemiddelde van de details bepaald, niet van de maandtotalen. Met een ‘nested aggregation’ kun je dit eenvoudig oplossen met de volgende expressie: “=Avg(Sum(Fields!Omzet, “Maand”)). Die expressie geeft de juiste uitkomst.

Niet alle aggregatiefuncties kunnen genest worden. De functies Aggregate, RunningValue en Previous kunnen niet worden genest. Zie voor meer informatie: