Delen via


DAX syntaxis

In dit artikel worden de vereisten voor de and-syntaxis van de DAX-formuletaal beschreven.

Syntaxisvereisten

Een DAX formule begint altijd met een gelijk sign (=). Nadat het gelijk is aan sign, kunt u elke expressie opgeven die resulteert in een scalaire waarde, or een expressie die kan worden geconverteerd naar een scalaire waarde. Deze omvatten het volgende:

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

  • Verwijzingen naar kolommen or tabellen. De DAX taal gebruikt altijd tabellen and kolommen als invoer voor functies, nooit een matrix or willekeurige set values.

  • Operatoren, constanten, andvalues opgegeven als onderdeel van een expressie.

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

    Voor de meeste DAX-functies zijn één or meer argumenten nodig, waaronder tabellen, kolommen, expressies andvalues. Sommige functies, zoals PI, vereisen echter not argumenten, maar altijd haakjes vereisen om het null-argument aan te geven. U moet bijvoorbeeld altijd PI(), notPItypen. U kunt ook functies in andere functies nesten.

  • Uitdrukkingen. Een expressie kan elke orall van het volgende bevatten: operators, constanten, or verwijzingen naar kolommen.

De volgende zijn bijvoorbeeld all geldige formules.

Formule Resultaat
= 3 3
= "Sales" Verkoop
= 'Sales'[Amount] If u deze formule binnen de tabel Sales gebruikt, ontvangt u de value van de kolom Amount in de tabel Sales voor de huidige rij.
= (0.03 *[Amount])

=0.03 * [Amount]
Drie procent van de value in de kolom 'Bedrag' van de huidige tabel.

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

Formules kunnen zich anders gedragen, afhankelijk van hoe ze worden gebruikt. U moet altijd rekening houden met de context and hoe de gegevens die u in de formule gebruikt zich verhouden related tot andere gegevens die in de berekening kunnen worden gebruikt.

Naamgevingsvereisten

Een gegevensmodel contains vaak meerdere tabellen. Samen vormen de tabellen and hun kolommen een database die is opgeslagen in de analyse-engine in het geheugen (VertiPaq). In die database moeten all tabellen unieke namen hebben. De namen van kolommen moeten ook uniek zijn binnen elke tabel. All objectnamen zijn niet hoofdlettergevoelig, de namen SALESandSales vertegenwoordigen bijvoorbeeld dezelfde tabel.

Elke kolom andmeasure u aan een bestaand gegevensmodel toevoegt, moet deel uitmaken van een specifieke tabel. U geeft de tabel op die impliciet de kolom contains, wanneer u een berekende kolom in een tabel maakt, or expliciet, wanneer u een measureand de naam van de tabel opgeeft waarin de definitie van de measure moet worden opgeslagen.

Wanneer u een tabel or kolom als invoer voor een functie gebruikt, moet u over het algemeen kwalificeren de kolomnaam. 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, VALUES

  • Als argument voor de functies ALLorALLEXCEPT

  • In een filter argument voor de functies CALCULATEorCALCULATETABLE

  • Als argument voor de functie, RELATEDTABLE

  • Als argument voor elke time intelligence-functie

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

If de naam van een tabel contains spaties, gereserveerde trefwoorden, or niet-toegestane tekens, moet u de tabelnaam tussen enkele aanhalingstekens plaatsen. U moet ook tabelnamen tussen aanhalingstekens plaatsen if de naam contains om het even welke tekens buiten het alfanumerieke ANSI-teken range, ongeacht of de landinstelling de tekenset ornotondersteunt. if u bijvoorbeeld een werkmap opent die contains tabelnamen die zijn geschreven in Cyrillische tekens, zoals 'Таблица', moet de tabelnaam tussen aanhalingstekens staan, even hoewel deze wel not spaties bevat.

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 if ze spaties bevatten, andere speciale tekens or alle niet-Engelse alfanumerieke tekens.

Maatregelen

  • Measure namen moeten altijd tussen vierkante haken staan.

  • Measure namen kunnen spaties bevatten.

  • Elke measure naam moet uniek zijn binnen een model. Daarom is de tabelnaam optioneel vóór een measure naam wanneer wordt verwezen naar een bestaande measure. Wanneer u echter een measure maakt, moet u altijd een tabel opgeven waarin de measure definitie 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, except wanneer er mogelijk een naamconflict is om or op te lossen met bepaalde functies waarvoor kolomnamen volledig moeten worden gekwalificeerd.

Gereserveerde trefwoorden

If de naam die u voor een tabel gebruikt, hetzelfde is als een gereserveerd trefwoord van Analysis Services, wordt er een error gegenereerd and u de naam van de tabel moet wijzigen. U kunt echter trefwoorden gebruiken in objectnamen if de objectnaam tussen vierkante haken (voor kolommen) or aanhalingstekens (voor tabellen).

Notitie

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

Speciale tekens

De volgende tekens and tekentypen zijn not geldig in de namen van tabellen, kolommen or metingen:

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

  • Besturingstekens

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

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

Voorbeelden van objectnamen

In de volgende tabel ziet u voorbeelden van enkele objectnamen:

Objecttypen Voorbeelden Commentaar
Tabelnaam Verkoop If de tabelnaam not spaties of or andere speciale tekens bevat, moet de naam not tussen aanhalingstekens worden geplaatst.
Tabelnaam 'Verkoop in Canada' If de naam contains spaties, tabs or andere speciale tekens, plaats de naam tussen enkele aanhalingstekens.
Volledig gekwalificeerde kolomnaam Verkoop[Bedrag] De tabelnaam gaat vooraf aan de kolomnaam, and de kolomnaam tussen vierkante haken staat.
Volledig gekwalificeerde measure naam Verkoop[Winst] De tabelnaam gaat vooraf aan de naam van de measure, and de measure naam tussen vierkante haken staat. In bepaalde contexten is altijd een volledig gekwalificeerde naam vereist.
Niet-gekwalificeerde kolomnaam [Bedrag] De niet-gekwalificeerde naam is de kolomnaam die tussen vierkante haken staat. Contexten waarin u de niet-gekwalificeerde naam kunt gebruiken, zijn formules in een berekende kolom in dezelfde tabel, or in een aggregatiefunctie die in dezelfde tabel scant.
Volledig gekwalificeerde kolom in tabel met spaties 'Canada Sales'[Aantal] De tabelnaam contains bevat spaties, dus moet deze tussen enkele aanhalingstekens staan.

Andere beperkingen

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

  • DAX formules and expressies kunnen niet or afzonderlijke values invoegen in tabellen.

  • U kunt geen berekende rijen maken met behulp van DAX. U kunt alleen berekende kolommen en metingen and 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 values die door deze functies worden geretourneerd als invoer voor andere functies, waarvoor een tabel als invoer is vereist.

DAX operators and constanten

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

Operatortype Symbool and gebruiken
Operator voor ronde haakjes () volgorde van prioriteit and groepering van argumenten
Rekenkundige operatoren + (toevoeging)

- (aftrekken)

* (vermenigvuldiging)

/ (divisie)

^ (exponentiatie)
Vergelijkingsoperatoren = (gelijk aan)

> (groter dan)

< (kleiner dan)

>= (groter dan or gelijk aan)

<= (kleiner dan of gelijk aan or)

<> (not gelijk aan)
Tekstsamenvoegingsoperator & (samenvoeging)
Logische operators && (and)

|| (or)

gegevenstypen

U moet not casten, convert, or of anders het gegevenstype van een kolom orvalue dat u in een DAX formule gebruikt, opgeven. Wanneer u gegevens in een DAX-formule gebruikt, identificeert DAX automatisch de gegevenstypen in de kolommen waarnaar wordt verwezen and van de values die u invoert, en voert and impliciete conversies uit waar nodig om de opgegeven bewerking te voltooien.

if u bijvoorbeeld een getal probeert toe te voegen aan een datevalue, zal de engine de bewerking interpreteren in de context van de functie, andconvert de getallen naar een gemeenschappelijk gegevenstype en and vervolgens het resultaat presenteren in de beoogde format, een date.

Er zijn echter enkele beperkingen voor de values die succesvol kunnen worden geconverteerd. If een valueor een kolom een gegevenstype heeft dat niet compatibel is met de huidige bewerking, retourneert DAX een error. DAX biedt ook not functies waarmee u expliciet kunt wijzigen, convert, or het gegevenstype van bestaande gegevens die u in een gegevensmodel hebt geïmporteerd, kunt casten.

Belangrijk

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

Sommige functies retourneren scalaire values, inclusief tekenreeksen, terwijl andere functies werken met getallen, zowel gehele getallen and als reële getallen or, en daarnaast met datums and en tijden. Het gegevenstype dat voor elke functie is vereist, wordt beschreven in de sectie, DAX functies.

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

Date and time

DAX slaat dateandtimevalues op met behulp van het gegevenstype datum/tijd dat wordt gebruikt door Microsoft SQL Server. Datetime format gebruikt een float-getal waarbij Datevalues corresponderen met het gehele getal dat het aantal dagen sinds 30 december 1899 aangeeft. Time values overeenkomen met het decimaal gedeelte van een datevalue waarbij uren, minuten and seconden worden weergegeven door decimale breuken van een day. DAX date and time functies impliciet convert argumenten voor het gegevenstype datum/tijd.

Notitie

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

letterlijke Dateandtime

Vanaf de versie van augustus 2021 van Power BI Desktop kan DAXdateand datum/tijd-values worden opgegeven als een letterlijke waarde in de formatdt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss", ordt"YYYY-MM-DD hh:mm:ss". Als de functies DATE, TIME, DATEVALUE, TIMEVALUE als letterlijke waarde in de expressie zijn opgegeven, zijn not noodzakelijk.

In de volgende expressie worden bijvoorbeeld de functies DATEandTIME gebruikt op OrderDate om te filter.

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

Dezelfde filter expressie 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 DAXdateand datum/tijd-getypte letterlijke waarde format wordt in not ondersteund in all versies van Power BI Desktop, Analysis Services, andPower Pivot in Excel. Nieuwe and bijgewerkte DAX-functionaliteiten worden doorgaans first geïntroduceerd in Power BI Desktop and en worden later opgenomen in Analysis Services andPower Pivot in Excel.