Begivenhed
31. mar., 23 - 2. apr., 23
Den ultimative Microsoft Fabric-, Power BI-, SQL- og AI-communityledede begivenhed. 31. marts til 2. april 2025.
Tilmeld dig i dagDenne browser understøttes ikke længere.
Opgrader til Microsoft Edge for at drage fordel af de nyeste funktioner, sikkerhedsopdateringer og teknisk support.
Data Analysis Expressions (DAX) er et formeludtrykssprog, der bruges i Analysis Services, Power BI, andPower Pivot i Excel. DAX formler omfatter funktioner, operatorer andvalues til at udføre avancerede beregninger and forespørgsler på data i related tabeller and kolonner i tabeldatamodeller.
Denne artikel indeholder kun en grundlæggende introduktion til de vigtigste begreber i DAX. Den beskriver DAX, som det gælder for all de produkter, der bruger det. Nogle funktioner kan not gælde for visse produkter or use cases. Se dokumentationen til din product, der beskriver dens særlige implementering af DAX.
DAX formler bruges i målinger, beregnede kolonner, beregnede tabeller and sikkerhed på rækkeniveau.
Målinger er dynamiske beregningsformler, hvor resultaterne ændres afhængigt af konteksten. Målinger bruges i rapportering, der understøtter kombination af and filtrering af modeldata ved hjælp af flere attributter, f.eks. en Power BI-rapport or Excel-pivottabel or pivotdiagram. Målinger oprettes ved hjælp af formellinjen DAX i modeldesigneren.
En formel i en measure kan bruge standardsammenlægningsfunktioner, der oprettes automatisk ved hjælp af funktionen Autosum, f.eks. COUNTorSUM, or du kan define din egen formel ved hjælp af formellinjen DAX. Navngivne målinger kan overføres som et argument til andre målinger.
Når du define en formel for en measure 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 not med det samme hvor som helst. Årsagen til, at du ikke kan se (filtrerede) resultater af beregningen med det samme, er, at resultatet af en measure ikke kan bestemmes uden kontekst. Hvis du vil evaluate en measure, 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, and derefter evaluate udtrykket for hver celle. Denne klient kan være en Excel-pivottabel or pivotdiagram, en Power BI-rapport, or 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- and kolonneoverskrifter i en pivottabel, or hvert valg af udsnit andfilters i en Power BI-rapport, genererer et andet undersæt af data, som measure beregnes for. Brug f.eks. denne meget enkle measure formel:
Total Sales = SUM([Sales Amount])
Når en bruger placerer measure TotalSales i en rapport, and derefter placerer kolonnen Product Kategori fra en Product tabel i Filters, beregnes sum af Sales Amount and, der vises for hver product kategori.
I modsætning til beregnede kolonner indeholder syntaksen for en measure navnet på measureforan formlen. I det eksempel, der lige er angivet, vises navnet Total Sales foran formlen. Når du har oprettet en measure, vises navnet and definitionen af den på listen Felter i rapporteringsklientprogrammet and afhængigt af perspektiver and roller er tilgængelige for all 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-
En beregnet kolonne er en kolonne, som du føjer til en eksisterende tabel (i modeldesigneren), and derefter oprette en DAX formel, der definerer kolonnens values. Når en beregnet kolonne contains en gyldig DAX formel, beregnes values for hver række, så snart formlen indtastes. Values gemmes derefter i datamodellen i hukommelsen. I en Date tabel, når formlen f.eks. indtastes på formellinjen:
= [Calendar Year] & " Q" & [Calendar Quarter]
En value for hver række i tabellen beregnes ved at tage values fra kolonnen CalendarYear (i den samme Date tabel), tilføje et mellemrum and det store Q and derefter tilføje values fra kolonnen CalendarQuarter (i samme Date tabel). Resultatet for hver række i den beregnede kolonne beregnes med det samme, and vises, f.eks. som 1. kvartal 2017. Kolonne values genberegnes kun if tabellen or en related tabel behandles (opdateres), or modellen fjernes fra hukommelsen and derefter genindlæses, f.eks. når du lukker and genåbner en Power BI Desktop-fil.
Du kan få mere at vide under:
beregnede kolonner i Power BI Desktop-
beregnede kolonner i Analysis Services-
beregnede kolonner i Power Pivot.
En beregnet tabel er et beregnet objekt, der er baseret på et formeludtryk, der er afledt af allor del af andre tabeller i den samme model. I stedet for at forespørge om and indlæsning af values i den nye tabels kolonner fra en datakilde, definerer en DAX formel tabellens values.
Beregnede tabeller kan være nyttige i en dimension med forskellige roller. Et eksempel er tabellen Date, som OrderDate, ShipDate or 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, or et undersæt or oversæt 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, and kan tilhøre en datakategori. Beregnede tabeller kan navngives, and vises or skjult på samme måde som enhver anden tabel. Beregnede tabeller beregnes igen, if en af de tabeller, den henter data fra, opdateres or opdateres.
Du kan få mere at vide under:
beregnede tabeller i Power BI Desktop-
beregnede tabeller i Analysis Services.
Med sikkerhed på rækkeniveau skal en DAX formel evaluate 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, and aggregeringer, f.eks. SUM returneres kun for kunder i USA. Sikkerhed på rækkeniveau er not tilgængelig i Power Pivot i Excel.
Når du definerer rækkeniveaussekuirty ved hjælp af DAX formel, opretter du et tilladt rækkesæt. Dette nægter not adgang til andre rækker. I stedet returneres de blot not som en del af det tilladte rækkesæt. Andre roller kan give adgang til de rækker, der udelades af formlen DAX. If en bruger er medlem af en anden rolle, and 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 related rækker. Når en tabel har flere relationer, filters anvende sikkerhed for den aktive relation. Sikkerhedsformler på rækkeniveau vil blive gennemskæret med andre formler, der er defineret for related tabeller.
Du kan få mere at vide under:
sikkerhed på rækkeniveau med Power BI-
roller i Analysis Services-
DAX forespørgsler kan oprettes and køre i SSMS (SQL Server Management Studio) and 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 Analysis Services Flerdimensionelle modeller. DAX forespørgsler er ofte nemmere at skrive and 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 evaluate sætning. For eksempel
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Returnerer i Resultater en tabel, der kun viser de produkter, der har en SafetyStockLevel, der er mindre end 200, i stigende rækkefølge efter EnglishProductName.
Du kan oprette målinger som en del af forespørgslen. Der findes kun målinger for forespørgslens duration. Du kan få mere at vide under DAX forespørgsler.
DAX formler er vigtige for at oprette beregninger i beregnede kolonner and målinger, and beskytte dine data ved hjælp af sikkerhed på rækkeniveau. Hvis du vil oprette formler for beregnede kolonner and målinger, skal du bruge formellinjen øverst i modeldesigneren windoworDAX Editor. Hvis du vil oprette formler for sikkerhed på rækkeniveau, skal du bruge dialogboksen Rolleadministrator or dialogboksen Administrer roller. Oplysningerne i dette afsnit er beregnet til at få dig i gang med at forstå de grundlæggende oplysninger om DAX formler.
DAX formler kan være meget enkle or ret komplekse. I følgende tabel vises nogle eksempler på simple formler, der kan bruges i en beregnet kolonne.
Formel | Definition |
---|---|
= TODAY() |
Indsætter today's date i hver række i en beregnet kolonne. |
= 3 |
Indsætter value 3 i hver række i en beregnet kolonne. |
= [Column1] + [Column2] |
Tilføjer values i den samme række [Column1] and [Column2] and placerer resultaterne i den beregnede kolonne i den samme række. |
Uanset om den formel, du opretter, er enkel or kompleks, kan du bruge følgende trin, når du opretter en formel:
Hver formel skal begynde med en lige sign (=).
Du kan enten skrive or vælge et funktionsnavn or skrive et udtryk.
Begynd at skrive first par bogstaver i funktionen or ønskede navn, and Autofuldførelse viser en liste over tilgængelige funktioner, tabeller and 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 and 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 and kolonner, or ved at skrive values.
Kontrollér, om der er syntaksfejl: Sørg for, at all parenteser lukkes and kolonner, der refereres korrekt til tabeller andvalues.
Tryk på ENTER for at acceptere formlen.
Bemærk
Så snart du angiver formlen i en beregnet kolonne, and formlen valideres, udfyldes kolonnen med values. Hvis du trykker på ENTER i en measure, gemmes den measure definition sammen med tabellen. If en formel er ugyldig, vises der en error.
Lad os i dette eksempel se på en formel i en measure med navnet Dage i aktuel Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Denne measure bruges til at oprette et sammenligningsforhold mellem en ufuldstændig periode and den previous periode. Formlen skal tage højde for den del af perioden, der er forløbet, and sammenligne den med den samme andel i den previous 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 contains følgende elementer:
Formelelement | Beskrivelse |
---|---|
Days in Current Quarter |
Navnet på measure. |
= |
Er lig med sign (=) starter formlen. |
COUNTROWS |
COUNTROWS tæller antallet af rækker i tabellen Date |
() |
Åbn and slutparentes angiver argumenter. |
DATESBETWEEN |
Funktionen DATESBETWEEN returnerer datoerne mellem lastdate for hver value 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 date for starten af quarter. |
LASTDATE |
Funktionen LASTDATE returnerer lastdate af quarter. |
'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. |
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 values på rullelisten, andall af teksten efter indsætningspunktet forbliver uændret.
Autofuldførelse tilføjer not den afsluttende parentes for funktioner or automatisk matche parenteser. Du skal sørge for, at hver funktion er syntaktisk korrekt, or du ikke kan gemme or bruge formlen.
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 or 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, AVERAGEXandMINXall f.eks. kræve en tabel som argumentet first.
En funktion er en navngiven formel i et udtryk. De fleste funktioner har krævet and valgfrie argumenter, også kaldet parametre, som input. Når funktionen udføres, returneres der en value. DAX indeholder funktioner, du kan bruge til at udføre beregninger ved hjælp af datoer and klokkeslæt, oprette betingede values, arbejde med strenge, udføre opslag baseret på relationer and muligheden for at gentage over en tabel for at udføre rekursive beregninger. If du kender Excel-formler, vil mange af disse funktioner se meget ens ud. DAX formler er dog forskellige på følgende vigtige måder:
En DAX funktion refererer altid til en komplet kolonne or en tabel. If du kun vil bruge bestemte values fra en tabel or kolonne, kan du føje filters til formlen.
If du har brug for at tilpasse beregninger række for række, indeholder DAX funktioner, der gør det muligt at bruge den aktuelle række valueor en relatedvalue som en slags parameter, til at udføre beregninger, der varierer efter kontekst. Du kan få mere at vide om, hvordan disse funktioner fungerer, under Kontekst i denne artikel.
DAX indeholder mange funktioner, der returnerer en tabel, i stedet for en value. Tabellen vises not i en rapporteringsklient, men den bruges til at angive input til andre funktioner. Du kan f.eks. hente en tabel and derefter count de entydige values i den, orcalculate dynamiske summer på tværs af filtrerede tabeller or kolonner.
DAX funktioner omfatter en række time funktioner til intelligens. Med disse funktioner kan du defineor vælge date områder, and udføre dynamiske beregninger baseret på disse datoer orrange. Du kan f.eks. sammenligne summer på tværs af parallelle perioder.
Sammenlægningsfunktioner calculate en (skalar) value, f.eks. count, sum, average, minimum, or maksimum for all rækker i en kolonne or tabel som defineret af udtrykket. Du kan få mere at vide under sammenlægningsfunktioner.
De dateandtime funktioner i DAX svarer til dateandtime funktioner i Microsoft Excel. DAX funktioner er dog baseret på en datetime datatype, der starter den 1. marts 1900. Du kan få mere at vide under Dateandtime funktioner.
Funktionerne filter i DAX returnerer bestemte datatyper, slår values op i related tales andfilter af relatedvalues. Opslagsfunktionerne fungerer ved hjælp af tabeller and relationer, f.eks. en database. Med filtreringsfunktionerne kan du manipulere datakontekst for at oprette dynamiske beregninger. Du kan få mere at vide under Filter funktioner.
De finansielle funktioner i DAX bruges i formler, der udfører økonomiske beregninger, f.eks. nettotil stede valueandrate af returnering. Disse funktioner svarer til de finansielle funktioner, der bruges i Microsoft Excel. Du kan få mere at vide under Finansielle funktioner.
En oplysningsfunktion kigger på den celle or række, der er angivet som et argument, and fortæller dig, om value svarer til den forventede type. Funktionen ISERROR returnerer f.eks. TRUE
if den value, du refererer til contains en error. Du kan få mere at vide under Informationsfunktioner.
Logiske funktioner fungerer på et udtryk for at returnere oplysninger om values i udtrykket. Funktionen TRUE
giver dig f.eks. besked om et udtryk, du evaluerer, returnerer en TRUE
value. Du kan få mere at vide under Logiske funktioner.
De matematiske funktioner i DAX minder meget om de matematiske and 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 matematisk and trigonometri.
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 i DAX giver dig mulighed for at returnere values fra en anden related tabel, angive en bestemt relation, der skal bruges i et udtryk, and angive tværgående filtreringsretning. Du kan få mere at vide under Relationsfunktioner.
Statistiske funktioner calculatevaluesrelated til statistiske fordelinger and sandsynlighed, f.eks. standardafvigelse and antal permutationer. Du kan få mere at vide under Statistiske funktioner.
Tekstfunktioner i DAX minder meget om deres modparter i Excel. Du kan returnere en del af en streng, search for tekst i en streng, orconcatenate streng values. DAX indeholder også funktioner til styring af formater for datoer, klokkeslæt and tal. Du kan få mere at vide under Tekstfunktioner.
De time intelligence-funktioner, der leveres i DAX giver dig mulighed for at oprette beregninger, der bruger indbygget viden om kalendere and datoer. Ved at bruge timeanddate intervaller i kombination med sammenlægninger or beregninger kan du oprette meningsfulde sammenligninger på tværs af sammenlignelige time perioder for salg, lager and osv. Du kan få mere at vide under Time intelligence-funktioner (DAX).
Disse funktioner returnerer en tabel or manipulere eksisterende tabeller. Ved hjælp af ADDCOLUMNS kan du f.eks. føje beregnede kolonner til en angivet tabel, or du kan returnere en oversigtstabel over et sæt grupper med funktionen SUMMARIZECOLUMNS. Du kan få mere at vide under Funktioner til tabelmanipulation.
Du kan oprette variabler i et udtryk ved hjælp af VAR. VAR teknisk set er not en funktion, er det et nøgleord til at gemme resultatet af et udtryk som en navngiven variabel. Variablen kan derefter overføres som et argument til andre measure udtryk. For eksempel:
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.
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 durationand output. Når du opretter en DAX formel, bestemmer de ord, der bruges i formlen, automatisk den value datatype, der returneres.
DAX understøtter følgende datatyper:
Datatype i model | Datatype i DAX | Beskrivelse |
---|---|---|
Whole Number |
Et heltal på 64 bit (otte byte) value1, 2 | Tal, der ikke har decimaler. Heltal kan være positive or negative tal, men skal være heltal mellem -9.223.372.036.854.775.808 (-2^63) and 9.223.372.036.854.775.807 (2^63-1). |
Decimal Number |
Et reelt tal på 64 bit (otte byte) 1, 2 | Reelle tal er tal, der kan have decimaler. Reelle tal dækker et bredt range af values: Negative values fra -1,79E +308 til -2,23E -308 Nul Positiv values fra 2,23E -308 til og med 1,79E + 308 Antallet af betydende cifre er dog begrænset til 17 decimaler. |
Boolean |
Boolesk | Enten en TrueorFalsevalue. |
Text |
Streng | En Unicode tegndatastreng. Kan være strenge, tal or datoer, der er repræsenteret i en tekst format. |
Date |
Date/time | Datoer and klokkeslæt i en accepteret date–time repræsentation. Gyldige datoer er all datoer efter 1. marts 1900. |
Currency |
Currency | Currency datatype tillader values mellem -922.337.203.685.477.5808 til 922.337.203.685.477,5807 med fire decimaltal med fixed præcision. |
N/A |
Blank | En blank er en datatype i DAX, der repræsenterer and erstatter SQL null-værdier. Du kan oprette en blank ved hjælp af funktionen BLANKand teste tomme værdier ved hjælp af den logiske funktion ISBLANK. |
Tabeldatamodeller omfatter også datatypen Table som input or output til mange DAX funktioner. Funktionen FILTER bruger f.eks. en tabel som input and returnerer en anden tabel, der kun contains de rækker, der opfylder de filter betingelser. 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 and, hvordan de især anvendes på DAX formler. Fejl i formler or 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- er et vigtigt begreb at forstå, når du opretter DAX formler. Kontekst gør det muligt at udføre dynamisk analyse, da resultaterne af en formel ændres, så de afspejler den aktuelle række or cellemarkering and også related data. Forståelse af kontekst and effektiv brug af kontekst er afgørende for at skabe dynamiske analyser med høj ydeevne, and til fejlfinding af problemer i formler.
Formler i tabelmodeller kan evalueres i en anden kontekst, afhængigt af andre designelementer:
Der er forskellige typer kontekst: rækkekontekst, forespørgselskontekstandfilter kontekst.
rækkekontekst kan opfattes som "den aktuelle række". If du opretter en formel i en beregnet kolonne, indeholder rækkekonteksten for formlen values fra all kolonner i den aktuelle række. If tabellen er related til en anden tabel, indeholder indholdet også allvalues fra den anden tabel, der er related til den aktuelle række.
Lad os f.eks. antage, at du opretter en beregnet kolonne, = [Freight] + [Tax]
, der lægger values sammen fra to kolonner, Freight and Tax, fra den samme tabel. Denne formel henter automatisk kun values fra den aktuelle række i de angivne kolonner.
Rækkekontekst følger også de 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 related tabeller der er knyttet til den aktuelle række.
Følgende formel bruger f.eks. funktionen RELATED til at hente en moms value fra en related tabel baseret på det område, som ordren blev leveret til. Skatten value bestemmes ved hjælp af value for området i den aktuelle tabel, hvor området i tabellen related vises, and derefter hente skatte-rate for det pågældende område fra tabellen related.
= [Freight] + RELATED('Region'[TaxRate])
Denne formel henter moms rate for det aktuelle område fra tabellen Region and føjer den til value i kolonnen Freight. I DAX formler skal du not vide, or du angiver den specifikke relation, der forbinder tabellerne.
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 grundlæggende mulighed for at oprette formler, der udfører handlinger rekursivt over en indre and ydre løkke.
Lad os f.eks. antage, at din model contains en tabel med Productsand en tabel med Sales. Det kan være en god idé for brugerne at gennemgå hele salgstabellen, som er fuld af transaktioner, der involverer flere produkter, andfind det største bestilte antal for hver product i en transaktion.
Med DAX kan du oprette en enkelt formel, der returnerer den korrekte value, and resultaterne opdateres automatisk, time 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.
Hvis du vil summarize, gemmer funktionen EARLIER rækkekonteksten fra den handling, der gik forud for den aktuelle handling. På all tidspunkter gemmer funktionen to kontekstsæt i hukommelsen: Ét sæt kontekst repræsenterer den aktuelle række for formlens indre løkke, and et andet sæt kontekst repræsenterer den aktuelle række for formlens ydre løkke. DAX automatisk feeds values mellem de to løkker, så du kan oprette komplekse aggregeringer.
Forespørgselskontekst refererer til det undersæt af data, der implicit hentes for en formel. Når en bruger f.eks. placerer et measureor felt i en rapport, undersøger programmet række- and kolonneoverskrifter, udsnit and rapport filters for at bestemme konteksten. De nødvendige forespørgsler køres derefter på modeldata for at få det korrekte undersæt af data, foretage de beregninger, der er defineret af formlen, and derefter udfylde values i rapporten.
Da konteksten ændres, afhængigt af hvor du placerer formlen, kan resultaterne af formlen også ændres. Lad os f.eks. oprette en formel, der lægger values sammen i kolonnen Profit i tabellen Sales: = SUM('Sales'[Profit])
.
If 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 for tabellen Sales. Resultaterne vil have overskud for all områder, all produkter, all år, and osv.
Brugerne ønsker dog typisk ikke at se det samme resultat hundredvis af gange, men vil i stedet have fortjenesten for en bestemt year, et bestemt land, et bestemt productor en kombination af disse, and derefter få en samlet total.
I en rapport ændres konteksten ved at filtrere, tilføje or fjerne felter and ved hjælp af udsnit. For hver ændring evalueres den forespørgselskontekst, hvor measure evalueres. Derfor evalueres den samme formel, der bruges i en measure, i en anden forespørgselskontekst for hver celle.
Filter kontekst er det sæt values, der er tilladt i hver kolonne, or i den values, der er hentet fra en related tabel. Filters kan anvendes på kolonnen i designeren, or i præsentationslag (rapporter and pivottabeller). Filters kan også defineres eksplicit af filter udtryk i formlen.
Filter kontekst tilføjes, når du angiver filter begrænsninger for det sæt values, der er tilladt i en kolonne or tabel, ved hjælp af argumenter til en formel. Filter kontekst gælder oven på andre kontekster, f.eks. rækkekontekst or forespørgselskontekst.
I tabelmodeller er der mange måder at oprette filter kontekst på. I forbindelse med klienter, der kan forbruge modellen, f.eks. Power BI-rapporter, kan brugerne oprette filters løbende ved at tilføje udsnit or rapport filters i række- and kolonneoverskrifter. Du kan også angive filter udtryk direkte i formlen for at angive relatedvaluesfor at filter tabeller, der bruges som input, or dynamisk hente kontekst for de values, der bruges i beregninger. Du kan også helt rydde or selektivt rydde filters på bestemte kolonner. Dette er meget nyttigt, når du opretter formler, der calculate hovedtotaler.
Hvis du vil vide mere om, hvordan du opretter filters i formler, skal du se FILTER Function (DAX).
Du kan se et eksempel på, hvordan filters kan ryddes for at oprette hovedtotaler, i ALL Function (DAX).
Du kan finde eksempler på, hvordan du selektivt rydder and anvende filters i formler, under ALLEXCEPT.
Når du opretter en DAX formel, testes formlen first for gyldig syntaks, and derefter testet for at sikre, at navnene på de kolonner, and tabeller, der er inkluderet i formlen, findes i den aktuelle kontekst. If en kolonne or tabel, der er angivet i formlen, ikke blev fundet, returneres der en error.
Konteksten under validering (and genberegningshandlinger) bestemmes som beskrevet i de foregående afsnit ved hjælp af de tilgængelige tabeller i modellen, eventuelle relationer mellem tabellerne, and eventuelle filters, der er anvendt.
if du f.eks. lige har importeret nogle data til en ny tabel, and det er notrelated til andre tabeller (and du har not anvendt en filters), er aktuelle kontekst hele sættet af kolonner i tabellen. If tabellen er sammenkædet af relationer til andre tabeller, indeholder den aktuelle kontekst de related tabeller. If du føjer en kolonne fra tabellen til en rapport, der har udsnit and måske nogle rapport filters, er formlens kontekst delmængde 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 and relationer for at se, hvordan kontekst fungerer. Følgende afsnit indeholder nogle eksempler på, hvordan formler bruger forskellige konteksttyper til dynamisk at returnere resultater.
Det DAX sprog bruger fire forskellige typer beregningsoperatorer i formler:
TRUE
'FALSE' value.Du kan finde detaljerede oplysninger om operatorer, der bruges i DAX formler, under DAX operatorer.
Tabeller i tabellariske datamodeller ligner Excel-tabeller, men de fungerer anderledes med data and med formler:
Du kan referere til en tabel and 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 fuldt kvalificerede navn:
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Når en formel evalueres, søger modeldesigneren first efter generel syntaks, and kontrollerer derefter navnene på kolonner and tabeller, som du angiver i forhold til de mulige kolonner and tabeller i den aktuelle kontekst. If navnet er tvetydigt orif kolonnen or tabel ikke blev fundet, får du vist en error i formlen (en #ERROR streng i stedet for en data value i celler, hvor error forekommer). Hvis du vil vide mere om krav til navngivning af tabeller, kolonner and andre objekter, skal du se Navngivningskrav i DAX syntaks.
Når du opretter relationer mellem tabeller, får du mulighed for at relatedvalues i andre tabeller, der skal bruges i beregninger. Du kan f.eks. bruge en beregnet kolonne til at bestemme, all forsendelsesposterne related til den aktuelle forhandler, and derefter sum forsendelsesomkostningerne for hver enkelt. I mange tilfælde kan en relation dog not være nødvendig. Du kan bruge funktionen LOOKUPVALUE i en formel til at returnere value i result_columnName for den række, der opfylder de kriterier, der er angivet i search_columnandsearch_value argumenter.
Mange DAX funktioner kræver, at der findes en relation mellem tabellerne, or blandt flere tabeller, for at finde de kolonner, du har refereret til, and 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. Hvis du vil undgå forvirring or forkerte resultater, er det kun én relation ved en time, 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. USERELATIONSHIP funktion kan bruges til at angive én or 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 dig, at de to kolonner, der bruges som nøgler, har values, der stemmer overens. Referentiel integritet gennemtvinges not, og det er derfor muligt at have values, der ikke stemmer overens, i en nøglekolonne and stadig oprette en relation. If dette sker, skal du være opmærksom på, at blankvaluesor ikke-matchende values kan påvirke resultaterne af formler.
Når du sammenkæder tabeller i din model ved hjælp af relationer, forstørrer du omfanget orkontekst, hvor formlerne evalueres. Ændringer i konteksten som følge af tilføjelsen af nye tabeller, nye relationer or fra ændringer i den aktive relation kan medføre, at dine resultater ændres på måder, som du måske not forventer. Du kan få mere at vide under Kontekst i denne artikel.
Procesandgenberegning er to separate, men related handlinger. Du bør forstå disse begreber grundigt, når du designer en model, der contains komplekse formler, store mængder data or data, der hentes fra eksterne datakilder.
proces (opdatering) opdaterer dataene i en model med nye data fra en ekstern datakilde.
genberegning er processen med at opdatere resultaterne af formler, så de afspejler eventuelle ændringer af selve formlerne and for at afspejle ændringer i de underliggende data. Genberegning kan påvirke ydeevnen på følgende måder:
De values i en beregnet kolonne beregnes and gemmes i modellen. Hvis du vil opdatere values i den beregnede kolonne, skal du behandle modellen ved hjælp af en af tre behandlingskommandoer – Behandl fuld, Behandl data or Behandl genberegning. Resultatet af formlen skal altid genberegnes for hele kolonnen, hver gang du ændrer formlen.
De values, der beregnes af målinger, evalueres dynamisk, når en bruger føjer measure til en pivottabel or åbne en rapport. når brugeren ændrer konteksten, values returneret af measure ændring. Resultaterne af measure altid afspejle det nyeste i cachen i hukommelsen.
Behandling and genberegning har ingen effect på sikkerhedsformler på rækkeniveau, medmindre resultatet af en genberegning returnerer en anden value, hvilket gør det muligt at forespørge på række ornot kan forespørges af rollemedlemmer.
DAX forbedres konstant. Nye and opdaterede funktioner udgives med den next tilgængelige opdatering, som normalt er månedlig. Tjenester opdateres firstefterfulgt af installerede programmer, f.eks. Power BI Desktop, Excel, SSMS (SQL Server Management Studio), and Analysis Services-projektudvidelse til Visual Studio (SSDT). SQL Server Analysis Services opdateres med den next kumulative opdatering. Nye funktioner annonceres firstand, der er beskrevet i DAX funktionsreference, samtidig med Power OPDATERINGER til BI Desktop.
Not all funktioner understøttes i earlier versioner af SQL Server Analysis Services and Excel.
If du får vist en error, når du definerer en formel, kan formlen indeholde enten en syntaktisk error, semantisk errororberegning error.
Syntaktiske fejl er de nemmeste at løse. De involverer typisk en manglende parentes or komma.
Den anden type error opstår, når syntaksen er korrekt, men det valueor en kolonne, der refereres til, giver not mening i forbindelse med formlen. Sådanne semantiske and beregningsfejl kan skyldes et af følgende problemer:
I de first fire tilfælde markerer DAX hele kolonnen, der contains den ugyldige formel, med flag. I last tilfælde nedtoner DAX kolonnen for at angive, at kolonnen er i en ikke-behandlet tilstand.
Power BI Desktop- er et gratis program til datamodellering and rapportering. Modeldesigneren indeholder en DAX editor til oprettelse af DAX beregningsformler.
Designeren Power Pivot i Excel-modeller indeholder en DAX editor til oprettelse af DAX beregningsformler.
Visual Studio med Analysis Services-projekter udvidelse (VSIX) bruges til at oprette Analysis Services-modelprojekter. Tabelmodeldesigner, der er installeret sammen med projektudvidelsen, indeholder en DAX editor.
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ørgsler om både tabellariske and flerdimensionelle modeller.
DAX Studio er et klientværktøj med åben kildekode til oprettelse af and, der kører DAX forespørgsler mod Analysis Services, Power BI Desktop andPower Pivot i Excel-modeller.
ikonet
Tabular Editor er et værktøj med åben kildekode, der giver en intuitiv, hierarkisk visning af hvert objekt i metadata for tabelmodeller. Tabeleditor indeholder en DAX Editor med syntaksfremhævning, som gør det nemt at redigere målinger, beregnede kolonner and beregnede tabeludtryk.
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, andPower Pivot i Excel all indeholder artikler and selvstudier, der indeholder lektioner om oprettelse af målinger, beregnede kolonner and række-filters ved hjælp af DAX. Her er nogle yderligere ressourcer:
Brug DAX i Power BI Desktop læring path.
Den Definitive Guide til DAX af Alberto Ferrari and Marco Russo (Microsoft Press). Now i sin second udgave indeholder denne omfattende vejledning grundlæggende oplysninger om innovative teknikker med høj ydeevne til begyndere af datamodellering and BI-teknikere.
DAX har et levende community, der altid er villige til at dele deres ekspertise. Microsoft Power BI Community- har et særligt diskussionsforum kun til DAX, DAX Kommandoer and Tip.
Begivenhed
31. mar., 23 - 2. apr., 23
Den ultimative Microsoft Fabric-, Power BI-, SQL- og AI-communityledede begivenhed. 31. marts til 2. april 2025.
Tilmeld dig i dagTræning
Modul
Føj beregnede tabeller og kolonner til Power BI Desktop-modeller - Training
Når du har afsluttet dette modul, kan du føje beregnede tabeller og beregnede kolonner til din semantiske model. Du vil også kunne beskrive rækkekontekst, der bruges til at evaluere formler for beregnede kolonner. Da det er muligt at føje kolonner til en tabel ved hjælp af Power Query, lærer du også, hvornår det er bedst at oprette beregnede kolonner i stedet for Power Query brugerdefinerede kolonner.