Del via


DAX-syntaks

Denne artikkelen beskriver syntaks og krav for dax-formeluttrykksspråket.

Syntakskrav

En DAX-formel starter alltid med et likhetstegn (=). Etter likhetstegnet kan du angi et uttrykk som evalueres til en skalar, eller et uttrykk som kan konverteres til en skalar. Disse inkluderer følgende:

  • En skalarkonstant eller et uttrykk som bruker en skalaroperator (+,-,*,/,>=,...,&&; ...)

  • Referanser til kolonner eller tabeller. DAX-språket bruker alltid tabeller og kolonner som inndata til funksjoner, aldri en matrise eller et vilkårlig sett med verdier.

  • Operatorer, konstanter og verdier som er angitt som en del av et uttrykk.

  • Resultatet av en funksjon og de nødvendige argumentene. Noen DAX-funksjoner returnerer en tabell i stedet for en skalar, og må pakkes inn i en funksjon som evaluerer tabellen og returnerer en skalar. med mindre tabellen er en enkelt kolonne, en radtabell, behandles den som en skalarverdi.

    De fleste DAX-funksjoner krever ett eller flere argumenter, som kan omfatte tabeller, kolonner, uttrykk og verdier. Noen funksjoner, for eksempel PI, krever imidlertid ingen argumenter, men krever alltid parenteser for å angi nullargumentet. Du må for eksempel alltid skrive inn PI(), ikke PI. Du kan også neste funksjoner i andre funksjoner.

  • Uttrykk. Et uttrykk kan inneholde følgende: operatorer, konstanter eller referanser til kolonner.

Følgende er for eksempel alle gyldige formler.

Formel Resultat
= 3 3
= "Salg" Sales
= 'Salg'[Beløp] Hvis du bruker denne formelen i Salg-tabellen, får du verdien av kolonnebeløpet i Salg-tabellen for gjeldende rad.
= (0,03 *[Beløp])

=0,03 * [Beløp]
Tre prosent av verdien i Beløp-kolonnen i gjeldende tabell.

Selv om denne formelen kan brukes til å beregne en prosentdel, vises ikke resultatet som en prosentdel med mindre du bruker formatering i tabellen.
= PI() Verdien for konstant pi.

Formler kan fungere annerledes avhengig av hvordan de brukes. Du må alltid være oppmerksom på konteksten og hvordan dataene du bruker i formelen, er relatert til andre data som kan brukes i beregningen.

Navnekrav

En datamodell inneholder ofte flere tabeller. Sammen utgjør tabellene og kolonnene en database som er lagret i analysemotoren i minnet (VertiPaq). I denne databasen må alle tabeller ha unike navn. Navnene på kolonnene må også være unike i hver tabell. Alle objektnavn skiller mellom store og små bokstaver. Navnene SALG og Salg representerer for eksempel den samme tabellen.

Hver kolonne og måling du legger til i en eksisterende datamodell, må tilhøre en bestemt tabell. Du angir tabellen som inneholder kolonnen, enten implisitt, når du oppretter en beregnet kolonne i en tabell, eller eksplisitt, når du oppretter et mål og angir navnet på tabellen der måldefinisjonen skal lagres.

Når du bruker en tabell eller kolonne som inndata til en funksjon, må du vanligvis kvalifisere kolonnenavnet. Det fullstendige navnet på en kolonne er tabellnavnet, etterfulgt av kolonnenavnet i hakeparenteser: for eksempel «Salg i USA»[Produkter]. Et fullstendig navn kreves alltid når du refererer til en kolonne i følgende kontekster:

  • Som et argument for funksjonen, VERDIER

  • Som et argument for funksjonene, ALL eller ALLEXCEPT

  • I et filterargument for funksjonene CALCULATE eller CALCULATETABLE

  • Som et argument for funksjonen, RELATEDTABLE

  • Som et argument for enhver tidsintelligensfunksjon

Et ukvalifisert kolonnenavn er bare navnet på kolonnen, omsluttet av hakeparenteser: for eksempel [Salgsbeløp]. Når du for eksempel refererer til en skalarverdi fra samme rad i gjeldende tabell, kan du bruke det ukvalifiserte kolonnenavnet.

Hvis navnet på en tabell inneholder mellomrom, reserverte nøkkelord eller tegn som ikke er tillatt, må du omslutte tabellnavnet i enkle anførselstegn. Du må også omslutte tabellnavn i anførselstegn hvis navnet inneholder tegn utenfor det alfanumeriske ANSI-tegnområdet, uavhengig av om den nasjonale innstillingen støtter tegnsettet eller ikke. Hvis du for eksempel åpner en arbeidsbok som inneholder tabellnavn skrevet i kyrilliske tegn, for eksempel Таблица, må tabellnavnet omsluttes av anførselstegn, selv om det ikke inneholder mellomrom.

Merk

Hvis du vil gjøre det enklere å skrive inn de fullstendige navnene på kolonnene, kan du bruke Autofullfør-funksjonen i redigeringsprogrammet for formler.

Tabeller

  • Tabellnavn kreves når kolonnen er fra en annen tabell enn den gjeldende tabellen. Tabellnavn må være unike i databasen.

  • Tabellnavn må være omsluttet av enkle anførselstegn hvis de inneholder mellomrom, andre spesialtegn eller andre ikke-engelske alfanumeriske tegn.

Measures

  • Målnavn må alltid være i hakeparenteser.

  • Målnavn kan inneholde mellomrom.

  • Hvert målnavn må være unikt i en modell. Tabellnavnet er derfor valgfritt foran et målnavn når du refererer til et eksisterende mål. Når du oppretter et mål, må du imidlertid alltid angi en tabell der måldefinisjonen skal lagres.

Kolonner

Kolonnenavn må være unike i konteksten til en tabell. Flere tabeller kan imidlertid ha kolonner med samme navn (entydighet leveres med tabellnavnet).

Generelt sett kan kolonner refereres til uten å referere til basistabellen de tilhører, bortsett fra når det kan være en navnekonflikt å løse eller med bestemte funksjoner som krever at kolonnenavn er fullstendig kvalifisert.

Reserverte nøkkelord

Hvis navnet du bruker for en tabell, er det samme som et reservert nøkkelord for Analysis Services, utløses en feil, og du må gi tabellen et nytt navn. Du kan imidlertid bruke nøkkelord i objektnavn hvis objektnavnet er omsluttet av hakeparenteser (for kolonner) eller anførselstegn (for tabeller).

Merk

Anførselstegn kan representeres av flere forskjellige tegn, avhengig av programmet. Hvis du limer inn formler fra et eksternt dokument eller en ekstern nettside, må du kontrollere ASCII-koden for tegnet som brukes til å åpne og lukke anførselstegn, for å sikre at de er like. Hvis ikke kan DAX gjenkjenne symbolene som anførselstegn, noe som gjør referansen ugyldig.

Spesialtegn

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

  • Innledende eller etterfølgende mellomrom; med mindre mellomrommene er omsluttet av navneskilletegn, hakeparenteser eller enkle apostrofer.

  • Kontrolltegn

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

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

Eksempler på objektnavn

Tabellen nedenfor viser eksempler på noen objektnavn:

Objekttyper Eksempler Merknad
Tabellnavn Sales Hvis tabellnavnet ikke inneholder mellomrom eller andre spesialtegn, trenger ikke navnet omsluttes av anførselstegn.
Tabellnavn 'Salg i Canada' Hvis navnet inneholder mellomrom, tabulatorer eller andre spesialtegn, setter du navnet i enkle anførselstegn.
Fullstendig kolonnenavn Salg[Beløp] Tabellnavnet står foran kolonnenavnet, og kolonnenavnet er omsluttet av hakeparenteser.
Fullstendig målnavn Salg[Fortjeneste] Tabellnavnet står foran målnavnet, og målnavnet er omsluttet av hakeparenteser. I visse sammenhenger kreves alltid et fullstendig navn.
Ukvalifisert kolonnenavn [Beløp] Det ukvalifiserte navnet er bare kolonnenavnet, i hakeparenteser. Kontekster der du kan bruke det ukvalifiserte navnet inkluderer formler i en beregnet kolonne i samme tabell, eller i en aggregasjonsfunksjon som skanner over samme tabell.
Fullstendig kolonne i tabell med mellomrom 'Canada Salg'[Antall] Tabellnavnet inneholder mellomrom, så det må være omgitt av enkle anførselstegn.

Andre begrensninger

Syntaksen som kreves for hver funksjon, og hvilken type operasjon den kan utføre, varierer sterkt avhengig av funksjonen. Generelt gjelder imidlertid følgende regler for alle formler og uttrykk:

  • DAX-formler og uttrykk kan ikke endre eller sette inn individuelle verdier i tabeller.

  • Du kan ikke opprette beregnede rader ved hjelp av DAX. Du kan bare opprette beregnede kolonner og mål.

  • Når du definerer beregnede kolonner, kan du neste funksjoner til et hvilket som helst nivå.

  • DAX har flere funksjoner som returnerer en tabell. Vanligvis bruker du verdiene som returneres av disse funksjonene som inndata til andre funksjoner, som krever en tabell som inndata.

DAX-operatorer og konstanter

Tabellen nedenfor viser operatorene som støttes av DAX. Hvis du vil ha mer informasjon om syntaksen for individuelle operatorer, kan du se DAX-operatorer.

Operatortype Symbol og bruk
Parentesoperator () prioritetsrekkefølge og gruppering av argumenter
Aritmetiske operatorer + (tillegg)

- (subtraksjon/

signer)

* (multiplikasjon)

/ (divisjon)

^ (eksponentiasjon)
Sammenligningsoperatorer = (lik)

> (større enn)

< (mindre enn)

>= (større enn eller lik)

<= (mindre enn eller lik)

<> (ikke lik)
Sammenslåingsoperator for tekst &(sammenkobling)
Logikkoperatorer && & (og)

|| (eller)

Datatyper

Du trenger ikke å kaste, konvertere eller på annen måte angi datatypen for en kolonne eller verdi som du bruker i en DAX-formel. Når du bruker data i en DAX-formel, identifiserer DAX automatisk datatypene i refererte kolonner og verdiene du skriver inn, og utfører implisitte konverteringer der det er nødvendig for å fullføre den angitte operasjonen.

Hvis du for eksempel prøver å legge til et tall i en datoverdi, tolker motoren operasjonen i konteksten til funksjonen, og konverterer tallene til en felles datatype, og deretter presenterer resultatet i det tiltenkte formatet, en dato.

Det finnes imidlertid noen begrensninger på verdiene som kan konverteres. Hvis en verdi eller kolonne har en datatype som ikke er kompatibel med gjeldende operasjon, returnerer DAX en feil. DAX tilbyr heller ikke funksjoner som lar deg eksplisitt endre, konvertere eller kaste datatypen for eksisterende data som du har importert til en datamodell.

Viktig

DAX støtter ikke bruk av variantdatatypen. Når du laster inn eller importerer data til en datamodell, forventes det derfor at dataene i hver kolonne vanligvis er av en konsekvent datatype.

Noen funksjoner returnerer skalarverdier, inkludert strenger, mens andre funksjoner fungerer med tall, både heltall og reelle tall eller datoer og klokkeslett. Datatypen som kreves for hver funksjon, beskrives i delen DAX-funksjoner.

Du kan bruke tabeller som inneholder flere kolonner og flere rader med data som argument for en funksjon. Noen funksjoner returnerer også tabeller, som lagres i minnet og kan brukes som argumenter til andre funksjoner.

Dato og klokkeslett

DAX lagrer dato- og klokkeslettverdier ved hjelp av datatypen datetime som brukes av Microsoft SQL Server. Datetime-format bruker et flyttall der datoverdier tilsvarer heltallsdelen som representerer antall dager siden 30. desember 1899. Tidsverdier tilsvarer desimaldelen av en datoverdi der timer, minutter og sekunder representeres av desimalfraksjoner av en dag. DAX-dato- og klokkeslettfunksjoner konverterer implisitt argumenter til datetime-datatypen.

Merk

Den nøyaktige maksimale DateTime-verdien som støttes av DAX, er 31. desember 9999 00:00:00.

Dato- og klokkeslettlitteral

Fra og med august 2021-versjonen av Power BI Desktop kan DAX-dato- og datetime-verdier angis som litteral i formatet dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"eller dt"YYYY-MM-DD hh:mm:ss". Når angitt som litteral, er ikke bruk av DATO, KLOKKESLETT, DATOVERDI, TIDSVERDI-funksjoner i uttrykket nødvendig.

Følgende uttrykk bruker for eksempel DATO- og KLOKKESLETT-funksjoner til å filtrere etter Ordredato:

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

Det samme filteruttrykket kan angis som en litteral:

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

Merk

Dax-dato- og datetime-skrevet litteralformat støttes ikke i alle versjoner av Power BI Desktop, Analysis Services og Power Pivot i Excel. Ny og oppdatert DAX-funksjonalitet introduseres vanligvis først i Power BI Desktop og deretter senere inkludert i Analysis Services og Power Pivot i Excel.