DAX forespørgsler
Rapporteringsklienter som Power BI and Excel udfører DAX forespørgsler, når visualiseringer vises i en rapport, or et felt, der er føjet til en tabel, and disse DAX forespørgsler justeres, når der anvendes en filter. Den effektivitetsanalyse i Power BI Desktop kan vise dig disse DAX forespørgsler andeven køre dem i DAX forespørgselsvisning.
Ved hjælp af DAX forespørgselsvisning i Power BI Desktop orSkriv DAX forespørgsler i Power BI-tjeneste, kan du oprette and køre dine egne DAX forespørgsler. Med Microsoft Fabrickan du øge produktiviteten yderligere med Copilot for at skrive DAX forespørgsler, der er i DAX forespørgselsvisning på Desktop or web. Ud over Power BI-værktøjer kan DAX forespørgsler køres i Fabric-notesbøger ved hjælp af semantiske link til at læse data fra semantiske modeller med python, and med REST API'en til Udfør forespørgsler, som også er tilgængelig i Power Automate. Andre værktøjer, f.eks. SSMS (SQL Server Management Studio), Power BI Report Builder, and værktøjer med åben kildekode, f.eks. DAX Studio, giver dig også mulighed for at oprette and køre DAX forespørgsler.
DAX forespørgsler returnerer resultater som en tabel right i værktøjet, så du hurtigt kan oprette and teste ydeevnen af dine DAX formler i målinger or blot få vist dataene i din semantiske model. OPLYSNINGER and OPLYSNINGER. VIS DAX funktioner kan også få oplysninger om din semantiske model, f.eks. en liste over tabeller, kolonner, målinger and meget mere.
Før du lærer om forespørgsler, er det vigtigt, at du har en solid forståelse af DAX grundlæggende funktioner. If du ikke allerede har gjort det, skal du tjekke DAX oversigt over.
Søgeord
DAX forespørgsler har en simpel syntaks, der kun består af ét påkrævede nøgleord, EVALUATE. EVALUATE efterfølges af et tabeludtryk, f.eks. en DAX funktion or tabelnavn, som når der køres output i en resultattabel. Tabeludtryk, der returnerer en resultattabel, omfatter:
- Almindelige DAX-funktioner, der opretter en tabel, f.eks. SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEand mange andre, arbejder med EVALUATE for at oprette en resultattabel.
- Tabeller i modellen, når der refereres til efter navn, fungerer sammen med EVALUATE for at oprette en resultattabel, der viser dataene i tabellen. EVALUATE 'Tabelnavn' kan f.eks. udføres som en DAX forespørgsel.
- Målinger i modellen or en hvilken som helst DAX formel, som returnerer en skalar value, og arbejder med EVALUATE for at få vist value som en resultattabel, når den er omsluttet af krøllede klammeparenteser. EVALUATE {[Total Sales]}orEVALUATE {COUNTROWS('Sales')} kan f.eks. udføres som en DAX forespørgsel. Disse kaldes tabelkonstruktører.
Der er flere valgfri nøgleord, der er specifikke for DAX forespørgsler: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE and COLUMN.
EVALUATE (påkrævet)
På det mest grundlæggende niveau er en DAX-forespørgsel en EVALUATE
sætning, der indeholder et tabeludtryk. Der kræves mindst én EVALUATE sætning, men en forespørgsel kan indeholde et vilkårligt antal EVALUATEstatements.
EVALUATE syntaks
EVALUATE <table>
EVALUATE parametre
Udtryk | Definition |
---|---|
table |
Et tabeludtryk. |
EVALUATE eksempel
EVALUATE
'Sales Order'
Returnerer all rækker and kolonner fra tabellen Sales Order som en resultattabel. Dette kan begrænses ved hjælp af TOPNorFILTERand sorteret efter ORDER BY.
ORDER BY (valgfrit)
Det valgfri ORDER BY
nøgleord definerer én or flere kolonner i forespørgslen or udtryk, der bruges til at sortere forespørgselsresultater. Alle udtryk, der kan evalueres for hver række i resultatet, er gyldige. Alle kolonner i selve forespørgslen er også gyldige.
Egenskaben Sortér efter kolonne i semantiske modeller gælder not for DAX forespørgselsresultater. If en kolonne skal sorteres efter en anden kolonne i modellen, f.eks. i tilfælde af Month Navn, skal sortering efter kolonne også medtages i den DAX forespørgsel, der skal bruges i ORDER BY.
ORDER BY syntaks
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY parametre
Udtryk | Definition |
---|---|
expression |
Ethvert DAX udtryk, der returnerer en enkelt skalar value, or kolonne, der er inkluderet i DAX-forespørgslen. |
ASC |
(standard) Stigende sorteringsrækkefølge. |
DESC |
Faldende sorteringsrækkefø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 tøjordrer andaverage avance pr. ordre efter monthi stigende rækkefølge efter monthsom en resultattabel.
TOPN vælger not det angivne antal rækker, der skal returneres, baseret på den sorteringsrækkefølge, der er angivet i ORDER BY. I stedet har TOPN sin egen syntaks til eventuelt at angive en sortering, før de øverste 100 rækker returneres. ORDER BY sorterer kun den resultattabel, der returneres af 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 øverste 100 salgsordrer sorteret efter SalesOrderLienKey stigende og sorterer derefter resultaterne first efter salgsordre og derefter efter salgsordrelinje.
START AT (valgfrit)
Det valgfrie START AT
nøgleord bruges i en ORDER BY
-delsætning. Den definerer den value, hvor forespørgselsresultaterne starter.
START AT syntaks
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT parametre
Udtryk | Definition |
---|---|
value |
En konstant value. Kan ikke være et udtryk. |
parameter |
Navnet på en parameter i en XMLA-sætning med et præfiks med et @ tegn. |
START AT bemærkninger
START AT argumenter har en en til en-overensstemmelse med kolonnerne i ORDER BY-delsætningen. Der kan være lige så mange argumenter i START AT-delsætningen, som der er i ORDER BY-delsætningen, men not mere. Argumentet first i START AT definerer start value i kolonne 1 i de ORDER BY kolonner. Argumentet second i START AT definerer start value i kolonne 2 i de ORDER BY kolonner i de rækker, der opfylder firstvalue 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 all kolonner fra tabellen Sales Order i stigende rækkefølge efter Salgsordre, der starter ved SO43661. Rækker før denne salgsordre er not inkluderet i resultattabellen.
DEFINE (valgfrit)
Det valgfri DEFINE
nøgleord introducerer én or mere beregnede objektdefinitioner, der kun findes for forespørgslens duration. I modsætning til EVALUATE
kan der kun være én DEFINE
blok med én or flere definitioner i en DAX forespørgsel.
DEFINE
skal være foran den firstEVALUATE
sætning, and er gyldige for allEVALUATEstatements i forespørgslen. Definitioner kan være variabler, målinger, tabeller1, and kolonner1. Definitioner kan referere til andre definitioner, der vises før or efter den aktuelle definition. Der kræves mindst én definition if nøgleordet DEFINE
er inkluderet i en forespørgsel.
DEFINE MEASURE
er et almindeligt scenarie til oprettelse af nye målinger or redigere eksisterende målinger i en semantisk model. Når measure allerede findes i modellen, bruger DAX-forespørgslen den measureDAX formel, der er defineret i forespørgslen. Dette er nyttigt til test af målinger med en DAX forespørgsel, før du opdaterer modellen.
DEFINE MEASURE
er også nyttigt at oprette yderligere analyser med DAX formler for en bestemt DAX-forespørgsel, hvor du måske not har tilladelse til at tilføje en model measureor det er not nødvendigt at have den i modellen.
DEFINE syntaks
[DEFINE
(
(MEASURE <table name>[<measure name>] = <scalar expression>) |
(VAR <var name> = <table or scalar expression>) |
(TABLE <table name> = <table expression>) |
(COLUMN <table name>[<column name>] = <scalar expression>) |
) +
]
(EVALUATE <table expression>) +
DEFINE parametre
Udtryk | Definition |
---|---|
Entity |
MEASURE, VAR, TABEL1or KOLONNE1. |
name |
Navnet på en measure, var, tabel or kolonnedefinition. Det kan ikke være et udtryk. Navnet skal not være entydigt. Navnet findes kun for forespørgslens duration. |
expression |
Ethvert DAX udtryk, der returnerer en tabel or skalar value. Udtrykket kan bruge en hvilken som helst af de definerede enheder.
If der er behov for at convert et skalarudtryk til et tabeludtryk, skal du ombryde udtrykket i en tabelkonstruktør med krøllede klammeparenteser {} or bruge funktionen ROW() til at returnere en tabel med en enkelt række. |
[1]Advarsel! TABEL-and KOLONNE-definitioner, der er beregnet til forespørgsel, er kun beregnet til intern brug. Selvom du kan define TABLE-and COLUMN-udtryk for en forespørgsel uden syntaks error, kan de medføre kørselsfejl, andnot anbefales.
DEFINE bemærkninger
En DAX-forespørgsel kan have flere EVALUATEstatements, men kan kun have én DEFINE-sætning. Definitioner i DEFINE-sætningen kan gælde for alle EVALUATEstatements i forespørgslen.
Der kræves mindst én definition i en DEFINE-sætning.
Measure definitioner for en forespørgsel tilsidesætter modelmålinger af samme navn, men bruges kun i forespørgslen. De påvirker not modellen measure.
VAR navne har entydige begrænsninger. Du kan få mere at vide under VAR – Parametre.
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 den tabel, der er defineret i forespørgslen DAX for at vise ikke-udtjente produkter med en yderligere defineret kolonnereference med definerede variabler. En measure defineres også and evalueres for at count rækkerne af ikke-udkæmpede produkter.
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 tabel, der evaluerer tre definerede målinger for at vise resultaterne efter regnskabs year. All målinger også findes i modellen, ændres and Ordrer pr. kunde i forespørgslen DAX.
Parametre i DAX forespørgsler
En veldefineret DAX forespørgselssætning kan parameteriseres and derefter bruges over and med blot ændringer i parameteren values.
METODEN Execute Method (XMLA) har et XMLA-element (Parameters Element) samlingselement, der gør det muligt at definere parametre and tildele en value. I samlingen definerer hvert parameterelement (XMLA) element navnet på parameteren and en value til den.
Reference til XMLA-parametre ved at angive et præfiks for navnet på parameteren med et @
tegn. Et hvilket som helst sted i syntaksen, hvor en value er tilladt, kan value erstattes med et parameterkald.
All XMLA-parametre skrives som tekst.
Vigtig
Parametre, der er defineret i parameterafsnittet, andnot bruges i elementet <STATEMENT>
generate et error svar i XMLA.
Parametre, der bruges andnot defineret i elementet <Parameters>
, generate et error svar i XMLA.