Homepage › Communities › Bricklog BI Quick Tips › DAX Fundamentals
Tags: dax
- Dit onderwerp is leeg.
-
AuteurBerichten
-
15 juli 2022 om 16:27 #6631
Bricklog
SleutelbeheerderDAX Fundamentals
-Moet iets op een as staan? Moet ergens mee gefilterd worden? Kolom maken.
– Is dit niet het geval? Meting maken.
– Kolommen gebruiken voor berekeningen is in 99% van de gevallen onkunde. Daarom gaan we nu eerst beginnen met een stukje DAX fundamentals
– Om beter te begrijpen hoe metingen werken, eerst een stukje uitleg: De context is de omgeving waar de meting berekend wordt, alle filters op een pagina die meegenomen worden noemen we de initiële context Vervolgens kunnen we de context op 2 verschillende manieren verder aanpassen, door middel van aggegratiefuncties of iteratiefuncties.
– Om hier verder op in te gaan, gaan we eerst een metingen tabel aanmaken
–Meting tabel toevoegen
-Vervolgens maken we een simpele meting waarin we de kilometers uitrekenen en zetten deze met drivers in een tabel.
– Kilometers(SUM) = sum(Ritten[Kilometers])
– Als we nu een datum slicer toevoegen, en deze op 2019 zetten, zien we dat de data gefilterd wordt met alleen de kilometers van 2019
–Tabel met driver, kilometers toevoegen, datumslicer toevoegen.
– Dezelfde contextwijziging hadden we ook in een formule kunnen verwerken, dit werkt hetzelfde:
–Kilometers Filter aggegratie = CALCULATE([Kilometers(SUM)],FILTER(Kalender,YEAR(Kalender[Datum])=2019))
– Als we nu de datumslicer heen en weer bewegen, zien we dat deze berekening precies hetzelfde doet tot je de slicer groter maakt dan 2019, conclusie: Eerst wordt de initiële context gezet welke verder gefilterd is door de door ons meegegeven extra context.
-We kunnen ook de complete initiële context negeren in een formule, dit ziet er als volgt uit:
–Kilometetrs geen initiële context = CALCULATE([Kilometers(SUM)],ALL())
-We kunnen nu de datumslicer bewegen wat we willen, maar er gebeurd niks meer mee. De meting negeert hem nu. Er zijn verschillende formules om hier nuances in aan te brengen, zo kun je bijvoorbeeld ALLEXCEPT() of ALLSELECTED().
-We hebben nog een vierde optie, een formule schrijven zonder intitële context, wel met meegegeven context. Dit ziet er als volgt uit:
–Kilometers filter zonder initiële context = CALCULATE([Kilometers Filter aggegratie],ALL())
-Deze formule laat vast zien hoeveel kilometers er in 2019 gereden zijn, dit is niet filterbaar op de pagina omdat de initële context niet is meegenomen. We kunnen deze nog iets verder aanscherpen, door alle initiële context behalve die van de kalender te negeren zien we per chauffeur aan wat er aan kilometers is gereden.
–Kilometers filter zonder initiële context = CALCULATE([Kilometers Filter aggegratie],ALL(Kalender))
-Dit zijn allemaal Aggegratiefuncties, we kunnen ook iteratiefuncties toepassen op dezelfde data, bijvoorbeeld door een SUMX toe te passen:
– Kilometers(SUMX) = SUMX(Ritten,Ritten[Kilometers])
-SUMX geeft in deze situatie exact hetzelfde weer als de sum functie, maar omdat deze op regelniveau vanuit de opgegeven tabel naar de data kijkt kunnen we deze op een andere manier uitbouwen. Omdat dit een iteratieve functie is, kunnen we logica inbouwen per regel voordat deze geaggegreerd worden, zo kan ik nu aan de hand van een kostprijs mijn kilometerkosten uitrekenen:
–Kilometerkosten = SUMX(Ritten,Ritten[Kilometers]*RELATED(Wagens[Kostprijs per kilometer]))
-Aan een iteratieve functie kunnen we ook nog aggegratiefilters toevoegen, dit doen we (meestal) door de gespecificeerde tabel te filteren, dit ziet er als volgt uit:
– Kilometerkosten maandag = SUMX(FILTER(Ritten,WEEKDAY(RELATED(Kalender[Datum]),2)=1),[Kilometers]*RELATED(Wagens[Kostprijs per kilometer]))
-We hebben nu in een iteratiefunctie uitgerekend wat de kilometerkosten waren, op een met een aggegratiefunctie gefilterde tabel.
-
AuteurBerichten
- Je moet ingelogd zijn om een antwoord op dit onderwerp te kunnen geven.