Oversigt over DAX
DAX (Data Analysis Expressions) er et formeludtrykssprog, der bruges i Analysis Services, Power BI og Power Pivot i Excel. DAX-formler omfatter funktioner, operatorer og værdier til at udføre avancerede beregninger og forespørgsler på data i relaterede tabeller og kolonner i tabeldatamodeller.
Denne artikel indeholder kun en grundlæggende introduktion til de vigtigste begreber i DAX. Den beskriver DAX, som den gælder for alle de produkter, der bruger den. Nogle funktioner gælder muligvis ikke for visse produkter eller use cases. Se dokumentationen til dit produkt, der beskriver den særlige implementering af DAX.
Beregninger
DAX-formler bruges i målinger, beregnede kolonner, beregnede tabeller og sikkerhed på rækkeniveau.
Målinger
Målinger er dynamiske beregningsformler, hvor resultaterne ændres afhængigt af konteksten. Målinger bruges i rapportering, der understøtter kombination og filtrering af modeldata ved hjælp af flere attributter, f.eks. en Power BI-rapport eller en Excel-pivottabel eller et pivotdiagram. Målinger oprettes ved hjælp af DAX-formellinjen i modeldesigneren.
En formel i en måling kan bruge standardsammenlægningsfunktioner, der oprettes automatisk ved hjælp af funktionen Autosum, f.eks. COUNT eller SUM, eller du kan definere din egen formel ved hjælp af DAX-formellinjen. Navngivne målinger kan overføres som et argument til andre målinger.
Når du definerer en formel for en måling på formellinjen, viser en funktion af typen Værktøjstip et eksempel på, hvad resultaterne ville være for totalen i den aktuelle kontekst, men ellers vises resultaterne ikke med det samme nogen steder. Årsagen til, at du ikke kan se (filtrerede) resultater af beregningen med det samme, er, at resultatet af en måling ikke kan bestemmes uden kontekst. Hvis du vil evaluere en måling, kræver det et rapporteringsklientprogram, der kan levere den kontekst, der er nødvendig for at hente de data, der er relevante for hver celle, og derefter evaluere udtrykket for hver celle. Klienten kan være en Excel-pivottabel eller et pivotdiagram, en Power BI-rapport eller et tabeludtryk i en DAX-forespørgsel i SQL Server Management Studio (SSMS).
Uanset klienten køres der en separat forespørgsel for hver celle i resultaterne. Det vil sige, at hver kombination af række- og kolonneoverskrifter i en pivottabel eller hvert valg af udsnit og filtre i en Power BI-rapport genererer et andet undersæt af data, som målingen beregnes for. Brug f.eks. denne meget enkle målingsformel:
Total Sales = SUM([Sales Amount])
Når en bruger placerer målingen TotalSales i en rapport og derefter placerer kolonnen Product Category fra en produkttabel i Filtre, beregnes og vises summen af Sales Amount for hver produktkategori.
I modsætning til beregnede kolonner indeholder syntaksen for en måling målingens navn før formlen. I det eksempel, der lige er angivet, vises navnet Total Sales foran formlen. Når du har oprettet en måling, vises navnet og dens definition på listen Felter i klientprogrammet til rapportering, og afhængigt af perspektiver og roller er det tilgængeligt for alle brugere af modellen.
Du kan få mere at vide under:
Målinger i Power BI Desktop
Målinger i Analysis Services
Målinger i Power Pivot
Beregnede kolonner
En beregnet kolonne er en kolonne, som du føjer til en eksisterende tabel (i modeldesigneren) og derefter opretter en DAX-formel, der definerer kolonnens værdier. Når en beregnet kolonne indeholder en gyldig DAX-formel, beregnes værdierne for hver række, så snart formlen indtastes. Værdier gemmes derefter i datamodellen i hukommelsen. Når formlen f.eks. indtastes på formellinjen i en datotabel:
= [Calendar Year] & " Q" & [Calendar Quarter]
En værdi for hver række i tabellen beregnes ved at tage værdier fra kolonnen Calendar Year (i den samme datotabel), tilføje et mellemrum og stort Q og derefter tilføje værdierne fra kolonnen Calendar Quarter (i den samme datotabel). Resultatet for hver række i den beregnede kolonne beregnes med det samme og vises f.eks. som 1. kvartal 2017. Kolonneværdier genberegnes kun, hvis tabellen eller en relateret tabel behandles (opdateres), eller modellen fjernes fra hukommelsen og derefter indlæses igen, f.eks. når du lukker og åbner en Power BI Desktop-fil igen.
Du kan få mere at vide under:
Beregnede kolonner i Power BI Desktop
Beregnede kolonner i Analysis Services
Beregnede kolonner i Power Pivot.
Beregnede tabeller
En beregnet tabel er et beregnet objekt, der er baseret på et formeludtryk, der er afledt af alle eller en del af andre tabeller i den samme model. I stedet for at forespørge på og indlæse værdier i den nye tabels kolonner fra en datakilde definerer en DAX-formel tabellens værdier.
Beregnede tabeller kan være nyttige i en dimension med forskellige roller. Et eksempel er tabellen Date som OrderDate, ShipDate eller DueDate, afhængigt af relationen for den fremmede nøgle. Når du eksplicit opretter en beregnet tabel for ShipDate, får du en separat tabel, der er tilgængelig for forespørgsler, så den fungerer fuldt ud som en hvilken som helst anden tabel. Beregnede tabeller er også nyttige, når du konfigurerer et filtreret rækkesæt eller et undersæt eller en delmængde af kolonner fra andre eksisterende tabeller. Dette giver dig mulighed for at bevare den oprindelige tabel intakt, samtidig med at du opretter variationer af tabellen for at understøtte bestemte scenarier.
Beregnede tabeller understøtter relationer med andre tabeller. Kolonnerne i den beregnede tabel har datatyper, formatering og kan tilhøre en datakategori. Beregnede tabeller kan navngives og vises eller skjules på samme måde som enhver anden tabel. Beregnede tabeller beregnes igen, hvis nogen af de tabeller, den henter data fra, opdateres eller opdateres.
Du kan få mere at vide under:
Beregnede tabeller i Power BI Desktop
Beregnede tabeller i Analysis Services.
Sikkerhed på rækkeniveau
Med sikkerhed på rækkeniveau skal en DAX-formel evalueres til en boolesk TRUE/FALSE-betingelse, der definerer, hvilke rækker der kan returneres af resultaterne af en forespørgsel af medlemmer af en bestemt rolle. For medlemmer af rollen Sales kan du f.eks. se tabellen Customers med følgende DAX-formel:
= Customers[Country] = "USA"
Medlemmer af rollen Salg kan kun få vist data for kunder i USA, og aggregeringer, f.eks. SUM, returneres kun for kunder i USA. Sikkerhed på rækkeniveau er ikke tilgængelig i Power Pivot i Excel.
Når du definerer secuirty på rækkeniveau ved hjælp af DAX-formlen, opretter du et tilladt rækkesæt. Dette nægter ikke adgang til andre rækker. I stedet returneres de simpelthen ikke som en del af det tilladte rækkesæt. Andre roller kan give adgang til de rækker, der udelades af DAX-formlen. Hvis en bruger er medlem af en anden rolle, og denne rolles sikkerhed på rækkeniveau giver adgang til det pågældende rækkesæt, kan brugeren få vist data for den pågældende række.
Sikkerhedsformler på rækkeniveau gælder for de angivne rækker samt relaterede rækker. Når en tabel har flere relationer, anvender filtre sikkerhed for den aktive relation. Sikkerhedsformler på rækkeniveau vil blive gennemskæret med andre formler, der er defineret for relaterede tabeller.
Du kan få mere at vide under:
Sikkerhed på rækkeniveau med Power BI
Roller i Analysis Services
Forespørgsler
DAX-forespørgsler kan oprettes og køres i SSMS (SQL Server Management Studio) og værktøjer med åben kildekode, f.eks. DAX Studio (daxstudio.org). I modsætning til DAX-beregningsformler, som kun kan oprettes i tabeldatamodeller, kan DAX-forespørgsler også køres mod Flerdimensionelle Analysis Services-modeller. DAX-forespørgsler er ofte nemmere at skrive og mere effektive end MDX-forespørgsler (Multidimensional Data Expressions).
En DAX-forespørgsel er en sætning, der ligner en SELECT-sætning i T-SQL. Den mest grundlæggende type DAX-forespørgsel er en evalueringssætning . Eksempel
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Returnerer i Result en tabel, der kun viser de produkter med en Pengeskab tyStockLevel, der er mindre end 200, i stigende rækkefølge efter EnglishProductName.
Du kan oprette målinger som en del af forespørgslen. Målinger findes kun i forespørgslens varighed. Du kan få mere at vide under DAX-forespørgsler.
Formler
DAX-formler er vigtige for at oprette beregninger i beregnede kolonner og målinger og beskytte dine data ved hjælp af sikkerhed på rækkeniveau. Hvis du vil oprette formler for beregnede kolonner og målinger, skal du bruge formellinjen øverst i vinduet modeldesigner eller DAX-editoren. Hvis du vil oprette formler for sikkerhed på rækkeniveau, skal du bruge dialogboksen Rolleadministrator eller Administrer roller. Oplysningerne i dette afsnit er beregnet til at få dig i gang med at forstå de grundlæggende funktioner i DAX-formler.
Grundlæggende om formler
DAX-formler kan være meget enkle eller ret komplekse. I følgende tabel vises nogle eksempler på simple formler, der kan bruges i en beregnet kolonne.
Formel | Definition |
---|---|
= TODAY() |
Indsætter dags dato i hver række i en beregnet kolonne. |
= 3 |
Indsætter værdien 3 i hver række i en beregnet kolonne. |
= [Column1] + [Column2] |
Tilføjer værdierne i den samme række i [Column1] og [Column2] og placerer resultaterne i den beregnede kolonne i den samme række. |
Uanset om den formel, du opretter, er enkel eller kompleks, kan du bruge følgende trin, når du opretter en formel:
Hver formel skal begynde med et lighedstegn (=).
Du kan enten skrive eller vælge et funktionsnavn eller skrive et udtryk.
Begynd at skrive de første par bogstaver i den ønskede funktion eller det ønskede navn, og autofuldførelse viser en liste over tilgængelige funktioner, tabeller og kolonner. Tryk på TAB for at føje et element fra listen Autofuldførelse til formlen.
Du kan også klikke på knappen Fx for at få vist en liste over tilgængelige funktioner. Hvis du vil vælge en funktion på rullelisten, skal du bruge piletasterne til at fremhæve elementet og klikke på OK for at føje funktionen til formlen.
Angiv argumenterne til funktionen ved at vælge dem på en rulleliste over mulige tabeller og kolonner eller ved at skrive værdier.
Kontrollér, om der er syntaksfejl: Sørg for, at alle parenteser er lukket, og at der refereres korrekt til kolonner, tabeller og værdier.
Tryk på ENTER for at acceptere formlen.
Bemærk
Så snart du angiver formlen i en beregnet kolonne, og formlen valideres, udfyldes kolonnen med værdier. Hvis du trykker på ENTER for en måling, gemmes målingsdefinitionen sammen med tabellen. Hvis en formel er ugyldig, vises der en fejl.
Lad os i dette eksempel se på en formel i en måling med navnet Dage i det aktuelle kvartal:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Denne måling bruges til at oprette et sammenligningsforhold mellem en ufuldstændig periode og den forrige periode. Formlen skal tage højde for den del af perioden, der er forløbet, og sammenligne den med den samme andel i den forrige periode. I dette tilfælde angiver [Days Current Quarter to Date]/[Days in Current Quarter] den andel, der er forløbet i den aktuelle periode.
Denne formel indeholder følgende elementer:
Formelelement | Description |
---|---|
Days in Current Quarter |
Navnet på målingen. |
= |
Lighedstegnet (=) starter formlen. |
COUNTROWS |
COUNTROWS tæller antallet af rækker i tabellen Date |
() |
Venstre- og højreparentes angiver argumenter. |
DATESBETWEEN |
Funktionen DATESBETWEEN returnerer datoerne mellem den sidste dato for hver værdi i kolonnen Date i tabellen Date. |
'Date' |
Angiver tabellen Date. Tabeller er i enkelte anførselstegn. |
[Date] |
Angiver kolonnen Date i tabellen Date. Kolonnerne er i kantede parenteser. |
, |
|
STARTOFQUARTER |
Funktionen STARTOFQUARTER returnerer datoen for starten af kvartalet. |
LASTDATE |
Funktionen LASTDATE returnerer den sidste dato i kvartalet. |
'Date' |
Angiver tabellen Date. |
[Date] |
Angiver kolonnen Date i tabellen Date. |
, |
|
ENDOFQUARTER |
Funktionen ENDOFQUARTER |
'Date' |
Angiver tabellen Date. |
[Date] |
Angiver kolonnen Date i tabellen Date. |
Brug af autofuldførelse af formel
Autofuldførelse hjælper dig med at angive en gyldig formelsyntaks ved at give dig mulighed for at angive indstillinger for hvert element i formlen.
Du kan bruge autofuldførelse af formler midt i en eksisterende formel med indlejrede funktioner. Teksten umiddelbart før indsætningspunktet bruges til at vise værdier på rullelisten, og al tekst efter indsætningspunktet forbliver uændret.
Autofuldførelse tilføjer ikke den afsluttende parentes for funktioner eller matcher automatisk parenteser. Du skal sørge for, at hver funktion er syntaktisk korrekt, eller at du ikke kan gemme eller bruge formlen.
Brug af flere funktioner i en formel
Du kan indlejre funktioner, hvilket betyder, at du bruger resultaterne fra én funktion som et argument for en anden funktion. Du kan indlejre op til 64 niveauer af funktioner i beregnede kolonner. Indlejring kan dog gøre det svært at oprette eller foretage fejlfinding af formler. Mange funktioner er udviklet til udelukkende at blive brugt som indlejrede funktioner. Disse funktioner returnerer en tabel, som derfor ikke kan gemmes direkte. Den skal angives som input til en tabelfunktion. Funktionerne SUMX, AVERAGEX og MINX kræver f.eks. alle en tabel som det første argument.
Funktioner
En funktion er en navngiven formel i et udtryk. De fleste funktioner har obligatoriske og valgfrie argumenter, også kaldet parametre, som input. Når funktionen udføres, returneres en værdi. DAX indeholder funktioner, du kan bruge til at udføre beregninger ved hjælp af datoer og klokkeslæt, oprette betingede værdier, arbejde med strenge, udføre opslag baseret på relationer og muligheden for at gentage over en tabel for at udføre rekursive beregninger. Hvis du kender Excel-formler, vises mange af disse funktioner meget ens. DAX-formler er dog forskellige på følgende vigtige måder:
En DAX-funktion refererer altid til en komplet kolonne eller en tabel. Hvis du kun vil bruge bestemte værdier fra en tabel eller kolonne, kan du føje filtre til formlen.
Hvis du har brug for at tilpasse beregninger række for række, indeholder DAX funktioner, der giver dig mulighed for at bruge den aktuelle rækkeværdi eller en relateret værdi som en slags parameter til at udføre beregninger, der varierer efter kontekst. Du kan få mere at vide om, hvordan disse funktioner fungerer, i Kontekst i denne artikel.
DAX indeholder mange funktioner, der returnerer en tabel i stedet for en værdi. Tabellen vises ikke i en rapporteringsklient, men bruges til at angive input til andre funktioner. Du kan f.eks. hente en tabel og derefter tælle de entydige værdier i den eller beregne dynamiske summer på tværs af filtrerede tabeller eller kolonner.
DAX-funktioner omfatter en række forskellige time intelligence-funktioner . Med disse funktioner kan du definere eller vælge datoområder og udføre dynamiske beregninger baseret på disse datoer eller områder. Du kan f.eks. sammenligne summer på tværs af parallelle perioder.
Aggregeringsfunktioner
Sammenlægningsfunktioner beregner en (skalar)værdi, f.eks. antal, sum, gennemsnit, minimum eller maksimum for alle rækker i en kolonne eller tabel, som defineret af udtrykket. Du kan få mere at vide under Sammenlægningsfunktioner.
Funktioner for dato og klokkeslæt
Funktionerne for dato og klokkeslæt i DAX svarer til funktionerne for dato og klokkeslæt i Microsoft Excel. DAX-funktioner er dog baseret på datatypen datetime fra den 1. marts 1900. Du kan få mere at vide under Funktioner for dato og klokkeslæt.
Filterfunktioner
Filterfunktionerne i DAX returnerer bestemte datatyper, slår værdier op i relaterede fortællinger og filtrerer efter relaterede værdier. Opslagsfunktionerne fungerer ved hjælp af tabeller og relationer, f.eks. en database. Med filtreringsfunktionerne kan du manipulere datakontekst for at oprette dynamiske beregninger. Du kan få mere at vide under Filterfunktioner.
Finansielle funktioner
De økonomiske funktioner i DAX bruges i formler, der udfører økonomiske beregninger, f.eks. nettonutidsværdi og afkast. Disse funktioner svarer til de finansielle funktioner, der bruges i Microsoft Excel. Du kan få mere at vide under Finansielle funktioner.
Informationsfunktioner
En oplysningsfunktion kigger på den celle eller række, der er angivet som et argument, og fortæller dig, om værdien svarer til den forventede type. Funktionen ISERROR returnerer f.eks. TRUE, hvis den værdi, du refererer til, indeholder en fejl. Du kan få mere at vide under Informationsfunktioner.
Logiske funktioner
Logiske funktioner fungerer på et udtryk for at returnere oplysninger om værdierne i udtrykket. Funktionen TRUE giver dig f.eks. besked om, hvorvidt et udtryk, du evaluerer, returnerer en TRUE-værdi. Du kan få mere at vide under Logiske funktioner.
Matematiske og trigonometriske funktioner
De matematiske funktioner i DAX minder meget om de matematiske og trigonometriske Funktioner i Excel. Der er nogle mindre forskelle i de numeriske datatyper, der bruges af DAX-funktioner. Du kan få mere at vide under Funktioner til matematik og trigonometri.
Andre funktioner
Disse funktioner udfører entydige handlinger, der ikke kan defineres af nogen af de kategorier, de fleste andre funktioner tilhører. Du kan få mere at vide under Andre funktioner.
Relationsfunktioner
Relationsfunktioner i DAX giver dig mulighed for at returnere værdier fra en anden relateret tabel, angive en bestemt relation, der skal bruges i et udtryk, og angive tværgående filtreringsretning. Du kan få mere at vide under Relationsfunktioner.
Statistiske funktioner
Statistiske funktioner beregner værdier, der er relateret til statistiske fordelinger og sandsynligheder, f.eks. standardafvigelse og antal permutationer. Du kan få mere at vide under Statistiske funktioner.
Tekstfunktioner
Tekstfunktioner i DAX minder meget om deres modparter i Excel. Du kan returnere en del af en streng, søge efter tekst i en streng eller sammenkæde strengværdier. DAX indeholder også funktioner til styring af formater for datoer, klokkeslæt og tal. Du kan få mere at vide under Tekstfunktioner.
Time intelligence-funktioner
Med time intelligence-funktionerne i DAX kan du oprette beregninger, der bruger indbygget viden om kalendere og datoer. Ved at bruge tids- og datointervaller i kombination med sammenlægninger eller beregninger kan du oprette meningsfulde sammenligninger på tværs af sammenlignelige tidsperioder for salg, lager osv. Du kan få mere at vide under Time intelligence-funktioner (DAX).
Tabelmanipulationsfunktioner
Disse funktioner returnerer en tabel eller manipulerer eksisterende tabeller. Ved hjælp af ADDCOLUMNS kan du f.eks. føje beregnede kolonner til en angivet tabel, eller du kan returnere en oversigtstabel over et sæt grupper med funktionen SUMMARIZECOLUMNS. Du kan få mere at vide under Funktioner til tabelmanipulation.
Variabler
Du kan oprette variabler i et udtryk ved hjælp af VAR. VAR er teknisk set ikke en funktion. Det er et nøgleord til at gemme resultatet af et udtryk som en navngiven variabel. Denne variabel kan derefter overføres som et argument til andre målingsudtryk. Eksempler:
VAR
TotalQty = SUM ( Sales[Quantity] )
Return
IF (
TotalQty > 1000,
TotalQty * 0.95,
TotalQty * 1.25
)
I dette eksempel kan TotalQty overføres som en navngiven variabel til andre udtryk. Variabler kan være af enhver skalardatatype, herunder tabeller. Det kan være utroligt effektivt at bruge variabler i dine DAX-formler.
Datatyper
Du kan importere data til en model fra mange forskellige datakilder, der kan understøtte forskellige datatyper. Når du importerer data til en model, konverteres dataene til en af datatyperne for tabelmodellen. Når modeldataene bruges i en beregning, konverteres dataene derefter til en DAX-datatype for beregningens varighed og output. Når du opretter en DAX-formel, bestemmer de ord, der bruges i formlen, automatisk den returnerede værdidatatype.
DAX understøtter følgende datatyper:
Datatype i model | Datatype i DAX | Description |
---|---|---|
Helt tal | Et heltal på 64 bit (otte byte) heltalsværdi 1, 2 | Tal, der ikke har decimaler. Heltal kan være positive eller negative tal, men skal være heltal mellem -9.223.372.036.854.775.808 (-2^63) og 9.223.372.036.854.775.807 (2^63-1). |
Decimaltal | Et 64-bit (otte byte) reelt tal 1, 2 | Reelle tal er tal, der kan have decimaler. Reelle tal dækker en lang række værdier: Negative værdier fra -1,79E +308 til -2.23E -308 Nul Positive værdier fra 2,23E -308 til og med 1,79E + 308 Antallet af betydende cifre er dog begrænset til 17 decimaler. |
Boolean | Boolean | Enten værdien True eller False. |
Tekst | String | En datastreng med Unicode-tegn. Kan være strenge, tal eller datoer, der er repræsenteret i et tekstformat. |
Date | Dato/klokkeslæt | Datoer og klokkeslæt i en accepteret dato-/klokkeslætsrepræsentation. Gyldige datoer er alle datoer efter den 1. marts 1900. |
Valuta | Valuta | Valutadatatypen tillader værdier mellem -922.337.203.685.477,5808 til 922.337.203.685.477,5807 med fire decimaler med fast præcision. |
I/R | Blank | En tom er en datatype i DAX, der repræsenterer og erstatter SQL null-værdier. Du kan oprette en tom værdi ved hjælp af funktionen BLANK og teste, om der er tomme værdier, ved hjælp af den logiske funktion ISBLANK. |
Tabeldatamodeller omfatter også datatypen Tabel som input eller output til mange DAX-funktioner. Funktionen FILTER bruger f.eks. en tabel som input og skriver en anden tabel, der kun indeholder de rækker, der opfylder filterbetingelserne. Ved at kombinere tabelfunktioner med sammenlægningsfunktioner kan du udføre komplekse beregninger over dynamisk definerede datasæt.
Selvom datatyper typisk angives automatisk, er det vigtigt at forstå datatyper, og hvordan de især anvendes på DAX-formler. Fejl i formler eller uventede resultater skyldes f.eks. ofte brug af en bestemt operator, der ikke kan bruges sammen med en datatype, der er angivet i et argument. Formlen = 1 & 2
returnerer f.eks. et strengresultat på 12. Formlen = "1" + "2"
returnerer dog et heltalsresultat på 3.
Kontekst
Kontekst er et vigtigt begreb at forstå, når du opretter DAX-formler. Kontekst gør det muligt for dig at udføre dynamisk analyse, da resultaterne af en formel ændres for at afspejle den aktuelle række- eller cellemarkering og eventuelle relaterede data. Det er vigtigt at forstå kontekst og bruge kontekst effektivt for at skabe dynamiske analyser med høj ydeevne og for fejlfinding af problemer i formler.
Formler i tabelmodeller kan evalueres i en anden kontekst, afhængigt af andre designelementer:
- Filtre anvendt i en pivottabel eller rapport
- Filtre, der er defineret i en formel
- Relationer, der er angivet ved hjælp af specialfunktioner i en formel
Der er forskellige typer kontekst: rækkekontekst, forespørgselskontekst og filterkontekst.
Rækkekontekst
Rækkekontekst kan opfattes som "den aktuelle række". Hvis du opretter en formel i en beregnet kolonne, indeholder rækkekonteksten for den pågældende formel værdierne fra alle kolonner i den aktuelle række. Hvis tabellen er relateret til en anden tabel, indeholder indholdet også alle de værdier fra den anden tabel, der er relateret til den aktuelle række.
Lad os f.eks. antage, at du opretter en beregnet kolonne, , = [Freight] + [Tax]
der lægger værdier sammen fra to kolonner, Freight og Tax, fra den samme tabel. Denne formel henter automatisk kun værdierne fra den aktuelle række i de angivne kolonner.
Rækkekontekst følger også alle relationer, der er defineret mellem tabeller, herunder relationer, der er defineret i en beregnet kolonne ved hjælp af DAX-formler, for at bestemme, hvilke rækker i relaterede tabeller der er knyttet til den aktuelle række.
Følgende formel bruger f.eks. funktionen RELATED til at hente en momsværdi fra en relateret tabel baseret på det område, som ordren blev leveret til. Momsværdien bestemmes ved hjælp af værdien for området i den aktuelle tabel, opslag efter området i den relaterede tabel og derefter hente skattesatsen for det pågældende område fra den relaterede tabel.
= [Freight] + RELATED('Region'[TaxRate])
Denne formel henter skattesatsen for det aktuelle område fra tabellen Region og føjer den til værdien af kolonnen Freight. I DAX-formler behøver du ikke at kende eller angive den specifikke relation, der forbinder tabellerne.
Kontekst for flere rækker
DAX indeholder funktioner, der gentager beregninger over en tabel. Disse funktioner kan have flere aktuelle rækker med hver sin rækkekontekst. Disse funktioner giver dig i bund og grund mulighed for at oprette formler, der udfører handlinger rekursivt over en indre og ydre løkke.
Lad os f.eks. antage, at din model indeholder tabellen Products og tabellen Sales . Det kan være en god idé for brugerne at gennemgå hele salgstabellen, som er fuld af transaktioner, der involverer flere produkter, og finde det største bestilte antal for hvert produkt i en transaktion.
Med DAX kan du oprette en enkelt formel, der returnerer den korrekte værdi, og resultaterne opdateres automatisk, hver gang en bruger føjer data til tabellerne.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Du kan finde et detaljeret eksempel på denne formel under EARLIER.
Funktionen EARLIER gemmer rækkekonteksten fra den handling, der gik forud for den aktuelle handling. Funktionen gemmer altid to kontekstsæt i hukommelsen: Ét sæt kontekst repræsenterer den aktuelle række for formlens indre løkke, og et andet sæt kontekst repræsenterer den aktuelle række for formlens ydre løkke. DAX feeds automatisk værdier mellem de to løkker, så du kan oprette komplekse aggregeringer.
Forespørgselskontekst
Forespørgselskontekst refererer til det undersæt af data, der implicit hentes for en formel. Når en bruger f.eks. placerer en måling eller et felt i en rapport, undersøger programmet række- og kolonneoverskrifter, udsnit og rapportfiltre for at bestemme konteksten. De nødvendige forespørgsler køres derefter mod modeldata for at få det korrekte undersæt af data, foretage de beregninger, der er defineret af formlen, og derefter udfylde værdierne i rapporten.
Da konteksten ændres, afhængigt af hvor du placerer formlen, kan resultaterne af formlen også ændres. Lad os f.eks. antage, at du opretter en formel, der summerer værdierne i kolonnen Profit i tabellen Sales : = SUM('Sales'[Profit])
. Hvis du bruger denne formel i en beregnet kolonne i tabellen Sales , vil resultaterne for formlen være de samme for hele tabellen, fordi forespørgselskonteksten for formlen altid er hele datasættet i tabellen Sales . Resultaterne vil have overskud for alle områder, alle produkter, alle år osv.
Brugerne ønsker dog typisk ikke at se det samme resultat hundredvis af gange, men vil i stedet have overskud for et bestemt år, et bestemt land, et bestemt produkt eller en kombination af disse og derefter få en samlet total.
I en rapport ændres konteksten ved at filtrere, tilføje eller fjerne felter og bruge udsnit. For hver ændring den forespørgselskontekst, som målingen evalueres i. Derfor evalueres den samme formel, der bruges i en måling, i en anden forespørgselskontekst for hver celle.
Filterkontekst
Filterkontekst er det værdisæt, der er tilladt i hver kolonne eller i de værdier, der hentes fra en relateret tabel. Filtre kan anvendes på kolonnen i designeren eller i præsentationslag (rapporter og pivottabeller). Filtre kan også defineres eksplicit af filterudtryk i formlen.
Filterkontekst tilføjes, når du angiver filterbegrænsninger for det værdisæt, der er tilladt i en kolonne eller tabel, ved hjælp af argumenter til en formel. Filterkontekst gælder oven på andre kontekster, f.eks. rækkekontekst eller forespørgselskontekst.
I tabelmodeller er der mange måder at oprette filterkontekst på. I forbindelse med klienter, der kan forbruge modellen, f.eks. Power BI-rapporter, kan brugerne oprette filtre løbende ved at tilføje udsnit eller rapportfiltre i række- og kolonneoverskrifterne. Du kan også angive filterudtryk direkte i formlen, for at angive relaterede værdier, for at filtrere tabeller, der bruges som input, eller for dynamisk at hente kontekst for de værdier, der bruges i beregninger. Du kan også helt rydde eller selektivt rydde filtrene for bestemte kolonner. Dette er meget nyttigt, når du opretter formler, der beregner hovedtotaler.
Hvis du vil vide mere om, hvordan du opretter filtre i formler, skal du se FUNKTIONEN FILTER (DAX).
Du kan se et eksempel på, hvordan filtre kan ryddes for at oprette hovedtotaler, i FUNKTIONEN ALL (DAX).
Du kan finde eksempler på, hvordan du selektivt rydder og anvender filtre i formler, i ALLEXCEPT.
Bestemmelse af kontekst i formler
Når du opretter en DAX-formel, testes formlen først for gyldig syntaks og testes derefter for at sikre, at navnene på de kolonner og tabeller, der er inkluderet i formlen, findes i den aktuelle kontekst. Hvis en kolonne eller tabel, der er angivet i formlen, ikke blev fundet, returneres der en fejl.
Konteksten under validering (og genberegningshandlinger) bestemmes som beskrevet i de foregående afsnit ved hjælp af de tilgængelige tabeller i modellen, eventuelle relationer mellem tabellerne og eventuelle filtre, der er anvendt.
Hvis du f.eks. lige har importeret nogle data til en ny tabel, og den ikke er relateret til andre tabeller (og du ikke har anvendt nogen filtre), er den aktuelle kontekst hele sættet af kolonner i tabellen. Hvis tabellen er sammenkædet af relationer til andre tabeller, indeholder den aktuelle kontekst de relaterede tabeller. Hvis du føjer en kolonne fra tabellen til en rapport, der har udsnit og måske nogle rapportfiltre, er konteksten for formlen delsættet af data i hver celle i rapporten.
Kontekst er et effektivt koncept, der også kan gøre det svært at foretage fejlfinding af formler. Vi anbefaler, at du starter med enkle formler og relationer for at se, hvordan kontekst fungerer. Følgende afsnit indeholder nogle eksempler på, hvordan formler bruger forskellige konteksttyper til dynamisk at returnere resultater.
Operatorer
DAX-sproget bruger fire forskellige typer beregningsoperatorer i formler:
- Sammenligningsoperatorer til at sammenligne værdier og returnere en logisk TRUE\FALSE-værdi.
- Aritmetiske operatorer til at udføre aritmetiske beregninger, der returnerer numeriske værdier.
- Tekstsammenkædningsoperatorer for at joinforbinde to eller flere tekststrenge.
- Logiske operatorer, der kombinerer to eller flere udtryk for at returnere et enkelt resultat.
Du kan finde detaljerede oplysninger om operatorer, der bruges i DAX-formler, under DAX-operatorer.
Arbejde med tabeller og kolonner
Tabeller i tabellariske datamodeller ligner Excel-tabeller, men de fungerer anderledes med data og formler:
- Formler fungerer kun med tabeller og kolonner, ikke med individuelle celler, områdereferencer eller matrixer.
- Formler kan bruge relationer til at hente værdier fra relaterede tabeller. De værdier, der hentes, er altid relateret til den aktuelle rækkeværdi.
- Du kan ikke have uregelmæssige eller "ujævne" data, som du kan i et Excel-regneark. Hver række i en tabel skal indeholde det samme antal kolonner. Du kan dog have tomme værdier i nogle kolonner. Excel-datatabeller og tabelmodeldatatabeller kan ikke udskiftes.
- Da der er angivet en datatype for hver kolonne, skal hver værdi i den pågældende kolonne være af samme type.
Henvisning til tabeller og kolonner i formler
Du kan referere til en hvilken som helst tabel og kolonne ved hjælp af dens navn. Følgende formel illustrerer f.eks., hvordan du refererer til kolonner fra to tabeller ved hjælp af det fuldt kvalificerede navn:
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Når en formel evalueres, søger modeldesigneren først efter generel syntaks og kontrollerer derefter navnene på de kolonner og tabeller, du angiver, i forhold til mulige kolonner og tabeller i den aktuelle kontekst. Hvis navnet er tvetydigt, eller hvis kolonnen eller tabellen ikke findes, får du vist en fejl i formlen (en #ERROR streng i stedet for en dataværdi i celler, hvor fejlen opstår). Hvis du vil vide mere om krav til navngivning af tabeller, kolonner og andre objekter, skal du se Navngivningskrav i DAX-syntaks.
Tabelrelationer
Når du opretter relationer mellem tabeller, får du mulighed for, at relaterede værdier i andre tabeller bruges i beregninger. Du kan f.eks. bruge en beregnet kolonne til at bestemme alle de forsendelsesposter, der er relateret til den aktuelle forhandler, og derefter lægge forsendelsesomkostningerne sammen for hver enkelt. I mange tilfælde er det dog muligvis ikke nødvendigt at have en relation. Du kan bruge funktionen LOOKUPVALUE i en formel til at returnere værdien i result_columnName for den række, der opfylder de kriterier, der er angivet i argumenterne search_column og search_value .
Mange DAX-funktioner kræver, at der findes en relation mellem tabellerne eller mellem flere tabeller for at finde de kolonner, du har refereret til, og returnere resultater, der giver mening. Andre funktioner forsøger at identificere relationen. Men for at opnå de bedste resultater skal du altid oprette en relation, hvor det er muligt. Tabeldatamodeller understøtter flere relationer mellem tabeller. For at undgå forvirring eller forkerte resultater er det kun én relation ad gangen, der er angivet som den aktive relation, men du kan ændre den aktive relation efter behov for at gennemgå forskellige forbindelser i dataene i beregninger. Funktionen USERELATIONSHIP kan bruges til at angive en eller flere relationer, der skal bruges i en bestemt beregning.
Det er vigtigt at overholde disse regler for formeldesign, når du bruger relationer:
Når tabeller er forbundet af en relation, skal du sikre, at de to kolonner, der bruges som nøgler, har værdier, der stemmer overens. Referentiel integritet gennemtvinges ikke, og derfor er det muligt at have værdier, der ikke stemmer overens, i en nøglekolonne og stadig oprette en relation. Hvis dette sker, skal du være opmærksom på, at tomme værdier eller værdier, der ikke stemmer overens, kan påvirke resultaterne af formler.
Når du sammenkæder tabeller i din model ved hjælp af relationer, forstørrer du det omfang eller den kontekst, som formlerne evalueres i. Ændringer i konteksten som følge af tilføjelsen af nye tabeller, nye relationer eller ændringer i den aktive relation kan medføre, at dine resultater ændres på måder, som du muligvis ikke forventer. Du kan få mere at vide under Kontekst i denne artikel.
Behandl og opdater
Proces og genberegning er to separate, men relaterede handlinger. Du bør forstå disse begreber grundigt, når du designer en model, der indeholder komplekse formler, store mængder data eller data, der hentes fra eksterne datakilder.
Processen (opdateringen) opdaterer dataene i en model med nye data fra en ekstern datakilde.
Genberegning er processen til opdatering af resultaterne af formler, så de afspejler eventuelle ændringer af selve formlerne og afspejler ændringer i de underliggende data. Genberegning kan påvirke ydeevnen på følgende måder:
Værdierne i en beregnet kolonne beregnes og gemmes i modellen. Hvis du vil opdatere værdierne i den beregnede kolonne, skal du behandle modellen ved hjælp af en af tre behandlingskommandoer – Behandl fuld, Behandl data eller Behandl genberegning. Resultatet af formlen skal altid genberegnes for hele kolonnen, hver gang du ændrer formlen.
De værdier, der beregnes af målinger, evalueres dynamisk, hver gang en bruger føjer målingen til en pivottabel eller åbner en rapport. når brugeren ændrer konteksten, ændres de værdier, der returneres af målingen. Resultaterne af målingen afspejler altid det nyeste i cachen i hukommelsen.
Behandling og genberegning har ingen indvirkning på sikkerhedsformler på rækkeniveau, medmindre resultatet af en genberegning returnerer en anden værdi, hvilket gør det muligt for rollemedlemmer at forespørge på rækken eller ikke kan forespørge.
Opdateringer
DAX forbedres konstant. Nye og opdaterede funktioner udgives med den næste tilgængelige opdatering, som normalt er månedlig. Tjenesterne opdateres først efterfulgt af installerede programmer som Power BI Desktop, Excel, SSMS (SQL Server Management Studio) og Analysis Services-projektudvidelse til Visual Studio (SSDT). SQL Server Analysis Services opdateres med den næste kumulative opdatering. Nye funktioner annonceres først og beskrives i referencen til DAX-funktionen samtidig med opdateringer til Power BI Desktop.
Ikke alle funktioner understøttes i tidligere versioner af SQL Server Analysis Services og Excel.
Fejlfinding
Hvis du får vist en fejl, når du definerer en formel, kan formlen indeholde enten en syntaktisk fejl, semantisk fejl eller beregningsfejl.
Syntaktiske fejl er de nemmeste at løse. De involverer typisk en manglende parentes eller et manglende komma.
Den anden type fejl opstår, når syntaksen er korrekt, men den værdi eller kolonne, der refereres til, giver ikke mening i formlens kontekst. Sådanne semantiske fejl og beregningsfejl kan skyldes et af følgende problemer:
- Formlen refererer til en ikke-eksisterende kolonne, tabel eller funktion.
- Formlen ser ud til at være korrekt, men når dataprogrammet henter dataene, finder den en typeuoverensstemmelse og udløser en fejl.
- Formlen overfører et forkert tal eller en forkert type argumenter til en funktion.
- Formlen refererer til en anden kolonne, der har en fejl, og derfor er dens værdier ugyldige.
- Formlen refererer til en kolonne, der ikke er blevet behandlet, hvilket betyder, at den har metadata, men ingen faktiske data, der skal bruges til beregninger.
I de første fire tilfælde markerer DAX hele den kolonne, der indeholder den ugyldige formel. I det sidste tilfælde nedtoner DAX kolonnen for at angive, at kolonnen er i en ikke-behandlet tilstand.
Apps og værktøjer
Power BI Desktop
Power BI Desktop er et gratis datamodellerings- og rapporteringsprogram. Modeldesigneren indeholder en DAX-editor til oprettelse af DAX-beregningsformler.
Power Pivot i Excel
Power Pivot i Excel-modeldesigneren indeholder en DAX-editor til oprettelse af DAX-beregningsformler.
Visual Studio
Visual Studio med VSIX (Analysis Services-projektudvidelse ) bruges til at oprette Analysis Services-modelprojekter. Tabelmodeldesigner, der er installeret sammen med projektudvidelsen, indeholder en DAX-editor.
SQL Server Management Studio
SQL Server Management Studio (SSMS) er et vigtigt værktøj til at arbejde med Analysis Services. SSMS indeholder en DAX-forespørgselseditor til forespørgsel af både tabelmodeller og flerdimensionelle modeller.
DAX Studio
DAX Studio er et klientværktøj med åben kildekode til oprettelse og kørsel af DAX-forespørgsler mod Analysis Services,Power BI Desktop og Power Pivot i Excel-modeller.
Tabular Editor
Tabular Editor er et værktøj med åben kildekode, der giver en intuitiv, hierarkisk visning af alle objekter i metadata for tabelmodeller. Tabeleditor indeholder en DAX-editor med syntaksfremhævning, som gør det nemt at redigere målinger, beregnede kolonner og beregnede tabeludtryk.
Læringsressourcer
Når du lærer DAX, er det bedst at bruge det program, du bruger til at oprette dine datamodeller. Analysis Services, Power BI Desktop og Power Pivot i Excel har alle artikler og selvstudier, der omfatter lektioner i oprettelse af målinger, beregnede kolonner og rækkefiltre ved hjælp af DAX. Her er nogle yderligere ressourcer:
Brug DAX i Power BI Desktop-læringsforløb .
Den definitive guide til DAX af Alberto Ferrari og Marco Russo (Microsoft Press). Denne omfattende vejledning, der nu er i sin anden udgave, indeholder grundlæggende oplysninger om innovative teknikker med høj ydeevne til begyndere af datamodeller og BI-teknikere.
Community
DAX har et pulserende community, der altid er villig til at dele deres ekspertise. Microsoft Power BI Community har et særligt diskussionsforum kun til DAX, DAX-kommandoer og -tip.