Share via


DAX-syntaks

I denne artikel beskrives syntaksen og kravene til DAX-formeludtrykssproget.

Syntakskrav

En DAX-formel starter altid med et lighedstegn (=). Efter lighedstegnet kan du angive et hvilket som helst udtryk, der evalueres til en skalar, eller et udtryk, der kan konverteres til en skalar. Disse omfatter følgende:

  • En skalarkonstant eller et udtryk, der bruger en skalaroperator (+,-,*,/,>=,...,&, ...)

  • Referencer til kolonner eller tabeller. DAX-sproget bruger altid tabeller og kolonner som input til funktioner, aldrig en matrix eller et vilkårligt værdisæt.

  • Operatorer, konstanter og værdier, der er angivet som en del af et udtryk.

  • Resultatet af en funktion og dens påkrævede argumenter. Nogle DAX-funktioner returnerer en tabel i stedet for en skalar og skal ombrydes i en funktion, der evaluerer tabellen og returnerer en skalar. medmindre tabellen er en enkelt kolonne, en tabel med en enkelt række, behandles den som en skalarværdi.

    De fleste DAX-funktioner kræver et eller flere argumenter, som kan omfatte tabeller, kolonner, udtryk og værdier. Nogle funktioner, f.eks. PI, kræver dog ikke nogen argumenter, men kræver altid parenteser for at angive null-argumentet. Du skal f.eks. altid skrive PI(), ikke PI. Du kan også indlejre funktioner i andre funktioner.

  • Udtryk. Et udtryk kan indeholde en eller flere af følgende: operatorer, konstanter eller referencer til kolonner.

Følgende er f.eks. alle gyldige formler.

Formula Resultat
= 3 3
= "Salg" Salg
= 'Salg'[Beløb] Hvis du bruger denne formel i tabellen Sales, får du værdien af kolonnen Amount i tabellen Sales for den aktuelle række.
= (0,03 *[Beløb])

=0,03 * [Beløb]
Tre procent af værdien i kolonnen Amount i den aktuelle tabel.

Selvom denne formel kan bruges til at beregne en procentdel, vises resultatet ikke som en procentdel, medmindre du anvender formatering i tabellen.
= PI() Værdien af konstanten pi.

Formler kan fungere anderledes, afhængigt af hvordan de bruges. Du skal altid være opmærksom på konteksten, og hvordan de data, du bruger i formlen, er relateret til andre data, der kan bruges i beregningen.

Krav til navngivning

En datamodel indeholder ofte flere tabeller. Tilsammen udgør tabellerne og deres kolonner en database, der er gemt i analyseprogrammet i hukommelsen (VertiPaq). Alle tabeller skal have entydige navne i databasen. Navnene på kolonner skal også være entydige i hver tabel. Der skelnes ikke mellem store og små bogstaver i alle objektnavne. Navnene SALES og Sales repræsenterer f.eks. den samme tabel.

Hver kolonne og måling, du føjer til en eksisterende datamodel, skal tilhøre en bestemt tabel. Du angiver den tabel, der indeholder kolonnen, enten implicit, når du opretter en beregnet kolonne i en tabel eller eksplicit, når du opretter en måling og angiver navnet på den tabel, hvor målingsdefinitionen skal gemmes.

Når du bruger en tabel eller kolonne som input til en funktion, skal du generelt kvalificere kolonnenavnet. Det fuldt kvalificerede navn på en kolonne er tabelnavnet efterfulgt af kolonnenavnet i kantede parenteser, f.eks. 'U.S. Sales'[Products]. Der kræves altid et fuldt kvalificeret navn, når du refererer til en kolonne i følgende kontekster:

  • Som et argument til funktionen VALUES

  • Som et argument til funktionerne ALL eller ALLEXCEPT

  • I et filterargument for funktionerne CALCULATE eller CALCULATETABLE

  • Som et argument til funktionen RELATEDTABLE

  • Som et argument til en hvilken som helst time intelligence-funktion

Et ikke-kvalificeret kolonnenavn er blot navnet på kolonnen, omsluttet af kantede parenteser, f.eks. [Salgsbeløb]. Når du f.eks. refererer til en skalarværdi fra den samme række i den aktuelle tabel, kan du bruge det ikke-kvalificerede kolonnenavn.

Hvis navnet på en tabel indeholder mellemrum, reserverede nøgleord eller ikke-tilladte tegn, skal tabelnavnet være omsluttet af enkelte anførselstegn. Du skal også sætte tabelnavne i anførselstegn, hvis navnet indeholder tegn uden for det alfanumeriske ANSI-tegnområde, uanset om landestandarden understøtter tegnsættet eller ej. Hvis du f.eks. åbner en projektmappe, der indeholder tabelnavne skrevet med kyrilliske tegn, f.eks. 'Таблица', skal tabelnavnet være omsluttet af anførselstegn, selvom det ikke indeholder mellemrum.

Bemærk

Hvis du vil gøre det nemmere at angive de fuldt kvalificerede navne på kolonner, skal du bruge funktionen Autofuldførelse i formeleditoren.

Tabeller

  • Tabelnavne kræves, når kolonnen er fra en anden tabel end den aktuelle tabel. Tabelnavne skal være entydige i databasen.

  • Tabelnavne skal være omsluttet af enkelte anførselstegn, hvis de indeholder mellemrum, andre specialtegn eller alfanumeriske tegn, der ikke er engelske.

Målinger

  • Målingsnavne skal altid være i kantede parenteser.

  • Målingsnavne kan indeholde mellemrum.

  • Hvert målingsnavn skal være entydigt i en model. Tabelnavnet er derfor valgfrit foran et målingsnavn, når der refereres til en eksisterende måling. Men når du opretter en måling, skal du altid angive en tabel, hvor målingsdefinitionen gemmes.

Kolonner

Kolonnenavne skal være entydige i en tabels kontekst. Flere tabeller kan dog have kolonner med de samme navne (flertydige udtryk følger med tabelnavnet).

Der kan generelt refereres til kolonner uden at referere til den basistabel, de tilhører, undtagen når der kan være en navnekonflikt, der kan løses, eller med visse funktioner, der kræver, at kolonnenavnene er fuldt kvalificerede.

Reserverede nøgleord

Hvis det navn, du bruger til en tabel, er det samme som et reserveret Analysis Services-nøgleord, udløses der en fejl, og du skal omdøbe tabellen. Du kan dog bruge nøgleord i objektnavne, hvis objektnavnet er omsluttet af kantede parenteser (for kolonner) eller anførselstegn (for tabeller).

Bemærk

Anførselstegn kan repræsenteres af flere forskellige tegn, afhængigt af programmet. Hvis du indsætter formler fra et eksternt dokument eller en webside, skal du kontrollere ASCII-koden for det tegn, der bruges til at åbne og lukke anførselstegn, for at sikre, at de er ens. Ellers kan DAX muligvis ikke genkende symbolerne som anførselstegn, hvilket gør referencen ugyldig.

Specialtegn

Følgende tegn og tegntyper er ikke gyldige i navnene på tabeller, kolonner eller målinger:

  • Foran- eller efterstillede mellemrum; medmindre mellemrummene er omsluttet af navneafgrænsere, kantede parenteser eller enkelte apostroffer.

  • Styretegn

  • Følgende tegn, der ikke er gyldige i navnene på objekter:

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

Eksempler på objektnavne

I følgende tabel vises eksempler på nogle objektnavne:

Objekttyper Eksempler Kommentar
Tabelnavn Salg Hvis tabelnavnet ikke indeholder mellemrum eller andre specialtegn, behøver navnet ikke at være omsluttet af anførselstegn.
Tabelnavn 'Canada Sales' Hvis navnet indeholder mellemrum, tabulatorer eller andre specialtegn, skal navnet være omsluttet af enkelte anførselstegn.
Fuldt kvalificeret kolonnenavn Salg[Beløb] Tabelnavnet står foran kolonnenavnet, og kolonnenavnet er omsluttet af kantede parenteser.
Fuldt kvalificeret målingsnavn Sales[Profit] Tabelnavnet står foran målingsnavnet, og målingsnavnet er omsluttet af kantede parenteser. I visse kontekster kræves der altid et fuldt kvalificeret navn.
Ikke-kvalificeret kolonnenavn [Beløb] Det ikke-kvalificerede navn er kun kolonnenavnet i kantede parenteser. Kontekster, hvor du kan bruge det ikke-kvalificerede navn, indeholder formler i en beregnet kolonne i den samme tabel eller i en sammenlægningsfunktion, der scanner over den samme tabel.
Fuldt kvalificeret kolonne i tabel med mellemrum 'Canada Sales'[Qty] Tabelnavnet indeholder mellemrum, så det skal være omgivet af enkelte anførselstegn.

Andre begrænsninger

Den syntaks, der kræves for hver funktion, og den type handling, den kan udføre, varierer meget afhængigt af funktionen. Generelt gælder følgende regler dog for alle formler og udtryk:

  • DAX-formler og -udtryk kan ikke ændre eller indsætte individuelle værdier i tabeller.

  • Du kan ikke oprette beregnede rækker ved hjælp af DAX. Du kan kun oprette beregnede kolonner og målinger.

  • Når du definerer beregnede kolonner, kan du indlejre funktioner på et hvilket som helst niveau.

  • DAX har flere funktioner, der returnerer en tabel. Du bruger typisk de værdier, der returneres af disse funktioner, som input til andre funktioner, som kræver en tabel som input.

DAX-operatorer og -konstanter

I følgende tabel vises de operatorer, der understøttes af DAX. Du kan få flere oplysninger om syntaksen for individuelle operatorer under DAX-operatorer.

Operatortype Symbol og brug
Parentesoperator () rækkefølge og gruppering af argumenter
Aritmetiske operatorer + (tilføjelse)

- (subtraktion/

tegn)

* (multiplikation)

/ (division)

^ (eksponentiering)
Sammenligningsoperatorer = (lig med)

> (større end)

< (mindre end)

>= (større end eller lig med)

<= (mindre end eller lig med)

<> (ikke lig med)
Tekstsammenkædningsoperator & (sammenkædning)
Logiske operatorer & (og)

|| (eller)

Datatyper

Du behøver ikke at caste, konvertere eller på anden måde angive datatypen for en kolonne eller værdi, som du bruger i en DAX-formel. Når du bruger data i en DAX-formel, identificerer DAX automatisk datatyperne i kolonner, der refereres til, og de værdier, du skriver i, og udfører implicitte konverteringer, hvor det er nødvendigt for at fuldføre den angivne handling.

Hvis du f.eks. forsøger at føje et tal til en datoværdi, fortolker programmet handlingen i funktionens kontekst og konverterer tallene til en fælles datatype og præsenterer derefter resultatet i det tilsigtede format, en dato.

Der er dog nogle begrænsninger for de værdier, der kan konverteres korrekt. Hvis en værdi eller en kolonne har en datatype, der ikke er kompatibel med den aktuelle handling, returnerer DAX en fejl. DAX indeholder heller ikke funktioner, der giver dig mulighed for eksplicit at ændre, konvertere eller caste datatypen for eksisterende data, som du har importeret, til en datamodel.

Vigtigt

DAX understøtter ikke brug af datatypen variant. Når du indlæser eller importerer data i en datamodel, forventes det derfor, at dataene i hver kolonne generelt er af en ensartet datatype.

Nogle funktioner returnerer skalarværdier, herunder strenge, mens andre funktioner arbejder med tal, både heltal og reelle tal eller datoer og klokkeslæt. Den datatype, der kræves for hver funktion, er beskrevet i afsnittet DAX-funktioner.

Du kan bruge tabeller, der indeholder flere kolonner og flere rækker med data, som argument til en funktion. Nogle funktioner returnerer også tabeller, som er gemt i hukommelsen og kan bruges som argumenter til andre funktioner.

Dato og klokkeslæt

DAX gemmer dato- og klokkeslætsværdier ved hjælp af datatypen datetime, der bruges af Microsoft SQL Server. Datetime-formatet bruger et flydende tal, hvor datoværdier svarer til heltalsdelen, der repræsenterer antallet af dage siden 30. december 1899. Klokkeslætsværdier svarer til decimaldelen af en datoværdi, hvor Timer, minutter og sekunder repræsenteres af decimalbrøker af en dag. DAX-dato- og klokkeslætsfunktioner konverterer implicit argumenter til datatypen datetime.

Bemærk

Den nøjagtige maksimale DateTime-værdi, der understøttes af DAX, er 31. december 9999 kl. 00:00:00.

Konstant for dato og klokkeslæt

Fra og med august 2021-versionen af Power BI Desktop kan DAX-værdier for dato og klokkeslæt angives som en konstant i formatet dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"eller dt"YYYY-MM-DD hh:mm:ss". Når det er angivet som en konstant, er det ikke nødvendigt at bruge funktionerne DATE, TIME, DATEVALUE og TIMEVALUE i udtrykket.

Følgende udtryk bruger f.eks. funktionerne DATE og TIME til at filtrere efter OrderDate:

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

Det samme filterudtryk kan angives som en konstant:

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

Bemærk

DAX-dato- og datetime-type-konstantformatet understøttes ikke i alle versioner af Power BI Desktop, Analysis Services og Power Pivot i Excel. Ny og opdateret DAX-funktionalitet introduceres typisk først i Power BI Desktop og derefter senere inkluderet i Analysis Services og Power Pivot i Excel.