07-10-2022 Door: Joris Stoop

Tabular model memory optimaliseren

Deel dit bericht

Vaak worden Power BI Datasets en Tabular modellen alleen maar uitgebreid met nieuwe functionaliteit. Er wordt vaak pas aandacht aan het optimaliseren van het model besteedt als het eigenlijk al te laat is. Als het laden te lang duurt worden tabellen opgesplitst in partities, maar er wordt maar weinig gekeken naar het geheugengebruik van het model. Totdat het model niet meer ververst kan worden, omdat de Analysis-server of de Power BI service te weinig geheugen tot zijn beschikking heeft.

Geheugengebruik
Allereerst even kort iets over het geheugengebruik van een model. Power BI Premium per user heeft bijvoorbeeld een dataset limiet van 100 GB. Dat lijkt veel, maar als een model niet gecleared wordt en er redelijk veel data dagelijks ververst wordt kan het zomaar zijn dat je bij een model van 30 GB al tegen de limiet aanloopt.

DAX Studio
Met DAX Studio maak je het geheugengebruik van je model heel makkelijk inzichtelijk. Zo kan je snel zien welke tabellen en/of kolommen het meeste geheugen kosten. Vaak is het zo dat je met een paar kleine aanpassingen je model al aanzienlijk kan verkleinen. DAX Studio is niet alleen in te zetten op SSAS, maar kan ook op de Power BI Service gebruikt worden.

Memory optimaliseren
Hoe je een model het beste kan optimaliseren is natuurlijk per model verschillend, maar ik zal hieronder een aantal basisstappen bespreken die je vrijwel altijd kan toepassen. Ter illustratie laat ik ook van een aantal stappen de impact zien op een model van 32 GB. Een aantal stappen zullen misschien voor de hand liggen, maar vaak zijn mensen zich niet bewust dat de impact soms enorm is.


1BI4SAP_begin.png  

Verborgen velden
Uit gemak worden in een model vaak velden die niet gebruikt worden op "hidden" gezet. Het model voor de eindgebruiker wordt minder complex, maar de velden worden nog wel geladen. Afhankelijk van de grootte van het veld, het aantal records en het aantal unieke waarden kan een veld wat niet wordt gebruikt toch veel geheugen innemen. Met de Advanced Scripting Language van Tabular Editor kan een script worden geschreven waarmee alle verborgen velden die niet worden gebruikt uit het model worden verwijderd. Hieronder zie je dat bijvoorbeeld het verwijderen van 2 velden het model al met bijna 13% verkleind.

2BI4SAP_OverbodigeVelden.png

Datatypen
Een integer neemt nu eenmaal minder geheugen in dan een String. In dit model was in 1 oogopslag te zien dat er 1 samengestelde key werd gebruikt die in totaal ongeveer 20% van het geheugen van het model claimde. Door deze key te vervangen door een numerieke teller ([KY] in de afbeelding) werd dit beperkt tot minder dan 2%.

3BI4SAP_KeyGeheugen.png


Datum/tijd velden
Zoals hierboven aangegeven wordt het geheugen wat een veld gebruikt mede bepaald door het aantal unieke waarden. Door datum/tijd velden op te splitsen in een datumveld en een tijdveld kan er dus ook veel geheugen bespaard worden.

Data inperken
Data in feitentabellen wordt in verband met performance regelmatig ingeperkt tot de afgelopen X aantal jaar. Door deze strategie ook door te voeren in een van de bijbehorende dimensies hebben we in dit model ook zomaar 5 GB aan geheugen kunnen besparen.

Dubbele velden
Simpel, maar doeltreffend. Kijk of er geen data dubbel in je model staat. In dit model stond het documentnummer bijvoorbeeld en in de feitentabel en in de dimensie. Het verwijderen van het veld uit de feitentabel levert weer een verkleining van 8% op.

4BI4SAP_Eind.png

Conclusie
Met DAX Studio is het inzichtelijk krijgen van het geheugengebruik van een model erg simpel. Met een aantal eenvoudige en simpele stappen is het geheugen vaak snel met een aanzienlijk percentage terug te brengen. Vooral in het begin is hier veel winst te behalen. Daarna wordt het wel steeds lastiger, maar meestal is het doel dan al bereikt.

Joris Stoop

Joris heeft veel ervaring met zowel de front-end als de back-end van BI omgevingen in Microsoft BI én SAP BusinessObjects technologie. Denk hierbij aan BusinessObjects Web Intelligence en Information Design Tool, aan SQL Server Reporting Services, Analysis Services en Power BI. Daarnaast is Joris gespecialiseerd in de back-end bij het bouwen en beheren van datawarehouses. Ook heeft hij ervaring in het gebruik van verschillende databases en programmeren in .NET. Verder schrijft hij blogs voor de Ensior website.

Alle blogs van deze auteur

Partners