DAX spørringer
Rapporteringsklienter som Power BI og Excel utfører DAX spørringer når visualobjekter vises i en rapport, eller et felt som legges til i en tabell, og disse DAX spørringene justeres når et filter brukes. ytelsesanalyse i Power BI Desktop, kan vise deg disse DAX spørringene og til og med kjøre dem i DAX spørringsvisning.
Ved å bruke DAX spørringsvisning i Power BI Desktop eller skrive DAX spørringer i Power BI-tjenesten, kan du opprette og kjøre dine egne DAX spørringer. Med Microsoft Fabrickan du øke produktiviteten ytterligere med Copilot for å skrive DAX spørringer i DAX spørringsvisning av skrivebord eller nett. I tillegg til Power BI-verktøy kan DAX spørringer kjøres i Fabric-notatblokker ved hjelp av semantisk kobling til å lese data fra semantiske modeller med python, og med rest-API-en for Kjør spørringer, også tilgjengelig i Power Automate-. Andre verktøy, for eksempel SQL Server Management Studio (SSMS), Power BI Report Builderog verktøy med åpen kildekode, for eksempel DAX Studio, lar deg også opprette og kjøre DAX spørringer.
DAX spørringer returnerer resultater som en tabell direkte i verktøyet, slik at du raskt kan opprette og teste ytelsen til DAX formler i mål eller bare vise dataene i den semantiske modellen. INFORMASJON og INFORMASJON. VIS DAX funksjoner kan også få informasjon om den semantiske modellen, for eksempel en liste over tabeller, kolonner, mål og mye mer.
Før du lærer om spørringer, er det viktig at du har en solid forståelse av DAX grunnleggende. Hvis du ikke allerede har gjort det, må du sjekke ut DAX oversikt.
Søkeord
DAX spørringer har en enkel syntaks bestående av bare ett obligatorisk nøkkelord, EVALUATE. EVALUATE etterfølges av et tabelluttrykk, for eksempel en DAX-funksjon eller tabellnavn, som når en resultattabell kjøres. Tabelluttrykk som sender ut en resultattabell inkluderer:
- Vanlige DAX funksjoner som sender ut en tabell, for eksempel SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEog mange andre, arbeider med EVALUATE for å sende en resultattabell.
- Tabeller i modellen når det refereres til navn, fungerer med EVALUATE for å sende ut en resultattabell som viser dataene i tabellen. For eksempel kan EVALUATE tabellnavn bli kjørt som en DAX spørring.
- Mål i modellen eller en hvilken som helst DAX formel, som returnerer en skalarverdi, arbeider med EVALUATE for å vise verdien som en resultattabell når den er omsluttet av klammeparenteser. For eksempel kan EVALUATE {[Totalt salg]} eller EVALUATE {COUNTROWS('Salg')} bli kjørt som en DAX spørring. Disse kalles tabellkonstruktører.
Det finnes flere valgfrie nøkkelord som er spesifikke for DAX spørringer: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE og COLUMN.
EVALUATE (obligatorisk)
På det mest grunnleggende nivået er en DAX spørring en EVALUATE
setning som inneholder et tabelluttrykk. Minst én EVALUATE setning kreves, men en spørring kan inneholde et hvilket som helst antall EVALUATE setninger.
EVALUATE syntaks
EVALUATE <table>
EVALUATE parametere
Vilkår | Definisjon |
---|---|
table |
Et tabelluttrykk. |
EVALUATE eksempel
EVALUATE
'Sales Order'
Returnerer alle rader og kolonner fra Salgsordre-tabellen, som en resultattabell. Dette kan begrenses med bruken av TOPN eller FILTERog sorteres med ORDER BY.
ORDER BY (valgfritt)
Det valgfrie ORDER BY
nøkkelordet definerer én eller flere kolonner i spørringen eller uttrykkene som brukes til å sortere spørringsresultater. Ethvert uttrykk som kan evalueres for hver rad i resultatet, er gyldig. Alle kolonner i selve spørringen er også gyldige.
Sorter etter kolonneegenskap i semantiske modeller gjelder ikke for DAX spørringsresultater. Hvis en kolonne skal sorteres etter en annen kolonne i modellen, for eksempel i tilfelle månedsnavn, bør sortering etter kolonne også inkluderes i DAX spørringen som skal brukes i ORDER BY.
ORDER BY syntaks
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY parametere
Vilkår | Definisjon |
---|---|
expression |
Alle DAX uttrykk som returnerer én enkelt skalarverdi, eller kolonne som er inkludert i DAX spørringen. |
ASC |
(standard) Stigende sorteringsrekkefølge. |
DESC |
Synkende sorteringsrekkefølge. |
ORDER BY eksempel
EVALUATE
SUMMARIZECOLUMNS(
// Group by columns
'Date'[Month Name],
'Date'[Month of Year],
'Product'[Category],
// Optional filters
FILTER(
VALUES('Product'[Category]),
[Category] = "Clothing"
),
// Measures or explicit DAX formulas to aggregate and analyze the data by row
"Orders", [Orders],
"Avg Profit per Order", DIVIDE(
[Total Sales Profit],
[Orders]
)
)
// DAX queries do not use sort order defined in Power BI,
// sort by columns must be included in the DAX query to be used in order by
ORDER BY 'Date'[Month of Year] ASC
Returnerer klesordrer og gjennomsnittlig fortjeneste per ordre etter måned, i stigende rekkefølge etter måned, som en resultattabell.
TOPN velger ikke det angitte antallet rader som skal returneres basert på sorteringsrekkefølgen som er angitt i ORDER BY. I stedet har TOPN sin egen syntaks for å angi en sortering før de 100 øverste radene returneres. ORDER BY sorterer bare resultattabellen som returneres av TOPN.
EVALUATE
TOPN(
100,
'Sales Order',
// The way the data is sorted before the top 100 rows are selected
'Sales Order'[SalesOrderLineKey], ASC
)
// The way the data is sorted for the results
ORDER BY
'Sales Order'[Sales Order] ASC,
'Sales Order'[Sales Order Line] ASC
Returnerer de 100 beste salgsordrene sortert etter SalesOrderLienKey stigende, og sorterer deretter resultatene først etter salgsordre, deretter etter salgsordrelinje.
START AT (valgfritt)
Det valgfrie START AT
nøkkelordet brukes i en ORDER BY
setningsdel. Den definerer verdien som spørringsresultatene starter på.
START AT syntaks
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT parametere
Vilkår | Definisjon |
---|---|
value |
En konstant verdi. Kan ikke være et uttrykk. |
parameter |
Navnet på en parameter i en XMLA-setning prefiks med et @ tegn. |
START AT merknader
START AT argumenter har en en-til-en-korrespondanse med kolonnene i ORDER BY-setningsdelen. Det kan være så mange argumenter i START AT-setningsdelen som det er i ORDER BY-setningsdelen, men ikke mer. Det første argumentet i START AT definerer startverdien i kolonne 1 i kolonnene ORDER BY. Det andre argumentet i START AT definerer startverdien i kolonne 2 i de ORDER BY kolonnene i radene som oppfyller den første verdien for kolonne 1.
START AT eksempel
EVALUATE
'Sales Order'
ORDER BY 'Sales Order'[Sales Order] ASC
// Start at this order, orders before this order will not be displayed
START AT "SO43661"
Returnerer alle kolonner fra Salgsordre-tabellen, i stigende rekkefølge etter salgsordre, fra og med SO43661. Rader før denne salgsordren er ikke inkludert i resultattabellen.
DEFINE (valgfritt)
Det valgfrie DEFINE
-nøkkelordet introduserer én eller flere beregnede enhetsdefinisjoner som bare finnes i løpet av spørringen. I motsetning til EVALUATE
kan det bare være én DEFINE
blokk med én eller flere definisjoner i en DAX spørring.
DEFINE
må stå foran den første EVALUATE
setningen og er gyldige for alle EVALUATE setninger i spørringen. Definisjoner kan være variabler, mål, tabeller1og kolonner1. Definisjoner kan referere til andre definisjoner som vises før eller etter gjeldende definisjon. Minst én definisjon kreves hvis DEFINE
nøkkelord er inkludert i en spørring.
DEFINE MEASURE
er et vanlig scenario for å bygge nye mål eller redigere eksisterende mål i en semantisk modell. Når målet allerede finnes i modellen, bruker DAX-spørringen målet DAX formelen som er definert i spørringen. Dette er nyttig for å teste mål med en DAX spørring før du oppdaterer modellen.
DEFINE MEASURE
er også nyttig for å bygge ytterligere analyser med DAX formler for en bestemt DAX spørring der du kanskje ikke har tillatelse til å legge til et modellmål, eller det er ikke nødvendig å ha det i modellen.
DEFINE syntaks
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <virtual table definition>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
DEFINE parametere
Vilkår | Definisjon |
---|---|
Entity |
MEASURE, VAR, TABELL1eller KOLONNE1. |
name |
Navnet på en mål-, var-, tabell- eller kolonnedefinisjon. Det kan ikke være et uttrykk. Navnet trenger ikke å være unikt. Navnet finnes bare for varigheten av spørringen. |
expression |
Alle DAX uttrykk som returnerer en tabell eller skalarverdi. Uttrykket kan bruke en av de definerte enhetene. Hvis det er behov for å konvertere et skalaruttrykk til et tabelluttrykk, kan du bryte uttrykket i en tabellkonstruktør med klammeparenteser {} , eller bruke ROW() -funksjonen til å returnere en enkelt radtabell. |
[1]Forsiktig! TABELL- og KOLONNEdefinisjoner for spørring er bare ment for intern bruk. Selv om du kan definere TABELL- og KOLONNE-uttrykk for en spørring uten syntaksfeil, kan de produsere kjøretidsfeil og anbefales ikke.
DEFINE merknader
En DAX spørring kan ha flere EVALUATE setninger, men kan bare ha én DEFINE setning. Definisjoner i DEFINE-setningen kan gjelde for alle EVALUATE setninger i spørringen.
Minst én definisjon kreves i en DEFINE setning.
Måldefinisjoner for en spørring overstyrer modellmål med samme navn, men brukes bare i spørringen. De vil ikke påvirke modellmålet.
VAR navn har unike begrensninger. Hvis du vil ha mer informasjon, kan du se VAR – Parametere.
DEFINE eksempel
DEFINE
VAR _firstyear = MIN('Date'[Fiscal Year])
VAR _lastyear = MAX('Date'[Fiscal Year])
TABLE 'Unbought products' = FILTER('Product', [Orders] + 0 = 0)
COLUMN 'Unbought products'[Year Range] = _firstyear & " - " & _lastyear
MEASURE 'Unbought products'[Unbought products] = COUNTROWS('Unbought products')
EVALUATE
'Unbought products'
EVALUATE
{[Unbought products]}
Returnerer tabellen som er definert i DAX-spørringen for å vise produkter som ikke er i bruk, med en ekstra definert kolonne som refererer til definerte variabler. Et mål er også definert og evaluert for å telle radene med produkter som ikke er i bruk.
DEFINE
MEASURE 'Pick a sales measure'[Orders] = DISTINCTCOUNT('Sales Order'[Sales Order])
MEASURE 'Pick a sales measure'[Customers] = CALCULATE(
COUNTROWS(Customer),
FILTER(
'Sales',
[Orders] > 0
)
)
MEASURE 'Pick a sales measure'[Orders per Customer] = DIVIDE(
[Orders],
[Customers],
0
)
EVALUATE
SUMMARIZECOLUMNS(
'Date'[Fiscal Year],
"Orders", [Orders],
"Customers", [Customers],
"Orders per Customer", [Orders per Customer]
)
Returnerer en tabell som evaluerer tre definerte mål for å vise resultatene etter regnskapsår. Alle mål finnes også i modellen, og Ordrer per kunde endres i DAX spørringen.
Parametere i DAX spørringer
En veldefinert DAX spørringssetning kan parameteres og deretter brukes om og om igjen med bare endringer i parameterverdiene.
Metoden Execute Method (XMLA) har en Parameters Element (XMLA) samlingselement som gjør at parametere kan defineres og tilordnes en verdi. I samlingen definerer hvert Parameterelement (XMLA) element navnet på parameteren og en verdi for den.
Referer til XMLA-parametere ved å prefiksere navnet på parameteren med et @
tegn. Alle steder i syntaksen der en verdi er tillatt, kan verdien erstattes med et parameterkall. Alle XMLA-parametere skrives inn som tekst.
Viktig
Parametere som er definert i parameterinndelingen og som ikke brukes i <STATEMENT>
-elementet, genererer et feilsvar i XMLA.
Parametere som brukes og ikke er definert i <Parameters>
-elementet genererer et feilsvar i XMLA.