Power BI

DAX: schrijven op de juiste granulariteit

SQLBI
DAX: schrijven op de juiste granulariteit

Samenvatting

DAX moet elke bedrijfsregel berekenen op de laagste granulariteit waarop alle invoerwaarden een eenduidige betekenis hebben.

DAX en de juiste granulariteit

SQLBI legt uit waarom korte DAX-code toch verkeerde totalen kan opleveren. Een berekening die een hoeveelheid met een tarief vermenigvuldigt, werkt alleen wanneer dat tarief nog een duidelijke betekenis heeft. Zodra verschillende tarieven zijn samengevoegd, moet DAX een aggregatie gebruiken, zoals AVERAGE, MIN of MAX. Zo ontstaat wel een getal, maar niet automatisch een betekenisvolle uitkomst.

De oplossing bestaat uit vier granulariteiten: de granulariteit van de brontabel, de granulariteit van de bedrijfsregel, de evaluatiegranulariteit en de granulariteit van de gevraagde uitvoer. Als die niveaus samenvallen, blijft de formule eenvoudig. Problemen ontstaan wanneer de berekening op een lager niveau moet plaatsvinden dan het niveau waarop het rapport de uitkomst toont.

AVERAGE maakt een tarief niet betekenisvol

Het voorbeeld gebruikt een model voor limonadeproductie met de tabellen Recipe en Batch. Elke batch volgt één recept. Water is optelbaar, maar ingrediënttarieven zoals suikerlepels per liter en het percentage citroensap zijn eigenschappen van een recept en mogen niet zomaar worden opgeteld of gemiddeld.

Voor batch B01 met 10 liter water en het recept Sweet volgt rechtstreeks een behoefte van 30 suikerlepels en 2,5 liter citroensap. Op receptniveau werken de formules dus goed. Op totaalniveau gaat het mis. Total Water komt uit op 14 liter, terwijl AVERAGE het ongewogen gemiddelde van 1 en 3 suikerlepels per liter gebruikt. Wrong Sugar komt daardoor uit op 28, hoewel de onderliggende batches verschillende recepten gebruiken.

Takeaway voor DAX-modellen

Bereken eerst de bedrijfsregel per batch, waar waterhoeveelheid en recepttarief samen een ondubbelzinnige betekenis hebben. Tel de afzonderlijke uitkomsten daarna op naar recept- of totaalniveau. Controleer bij elke measure welk niveau de invoerwaarden beschrijft en voorkom dat AVERAGE, MIN of MAX een ontbrekende bedrijfsregel verbergt.

Lees het volledige artikel
Meer over Power BI →