Afleidingsregel
Een afleidingsregel legt uit hoe een nieuwe waarde wordt berekend of bepaald uit bestaande data. Ze maakt businesslogica achter velden, metr...
Lees meerVertiPaq is de in-memory engine achter importmodellen in Power BI en Analysis Services Tabular. Ze slaat data kolom per kolom gecomprimeerd op in het geheugen en beantwoordt queries zonder de bron te raken. Hoe minder unieke waarden per kolom, hoe kleiner en sneller je model.
VertiPaq is de opslag- en query-engine die onder elk importmodel in Power BI draait, en onder Analysis Services Tabular. Bij een refresh kopieert ze je data naar het geheugen, kolom per kolom, in sterk gecomprimeerde vorm. Elke DAX-query die daarna binnenkomt, wordt beantwoord vanuit die kopie in het geheugen, zonder de bron nog aan te raken.
Je ziet de naam zelden in de interface, maar VertiPaq bepaalt veel van wat je dagelijks merkt: waarom je refresh plots faalt op geheugen, en waarom het ene model van 50 miljoen rijen 300 MB weegt en het andere 3 GB.
Het verschil met een klassieke database zit in de richting van de opslag. Een operationele database bewaart data per rij: handig om één order op te zoeken of aan te passen. VertiPaq bewaart data per kolom. Voor een analysevraag zoals "omzet per maand" heeft de engine dan maar twee kolommen nodig in plaats van veertig, en die kolommen staan al klaar in het geheugen.
Microsoft geeft aan dat een compressie van ongeveer tien op één haalbaar is: 10 GB brondata wordt ongeveer 1 GB in het model. Geen garantie, wel een realistische orde van grootte.
Kolomgewijze opslag comprimeert zo goed omdat waarden binnen één kolom sterk op elkaar lijken. Een kolom "Land" op tien miljoen orderlijnen bevat misschien maar drie unieke waarden. Daar spelen de encodings van VertiPaq op in.
Dictionary encoding
Voor tekst en andere niet-numerieke data bouwt VertiPaq per kolom een woordenboek van unieke waarden. Elke waarde krijgt een nummer, en in de eigenlijke kolomopslag staan alleen nog die nummers. Voor de landkolom hierboven: een woordenboek met drie entries, en tien miljoen kleine verwijzingen in plaats van tien miljoen keer een tekstwaarde.
Value encoding
Gehele getallen kunnen zonder woordenboek opgeslagen worden. VertiPaq zoekt het kleinste getal in de kolom en bewaart elke andere waarde als verschil ten opzichte van dat minimum. Kleinere getallen vragen minder bits. Dat is meteen waarom een geheel getal bijna altijd zuiniger is dan dezelfde waarde als tekst.
Run-length encoding
Staat dezelfde waarde vele rijen na elkaar, dan bewaart de engine ze één keer, samen met een teller. "BE, vier miljoen keer na elkaar" wordt één entry met een aantal erbij, in plaats van vier miljoen aparte verwijzingen. Hoe meer herhaling, hoe beter dit werkt.
Alle drie die technieken steunen op hetzelfde: herhaling. En herhaling is precies wat verdwijnt wanneer een kolom veel unieke waarden bevat, dus een hoge cardinaliteit heeft.
Bij zo'n kolom groeit het woordenboek mee met de data. SQLBI, de praktijkreferentie rond VertiPaq en DAX, beschrijft dat bij kolommen met hoge cardinaliteit het woordenboek meer dan 90 procent van de totale kolomkost kan uitmaken. De compressie doet dan nog nauwelijks iets.
De klassieke boosdoeners:
Datetime-kolommen met seconden of milliseconden. Elke rij is bijna uniek, dus elk tijdstip belandt apart in het woordenboek.
GUID's en lange technische sleutels als tekst. Per definitie uniek, per definitie slecht comprimeerbaar.
Vrije tekstvelden. Commentaarvelden en omschrijvingen die je toch nooit in een visual toont.
Hoe hard dit doorweegt, toont een voorbeeld van SQLBI: een transactienummer-kolom met 100 miljoen unieke waarden woog bijna 3 GB in het model. Door die kolom te splitsen in twee kolommen met elk veel minder unieke waarden zakte dat naar minder dan 200 MB, meer dan 90 procent kleiner, voor exact dezelfde informatie.
Die mechaniek vertaalt zich in een concreet lijstje. Niets ervan vraagt extra tooling, alleen keuzes in Power Query of aan de bron.
Laad alleen kolommen die je gebruikt. Elke kolom kost geheugen, ook als geen enkele visual ze toont. Weglaten is de goedkoopste optimalisatie die er bestaat.
Splits datum en tijd. Eén datetime-kolom met seconden heeft miljoenen unieke waarden. Een datumkolom heeft er 365 per jaar, en een tijdkolom maximaal 86.400 per dag. Twee kleine woordenboeken in plaats van één gigantisch.
Rond af wat je toch niet toont. Tijd op minuten in plaats van milliseconden, bedragen op twee decimalen. Minder unieke waarden, kleiner woordenboek.
Kies getallen boven tekst waar het kan. Een ordernummer als "SO123456" kan je in Power Query strippen tot het gehele getal 123456. Microsoft noemt dit expliciet als techniek die bij grote tabellen fors scheelt.
Zet auto date/time uit. Power BI Desktop maakt anders voor elke datumkolom een verborgen datumtabel aan, en die tellen allemaal mee in de modelgrootte.
Vermijd berekende kolommen in DAX voor grote tabellen. VertiPaq comprimeert ze doorgaans minder efficiënt dan gewone kolommen, en ze worden pas gebouwd nadat alle data geladen is. Dezelfde berekening in Power Query of aan de bron comprimeert beter.
Vat samen waar detail niet hoeft. Een feittabel op dag- of maandniveau in plaats van op orderlijnniveau is vaak de grootste besparing van allemaal. De afweging: je verliest het detail voorgoed.
Een sterrenschema is niet alleen een kwestie van propere modellering, het speelt VertiPaq recht in de kaart.
In een ster verhuizen de beschrijvende kolommen naar dimensietabellen: relatief veel unieke waarden, maar weinig rijen, dus de woordenboeken blijven klein. De feittabel houdt alleen compacte sleutels en cijfers over. Miljoenen rijen, maar per kolom weinig unieke waarden en veel herhaling: precies het profiel waar dictionary encoding en run-length encoding op hun best zijn.
Eén brede, platte tabel doet het omgekeerde: elke beschrijvende kolom wordt daar miljoenen keren herhaald en houdt haar hoge cardinaliteit. Hetzelfde datavolume, een veelvoud aan geheugen.
Gokken waar je model zwaar weegt hoeft niet. VertiPaq Analyzer, een gratis tool van SQLBI, leest de interne opslagstructuren van je model uit en toont per kolom de cardinaliteit, de grootte van het woordenboek en de totale kolomgrootte.
Je vindt de tool ingebouwd in DAX Studio (via View Metrics) en in Tabular Editor 3. De resultaten kan je bewaren als .vpax-bestand en delen met collega's.
De praktijk is meestal simpel: sorteer op kolomgrootte en bekijk de top vijf. Daar zit bijna altijd een datetime-kolom, een technische sleutel of een vergeten kolom die niemand gebruikt.
VertiPaq werkt alleen wanneer de data effectief in het model zit. Dat maakt de opslagmodus van je tabellen bepalend.
Import
De data staat gecomprimeerd in het geheugen en VertiPaq beantwoordt elke query zelf. Hier spelen compressie en cardinaliteit dus voluit.
DirectQuery
Hier komt VertiPaq er niet aan te pas voor de opslag: elke query wordt vertaald naar de taal van de bron en daar uitgevoerd. Je model blijft klein, maar de snelheid hangt volledig af van die bron.
Direct Lake
De nieuwste optie in Microsoft Fabric. Direct Lake laadt kolommen rechtstreeks uit Delta-tabellen (Parquet-bestanden) in OneLake in het geheugen, zonder klassieke refresh van de data. Volgens Microsoft worden Direct Lake-queries door dezelfde VertiPaq-engine verwerkt als importqueries, met vergelijkbare prestaties. Een refresh kopieert er alleen metadata, een operatie die Microsoft framing noemt en die in seconden klaar is.
1. Moet ik VertiPaq installeren of aanzetten?
Nee. Elk importmodel in Power BI en elk in-memory model in Analysis Services Tabular gebruikt VertiPaq automatisch. Sturen doe je onrechtstreeks, via je modelkeuzes.
2. Hoeveel compressie mag ik verwachten?
Microsoft noemt een factor tien als haalbaar richtgetal. In de praktijk hangt het vooral af van de cardinaliteit van je kolommen: een smal model met lage cardinaliteit haalt meer, een model vol GUID's en timestamps veel minder.
3. Geldt dit ook voor DirectQuery-tabellen?
Nee. DirectQuery-tabellen bevatten geen data, dus er valt niets te comprimeren. Daar hangt alles af van de snelheid van de bron.
4. Waar zie ik hoeveel geheugen elke kolom kost?
Open je model in DAX Studio en kies View Metrics, of gebruik VertiPaq Analyzer in Tabular Editor 3. Beide tonen per kolom de grootte, de cardinaliteit en het aandeel van het woordenboek.
Een afleidingsregel legt uit hoe een nieuwe waarde wordt berekend of bepaald uit bestaande data. Ze maakt businesslogica achter velden, metr...
Lees meerEen berekeningsgroep past één DAX-patroon toe op elke meting in je model. Schrijf YTD, MTD en YoY% één keer in plaats van voor elke meting a...
Lees meerEen bridge table of brugtabel is een tussentabel die een veel-op-veel-relatie in een ster-schema oplost, iets wat een gewone vreemde sleutel...
Lees meerBusiness intelligence (BI) zet de cijfers uit je ERP, CRM en andere systemen om in rapporten en dashboards waarop je beslist. Geen losse exp...
Lees meerCardinaliteit beschrijft hoe twee tabellen zich tot elkaar verhouden: één-op-veel, veel-op-één, één-op-één of veel-op-veel. In Power BI is h...
Lees meer
Nieuw in Microsoft Fabric? Zo verschillen een lakehouse en een warehouse, in mensentaal: wat ze doen, wanneer je wat kiest en wanneer je bei...
Copilot in Power BI levert vooral waarde als je datamodel er klaar voor is. Wat werkt in 2026, wat werkt nog niet, en waarom IT en business ...