DAX-syntaxis

In dit artikel worden de syntaxis en vereisten voor de EXPRESSIEtaal van de DAX-formule beschreven.

Syntaxisvereisten

Een DAX-formule begint altijd met een gelijkteken (=). Na het gelijkteken kunt u elke expressie opgeven die resulteert in een scalaire waarde of een expressie die kan worden geconverteerd naar een scalaire waarde. Dit zijn onder meer de volgende:

  • Een scalaire constante of expressie die gebruikmaakt van een scalaire operator (+,-,*,/,>=,...,&&, ...)

  • Verwijzingen naar kolommen of tabellen. De DAX-taal gebruikt altijd tabellen en kolommen als invoer voor functies, nooit een matrix of willekeurige set waarden.

  • Operators, constanten en waarden die zijn opgegeven als onderdeel van een expressie.

  • Het resultaat van een functie en de vereiste argumenten. Sommige DAX-functies retourneren een tabel in plaats van een scalaire waarde en moeten worden verpakt in een functie die de tabel evalueert en een scalaire waarde retourneert; tenzij de tabel één kolom, één rijtabel is, wordt deze beschouwd als een scalaire waarde.

    Voor de meeste DAX-functies zijn een of meer argumenten vereist, waaronder tabellen, kolommen, expressies en waarden. Sommige functies, zoals PI, hebben echter geen argumenten nodig, maar vereisen altijd haakjes om het null-argument aan te geven. U moet bijvoorbeeld altijd PI() typen, niet PI. U kunt ook functies in andere functies nesten.

  • Expressies. Een expressie kan een of meer van de volgende elementen bevatten: operators, constanten of verwijzingen naar kolommen.

Hieronder ziet u bijvoorbeeld alle geldige formules.

Formule Resultaat
= 3 3
= "Verkoop" Verkoop
= 'Sales'[Amount] Als u deze formule in de tabel Verkoop gebruikt, krijgt u de waarde van de kolom Amount in de tabel Sales voor de huidige rij.
= (0,03 *[Bedrag])

=0,03 * [Bedrag]
Drie procent van de waarde in de kolom Amount van de huidige tabel.

Hoewel deze formule kan worden gebruikt om een percentage te berekenen, wordt het resultaat niet weergegeven als een percentage, tenzij u opmaak toepast in de tabel.
= PI() De waarde van de constante pi.

Formules kunnen zich anders gedragen, afhankelijk van hoe ze worden gebruikt. U moet altijd op de hoogte zijn van de context en hoe de gegevens die u in de formule gebruikt, zijn gerelateerd aan andere gegevens die in de berekening kunnen worden gebruikt.

Naamgevingsvereisten

Een gegevensmodel bevat vaak meerdere tabellen. Samen vormen de tabellen en hun kolommen een database die is opgeslagen in de analyse-engine in het geheugen (VertiPaq). In die database moeten alle tabellen unieke namen hebben. De namen van kolommen moeten ook uniek zijn binnen elke tabel. Alle objectnamen zijn niet hoofdlettergevoelig. De namen SALES en Sales vertegenwoordigen bijvoorbeeld dezelfde tabel.

Elke kolom en meting die u aan een bestaand gegevensmodel toevoegt, moeten deel uitmaken van een specifieke tabel. U geeft de tabel op die de kolom impliciet bevat, wanneer u een berekende kolom in een tabel maakt of expliciet, wanneer u een meting maakt en de naam opgeeft van de tabel waarin de metingdefinitie moet worden opgeslagen.

Wanneer u een tabel of kolom als invoer voor een functie gebruikt, moet u over het algemeen de kolomnaam kwalificeren . De volledig gekwalificeerde naam van een kolom is de tabelnaam, gevolgd door de kolomnaam tussen vierkante haken: bijvoorbeeld 'U.S. Sales'[Products]. Een volledig gekwalificeerde naam is altijd vereist wanneer u in de volgende contexten naar een kolom verwijst:

  • Als argument voor de functie WAARDEN

  • Als argument voor de functies, ALL of ALLEXCEPT

  • In een filterargument voor de functies CALCULATE of CALCULATETABLE

  • Als argument voor de functie RELATEDTABLE

  • Als argument voor elke time intelligence-functie

Een niet-gekwalificeerde kolomnaam is alleen de naam van de kolom, tussen vierkante haken: bijvoorbeeld [Verkoopbedrag]. Als u bijvoorbeeld verwijst naar een scalaire waarde uit dezelfde rij van de huidige tabel, kunt u de niet-gekwalificeerde kolomnaam gebruiken.

Als de naam van een tabel spaties, gereserveerde trefwoorden of niet-toegestane tekens bevat, moet u de tabelnaam tussen enkele aanhalingstekens plaatsen. U moet ook tabelnamen tussen aanhalingstekens plaatsen als de naam tekens bevat buiten het alfanumerieke ANSI-tekenbereik, ongeacht of uw landinstelling de tekenset ondersteunt of niet. Als u bijvoorbeeld een werkmap opent die tabelnamen bevat die zijn geschreven in Cyrillische tekens, zoals 'Таблица', moet de tabelnaam tussen aanhalingstekens staan, ook al bevat deze geen spaties.

Notitie

Gebruik de functie Automatisch aanvullen in de formule-editor om het gemakkelijker te maken om de volledig gekwalificeerde namen van kolommen in te voeren.

Tabellen

  • Tabelnamen zijn vereist wanneer de kolom afkomstig is uit een andere tabel dan de huidige tabel. Tabelnamen moeten uniek zijn binnen de database.

  • Tabelnamen moeten tussen enkele aanhalingstekens staan als deze spaties, andere speciale tekens of niet-Engelse alfanumerieke tekens bevatten.

Metingen

  • Maateenheidnamen moeten altijd tussen vierkante haken staan.

  • Metingnamen kunnen spaties bevatten.

  • Elke metingnaam moet uniek zijn binnen een model. Daarom is de tabelnaam optioneel vóór een metingsnaam wanneer wordt verwezen naar een bestaande meting. Wanneer u echter een meting maakt, moet u altijd een tabel opgeven waarin de metingdefinitie wordt opgeslagen.

Kolommen

Kolomnamen moeten uniek zijn in de context van een tabel; meerdere tabellen kunnen echter kolommen met dezelfde namen hebben (ondubbelzinnigheid wordt geleverd met de tabelnaam).

In het algemeen kunnen kolommen worden verwezen zonder te verwijzen naar de basistabel waartoe ze behoren, behalve wanneer er mogelijk een naamconflict is om op te lossen of met bepaalde functies waarvoor kolomnamen volledig moeten worden gekwalificeerd.

Gereserveerde trefwoorden

Als de naam die u voor een tabel gebruikt, hetzelfde is als een gereserveerd trefwoord van Analysis Services, wordt er een fout gegenereerd en moet u de naam van de tabel wijzigen. U kunt echter trefwoorden in objectnamen gebruiken als de objectnaam tussen vierkante haken (voor kolommen) of aanhalingstekens (voor tabellen) staat.

Notitie

Aanhalingstekens kunnen worden vertegenwoordigd door verschillende tekens, afhankelijk van de toepassing. Als u formules uit een extern document of webpagina plakt, controleert u de ASCII-code van het teken dat wordt gebruikt voor het openen en sluiten van aanhalingstekens om ervoor te zorgen dat deze hetzelfde zijn. Anders kan DAX de symbolen mogelijk niet herkennen als aanhalingstekens, waardoor de verwijzing ongeldig wordt.

Speciale tekens

De volgende tekens en tekentypen zijn niet geldig in de namen van tabellen, kolommen of metingen:

  • Voorloop- of volgspaties; tenzij de spaties tussen naamscheidingstekens, haakjes of enkele apostrofs staan.

  • Besturingstekens

  • De volgende tekens die niet geldig zijn in de namen van objecten:

    .,;':/\*|? &%$!+=()[]{}<>

Voorbeelden van objectnamen

In de volgende tabel ziet u voorbeelden van enkele objectnamen:

Objecttypen Voorbeelden Opmerking
Tabelnaam Verkoop Als de tabelnaam geen spaties of andere speciale tekens bevat, hoeft de naam niet tussen aanhalingstekens te staan.
Tabelnaam 'Canada Sales' Als de naam spaties, tabs of andere speciale tekens bevat, plaatst u de naam tussen enkele aanhalingstekens.
Volledig gekwalificeerde kolomnaam Verkoop[Bedrag] De tabelnaam wordt voorafgegaan door de kolomnaam en de kolomnaam wordt tussen vierkante haken geplaatst.
Volledig gekwalificeerde metingnaam Sales[Profit] De tabelnaam gaat vooraf aan de naam van de meting en de naam van de meting staat tussen vierkante haken. In bepaalde contexten is altijd een volledig gekwalificeerde naam vereist.
Niet-gekwalificeerde kolomnaam [Bedrag] De niet-gekwalificeerde naam is alleen de kolomnaam tussen vierkante haken. Contexten waarin u de niet-gekwalificeerde naam kunt gebruiken, zijn formules in een berekende kolom binnen dezelfde tabel of in een aggregatiefunctie die wordt gescand op dezelfde tabel.
Volledig gekwalificeerde kolom in tabel met spaties 'Canada Sales'[Qty] De tabelnaam bevat spaties, dus deze moet tussen enkele aanhalingstekens staan.

Andere beperkingen

De syntaxis die is vereist voor elke functie en het type bewerking dat deze kan uitvoeren, varieert sterk, afhankelijk van de functie. In het algemeen zijn de volgende regels echter van toepassing op alle formules en expressies:

  • DAX-formules en -expressies kunnen geen afzonderlijke waarden in tabellen wijzigen of invoegen.

  • U kunt geen berekende rijen maken met behulp van DAX. U kunt alleen berekende kolommen en metingen maken.

  • Wanneer u berekende kolommen definieert, kunt u functies nesten op elk niveau.

  • DAX heeft verschillende functies die een tabel retourneren. Normaal gesproken gebruikt u de waarden die door deze functies worden geretourneerd als invoer voor andere functies, waarvoor een tabel als invoer is vereist.

DAX-operators en constanten

De volgende tabel bevat de operators die worden ondersteund door DAX. Zie DAX-operators voor meer informatie over de syntaxis van afzonderlijke operators.

Operatortype Symbool en gebruik
Operator haakjes () volgorde van prioriteit en groepering van argumenten
Rekenkundige operators + (optellen)

- (aftrekken/

ondertekenen)

* (vermenigvuldiging)

/ (divisie)

^ (exponentiatie)
Vergelijkingsoperators = (gelijk aan)

> (groter dan)

< (kleiner dan)

>= (groter dan of gelijk aan)

<= (kleiner dan of gelijk aan)

<> (niet gelijk aan)
Tekstsamenvoegingsoperator & (samenvoeging)
Logische operators && && (en)

|| (of)

Gegevenstypen

U hoeft het gegevenstype van een kolom of waarde die u in een DAX-formule gebruikt, niet te casten, te converteren of op een andere manier op te geven. Wanneer u gegevens in een DAX-formule gebruikt, identificeert DAX automatisch de gegevenstypen in kolommen waarnaar wordt verwezen en van de waarden die u typt en voert dax waar nodig impliciete conversies uit om de opgegeven bewerking te voltooien.

Als u bijvoorbeeld een getal probeert toe te voegen aan een datumwaarde, interpreteert de engine de bewerking in de context van de functie en converteert de getallen naar een gemeenschappelijk gegevenstype en geeft het resultaat vervolgens weer in de beoogde notatie, een datum.

Er zijn echter enkele beperkingen voor de waarden die kunnen worden geconverteerd. Als een waarde of kolom een gegevenstype heeft dat niet compatibel is met de huidige bewerking, retourneert DAX een fout. DAX biedt ook geen functies waarmee u het gegevenstype van bestaande gegevens die u in een gegevensmodel hebt geïmporteerd expliciet kunt wijzigen, converteren of casten.

Belangrijk

DAX biedt geen ondersteuning voor het gebruik van het gegevenstype variant. Wanneer u gegevens in een gegevensmodel laadt of importeert, wordt daarom verwacht dat de gegevens in elke kolom over het algemeen van een consistent gegevenstype zijn.

Sommige functies retourneren scalaire waarden, waaronder tekenreeksen, terwijl andere functies werken met getallen, zowel gehele getallen als reële getallen, of datums en tijden. Het gegevenstype dat voor elke functie is vereist, wordt beschreven in de sectie DAX-functies.

U kunt tabellen met meerdere kolommen en meerdere rijen gegevens gebruiken als argument voor een functie. Sommige functies retourneren ook tabellen, die zijn opgeslagen in het geheugen en kunnen worden gebruikt als argumenten voor andere functies.

Datum en tijd

DAX slaat datum- en tijdwaarden op met behulp van het gegevenstype datum/tijd dat wordt gebruikt door Microsoft SQL Server. Datum/tijd-notatie maakt gebruik van een drijvende-kommanummer waarbij datumwaarden overeenkomen met het gehele getal dat het aantal dagen sinds 30 december 1899 aangeeft. Tijdwaarden komen overeen met het decimaal gedeelte van een datumwaarde waarbij uren, minuten en seconden worden vertegenwoordigd door decimale breuken van een dag. DAX-datum- en tijdfuncties converteren impliciet argumenten naar gegevenstype datum/tijd.

Notitie

De exacte maximale datum/tijd-waarde die door DAX wordt ondersteund, is 31 december 9999 00:00:00.

Letterlijke datum en tijd

Vanaf de versie van augustus 2021 van Power BI Desktop kunnen DAX-datum- en datum/tijdwaarden worden opgegeven als een letterlijke waarde in de notatie dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"of dt"YYYY-MM-DD hh:mm:ss". Wanneer deze functie is opgegeven als een letterlijke waarde, zijn het gebruik van de functies DATE, TIMEVALUE, TIMEVALUE in de expressie niet nodig.

De volgende expressie gebruikt bijvoorbeeld de functies DATE en TIME om te filteren op OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

Dezelfde filterexpressie kan worden opgegeven als een letterlijke waarde:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Notitie

De letterlijke notatie DAX-datum en datum/tijd wordt niet ondersteund in alle versies van Power BI Desktop, Analysis Services en Power Pivot in Excel. Nieuwe en bijgewerkte DAX-functionaliteit wordt doorgaans eerst geïntroduceerd in Power BI Desktop en vervolgens later opgenomen in Analysis Services en Power Pivot in Excel.