Aggregaties (Power BI)
Wat zijn aggregaties in Power BI?
Aggregaties in Power BI zijn vooraf samengevatte tabellen die naast een detailtabel liggen. Zo worden veelgestelde vragen in een rapport beantwoord uit die kleine samenvatting, in plaats van dat de engine elke rij moet doorlopen. Vraagt een visual iets dat de samenvatting al bevat, zoals de totale omzet per maand, dan leest de engine de aggregatie. Heeft de visual toch de losse rijen nodig, zoals de lijnen op één factuur, dan valt hij terug op de detailtabel.
Het idee is hetzelfde als dat van een winkelier die aan de kassa een lopend totaal bijhoudt in plaats van bij elke vraag de hele lade opnieuw te tellen. De details blijven bestaan voor wie ze nodig heeft, maar het dagelijkse antwoord komt uit een veel kleiner getal dat snel af te lezen is.
Dit telt het meest voor grote modellen die op DirectQuery draaien, waar de detailtabel in de brondatabank blijft staan en elke vraag daar live naartoe gaat. Een aggregatie geeft zulke modellen een snelle sluiproute in het geheugen voor alle vragen die geen rijdetail nodig hebben.
Wanneer helpen aggregaties?
Heel grote DirectQuery-tabellen. Een feitentabel met honderden miljoenen of miljarden rijen is te groot om volledig te importeren, maar de meeste dashboards vragen enkel totalen per maand, regio of productcategorie. Een aggregatie beantwoordt die zonder de bron aan te spreken.
Trage brondatabanken. Staat het onderliggende warehouse onder druk of is het gewoon niet snel in analytische vragen, dan haalt een geïmporteerde aggregatie het dagelijkse rapporteringsverkeer eraf.
Detail en samenvatting door elkaar. Directie kijkt naar trends op hoog niveau, analisten graven in één transactie. Aggregaties bedienen de samenvatting snel en laten de detailvragen doorvallen naar de bron.
Minder capaciteitskost. Minder en kleinere vragen op de bron betekenen minder druk op zowel de databank als je Power BI-capaciteit.
Hoe werken aggregaties?
Je maakt een aggregatietabel op een gekozen niveau, bijvoorbeeld verkoop gegroepeerd per datum, productcategorie en winkel. Elke kolom in de aggregatie koppel je ofwel aan een groepeerveld, ofwel aan een samengevatte waarde zoals een som of een aantal. Power BI bewaart die tabel en gebruikt hem automatisch.
Wat aggregaties nuttig maakt, is dat de engine er zelf naar grijpt. De rapportenbouwer schrijft gewone measures en bouwt gewone visuals, en wijst niets met de hand naar de aggregatie. Op het moment van de vraag kijkt de engine of de aggregatie het antwoord kan geven op het niveau dat gevraagd wordt. Kan dat, dan komt het antwoord uit de samenvatting. Vraagt de visual meer detail dan de aggregatie bevat, dan negeert de engine de samenvatting en gaat hij naar de detailtabel.
Een geïmporteerde aggregatie bovenop een DirectQuery-detailtabel maakt van je model een composite model, want het mengt nu opslagmodi. De aggregatie hou je meestal in Import-modus, zodat ze in de VertiPaq-engine in het geheugen leeft en in een fractie van een seconde antwoordt, terwijl de detailtabel in DirectQuery blijft.
Je kan ook meerdere aggregaties op verschillende niveaus stapelen en elk een volgorde meegeven. De engine probeert eerst de samenvatting met de hoogste voorrang, dan een grovere, en bereikt de detailtabel pas als geen enkele samenvatting past.
Zelf ingestelde en automatische aggregaties
Er zijn twee manieren om aan aggregaties te komen. Zelf ingestelde aggregaties ontwerp je met de hand: je kiest het niveau, bouwt de tabel en koppelt elke kolom. Dat geeft volledige controle en past bij teams die hun vraagpatronen en hun datamodel goed kennen.
Automatische aggregaties nemen een andere weg. Ze gebruiken machine learning om te volgen welke vragen op een DirectQuery-model afkomen, en bouwen en onderhouden zelf een aggregatiecache in het geheugen, zonder dat je een niveau bepaalt. Ze draaien op hetzelfde onderliggende mechanisme als de zelf ingestelde variant en stemmen zich na verloop van tijd bij naarmate de vraagpatronen wijzigen. De afweging is minder controle in ruil voor veel minder modelleerwerk.
Waar moet je op letten bij het gebruik van aggregaties?
De samenvatting moet veel kleiner zijn dan het detail. Microsoft raadt aan dat een aggregatie minstens tien keer minder rijen bevat dan de tabel die ze samenvat. Heeft je detailtabel een miljard rijen, hou de aggregatie dan onder de honderd miljoen. Een samenvatting die bijna even groot is als het detail kost je geheugen en verversingstijd zonder veel snelheid op te leveren.
Enkel vragen op of boven het aggregatieniveau profiteren. Bouw je een aggregatie per maand maar filteren de meeste rapporten per dag, dan valt de engine steeds door naar de bron en blijft de samenvatting ongebruikt. Stem het niveau af op hoe mensen echt bevragen.
De samenvatting in lijn houden. Een geïmporteerde aggregatie is een kopie in cache, dus ze is maar zo vers als haar laatste verversing. Beweegt het detail bijna in real time terwijl de aggregatie 's nachts ververst, dan kunnen de twee een tijd van elkaar verschillen. Plan het verversingsritme rond hoe vers de samenvatting moet zijn.
Hybride tabellen ondersteunen geen aggregaties. Een feitentabel die je opsplitst in een import- en een DirectQuery-partitie kan er niet ook nog een aggregatie bij dragen, dus kies per tabel één aanpak in plaats van beide te combineren.