DAX-formules schrijven
Alle typen modelberekeningen, berekende tabellen, berekende kolommen en metingen worden gedefinieerd door de naam, gevolgd door het gelijkteken (=), dat weer wordt gevolgd door een DAX-formule. Gebruik de volgende sjabloon om een modelberekening te maken:
<Calculation name> = <DAX formula>
De definitie van de berekende tabel Verzenddatum waarmee de gegevens van de tabel Date worden gedupliceerd, is bijvoorbeeld:
Ship Date = 'Date'
Een DAX-formule bestaat uit expressies die een resultaat retourneren. Het resultaat is een tabelobject of een scalaire waarde. Berekende tabelformules moeten een tabelobject retourneren; formules voor berekende kolommen en metingen moeten een scalaire waarde (één waarde) retourneren.
Formules worden samengesteld met behulp van:
- DAX-functies
- DAX-operators
- Verwijzingen naar modelobjecten
- Constante waarden, zoals het getal 24 of de letterlijke tekst 'FY' (afkorting voor fiscaal jaar)
- DAX-variabelen
- Witruimte
Tip
Wanneer u DAX-formules invoert in Power BI Desktop, hebt u het voordeel van IntelliSense. IntelliSense is een hulpprogramma voor het voltooien van de code dat functies en modelbronnen vermeldt. Wanneer u een DAX-functie selecteert, krijgt u ook een definitie en beschrijving. We raden u aan IntelliSense te gebruiken om snel nauwkeurige formules te maken.
DAX-functies
Net als bij Microsoft Excel is DAX een functionele taal, wat betekent dat formules afhankelijk zijn van functies om specifieke doelen te bereiken. DAX-functies hebben doorgaans argumenten waarmee variabelen kunnen worden doorgegeven. Formules kunnen veel functieaanroepen gebruiken en nesten functies vaak in andere functies.
In een formule moeten functienamen worden gevolgd door haakjes. De variabelen worden tussen de haakjes geplaatst.
Notitie
Sommige functies hebben geen argumenten of argumenten zijn mogelijk optioneel.
Het werken met DAX-functies wordt verderop in deze module beschreven.
DAX-operators
Formules zijn ook afhankelijk van operators, die rekenkundige berekeningen kunnen uitvoeren, waarden kunnen vergelijken, met tekenreeksen kunnen werken of voorwaarden kunnen testen.
DAX-operators worden verderop in deze module uitgebreid beschreven.
Verwijzingen naar modelobjecten
Formules kunnen maar naar drie typen modelobjecten verwijzen: tabellen en kolommen en metingen. Een formule kan niet naar een hiërarchie of een hiërarchieniveau verwijzen. (Zoals u weet is een hiërarchieniveau gebaseerd op een kolom, zodat de formule kan verwijzen naar de kolom van een hiërarchieniveau.)
Tabelverwijzingen
Wanneer u in een formule naar een tabel verwijst, staat de tabelnaam tussen enkele aanhalingstekens. In de volgende definitie van de berekende tabel ziet u dat de tabel Date tussen enkele aanhalingstekens staat.
Ship Date = 'Date'
Enkele aanhalingstekens kunnen echter worden weggelaten wanneer aan beide volgende voorwaarden wordt voldaan:
- De tabelnaam bevat geen ingesloten spaties.
- De tabelnaam is geen gereserveerd woord dat wordt gebruikt door DAX. Alle namen en operators van DAX-functies zijn gereserveerde woorden. Datum is een DAX-functienaam. Dit verklaart waarom u, wanneer u verwijst naar een tabel met de naam Datum, deze tussen enkele aanhalingstekens moet plaatsen.
In de volgende definitie van de berekende tabel is het mogelijk om de enkele aanhalingstekens weg te laten bij het verwijzen naar de tabel Airport :
Arrival Airport = Airport
Kolomverwijzingen
Wanneer u in een formule naar een kolom verwijst, moet de kolomnaam tussen vierkante haken staan. Optioneel kan de kolomnaam worden voorafgegaan door de naam van de tabel. De volgende metingdefinitie verwijst bijvoorbeeld naar de kolom Sales Amount.
Revenue = SUM([Sales Amount])
Omdat kolomnamen uniek zijn in een tabel maar niet noodzakelijkerwijs uniek zijn binnen het model, kunt u voorkomen dat de kolomverwijzing ambigu is door de kolomnaam vooraf te laten gaan door de tabelnaam. Een kolom van dit type wordt een volledig gekwalificeerde kolom genoemd. Voor sommige DAX-functies zijn volledig gekwalificeerde kolommen vereist.
Tip
Om de leesbaarheid van uw formules te verbeteren, raden we u aan om een kolomverwijzing altijd vooraf te laten gaan door de tabelnaam.
De metingdefinitie uit het vorige voorbeeld kan worden herschreven als:
Revenue = SUM(Sales[Sales Amount])
Metingverwijzingen
Wanneer u in een formule naar een meting verwijst, zoals kolomnamen, moet de naam van de meting tussen vierkante haken staan. De volgende metingdefinitie verwijst bijvoorbeeld naar de metingen Revenue en Cost.
Profit = [Revenue] - [Cost]
Als u een DAX-beginner bent, kan het feit dat kolom- en metingverwijzingen altijd tussen vierkante haken staan, verwarring veroorzaken wanneer u een formule probeert te lezen. Naarmate u echter vertrouwd raakt met de basisprincipes van DAX, kunt u bepalen welk type object het is, omdat in DAX-formules, kolommen en metingen op verschillende manieren worden gebruikt.
Tip
Het is mogelijk om een metingverwijzing vooraf te laten gaan door de tabelnaam. Metingen zijn echter een object op modelniveau. Ze zijn wel toegewezen aan een starttabel, maar dit is alleen een cosmetische relatie om metingen logisch in het deelvenster Velden te rangschikken.
We raden aan om een kolomverwijzing altijd vooraf te laten gaan door de tabelnaam, maar het omgekeerde geldt voor metingen: We raden u aan een meting nooit vooraf te laten gaan door de tabelnaam.
Zie Verwijzingen naar kolommen en metingen voor meer informatie.
DAX-variabelen
Formules kunnen DAX-variabelen declareren voor het opslaan van resultaten.
Hoe en wanneer u DAX-variabelen kunt gebruiken, wordt verderop in deze module beschreven.
Witruimte
Witruimte verwijst naar tekens die u kunt gebruiken om uw formules zodanig op te maken dat ze snel en eenvoudig te begrijpen zijn. Witruimtetekens zijn onder meer:
- Spaties
- Tabs
- Regelterugloop
Een witruimte is optioneel en wijzigt de formulelogica niet en heeft geen negatieve invloed op de prestaties. We raden u ten zeerste aan een opmaakstijl te kiezen en deze consistent toe te passen. Overweeg daarbij de volgende aanbevelingen:
- Gebruik spaties tussen operators.
- Gebruik tabs om geneste functieaanroepen te laten inspringen.
- Gebruik regelterugloop om functieargumenten te scheiden, vooral wanneer deze te lang zijn voor één regel. Als u formules op deze manier opmaakt, kunt u eenvoudiger problemen oplossen, bijvoorbeeld als er een haakje ontbreekt in de formule.
- U kunt beter te veel witruimte hebben dan te weinig.
Tip
Druk in de formulebalk op Shift+Enter om een regelterugloop in te voeren. Als u alleen op Enter drukt, wordt de formule doorgevoerd.
Bekijk de volgende metingdefinitie die is geschreven op één regel en vijf DAX-functieaanroepen bevat:
Revenue YoY % = DIVIDE([Revenue] - CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])), CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])))
Het volgende voorbeeld is dezelfde metingdefinitie, maar nu opgemaakt, waardoor de formule eenvoudiger te lezen en te begrijpen is:
Revenue YoY % =
DIVIDE(
[Revenue]
- CALCULATE(
[Revenue],
SAMEPERIODLASTYEAR('Date'[Date])
),
CALCULATE(
[Revenue],
SAMEPERIODLASTYEAR('Date'[Date])
)
)
Probeer de meting zelf eens op te maken. Open het bestand Adventure Works DW 2020 M02.pbix Power BI Desktop en vouw vervolgens in het deelvenster Velden de tabel Verkoop uit en selecteer vervolgens de meting Revenue YoY % . Gebruik in de formulebalk tab- en regelteruglooptekens om hetzelfde resultaat te produceren als in het vorige voorbeeld. Wanneer u een regelterugloop toevoegt, moet u niet op Shift+Enter drukken.
Deze metingdefinitie kan verder worden verbeterd voor leesbaarheid en prestaties, wat verderop in deze module wordt uitgelegd.
Tip
Een uitstekend hulpprogramma voor opmaak uit een andere bron die u kan helpen bij het opmaken van uw berekeningen is DAX Formatter. Met dit hulpprogramma kunt u de berekening plakken en opmaken. Vervolgens kunt u de opgemaakte berekening naar het klembord kopiëren en weer plakken in Power BI Desktop.