DAX frågor
Rapportklienter som Power BI och Excel kör DAX frågor när visuella objekt visas i en rapport eller ett fält som läggs till i en tabell, och dessa DAX frågor justeras när ett filter tillämpas. prestandaanalysator i Power BI Desktop kan visa dessa DAX frågor och dessutom köra dem i DAX frågevyn.
Genom att använda DAX frågevy i Power BI Desktop eller Skriva DAX frågor i Power BI-tjänsten kan du skapa och köra egna DAX frågor. Med Microsoft Fabrickan du öka produktiviteten ytterligare med Copilot för att skriva DAX frågor i DAX frågevy på datorn eller webben. Förutom Power BI-verktyg kan DAX-frågor köras i Fabric-notebooks med hjälp av semantiska länkar för att läsa data från semantiska modeller med Python, samt med REST-API:t Execute Queries, som också finns tillgängligt i Power Automate. Med andra verktyg som SQL Server Management Studio (SSMS), Power BI Report Builderoch verktyg med öppen källkod som DAX Studiokan du också skapa och köra DAX frågor.
DAX frågor returnerar resultat som en tabell direkt i verktyget, så att du snabbt kan skapa och testa prestanda för dina DAX formler i mått eller bara visa data i din semantiska modell. INFO och INFO. VISA DAX funktioner kan också få information om din semantiska modell, till exempel en lista över tabeller, kolumner, mått och mycket mer.
Innan du lär dig mer om frågor är det viktigt att du har en gedigen förståelse för DAX grunderna. Om du inte redan har gjort det bör du kolla in DAX översikt.
Nyckelord
DAX frågor har en enkel syntax som bara består av ett obligatoriskt nyckelord, EVALUATE. EVALUATE följs av ett tabelluttryck, till exempel en DAX-funktion eller ett tabellnamn, som när det körs producerar en resultattabell. Tabelluttryck som matar ut en resultattabell är:
- Vanliga DAX funktioner som matar ut en tabell, till exempel SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLEoch många andra, arbetar med EVALUATE för att mata ut en resultattabell.
- Tabeller i modellen när de refereras efter namn fungerar med EVALUATE för att mata ut en resultattabell som visar data i tabellen. Till exempel kan EVALUATE tabellnamn köras som en DAX fråga.
- Mått i modellen eller någon DAX-formel, som ger ett skalärt värde, fungerar med EVALUATE för att visa värdet som en resultattabell när det omges av klammerparenteser. Till exempel kan EVALUATE {[Total Sales]} eller EVALUATE {COUNTROWS('Sales')} köras som en DAX fråga. Dessa kallas tabellkonstruktorer.
Det finns flera valfria nyckelord som är specifika för DAX frågor: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE och COLUMN.
EVALUATE (krävs)
På den mest grundläggande nivån är en DAX fråga en EVALUATE
-instruktion som innehåller ett tabelluttryck. Minst en EVALUATE-instruktion krävs, men en fråga kan innehålla valfritt antal EVALUATE-instruktioner.
EVALUATE syntax
EVALUATE <table>
EVALUATE parametrar
Termin | Definition |
---|---|
table |
Ett tabelluttryck. |
EVALUATE exempel
EVALUATE
'Sales Order'
Returnerar alla rader och kolumner från tabellen Försäljningsorder som resultattabell. Detta kan begränsas med hjälp av TOPN eller FILTERoch sorteras med ORDER BY.
ORDER BY (valfritt)
Det valfria nyckelordet ORDER BY
definierar en eller flera kolumner i frågan eller uttrycken som används för att sortera frågeresultat. Alla uttryck som kan utvärderas för varje rad i resultatet är giltiga. Alla kolumner i själva frågan är också giltiga.
Sortera efter kolumnegenskap i semantiska modeller gäller inte för DAX frågeresultat. Om en kolumn ska sorteras efter en annan kolumn i modellen, till exempel i fallet med Månadsnamn, bör sorteringen efter kolumn också ingå i den DAX fråga som ska användas i ORDER BY.
ORDER BY syntax
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]]
ORDER BY parametrar
Termin | Definition |
---|---|
expression |
Alla DAX uttryck som returnerar ett enda skalärt värde eller en kolumn som ingår i frågan DAX. |
ASC |
(standard) Stigande sorteringsordning. |
DESC |
Fallande sorteringsordning. |
ORDER BY exempel
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
Returnerar klädorder och genomsnittlig vinst per order per månad, i stigande ordning per månad, som en resultattabell.
TOPN väljer inte det angivna antalet rader som ska returneras baserat på sorteringsordningen som anges i ORDER BY. I stället har TOPN en egen syntax för att ange en sortering innan de översta 100 raderna returneras. ORDER BY sorterar bara resultattabellen som returneras 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
Returnerar de översta 100 försäljningsorder som sorteras efter SalesOrderLienKey stigande och sorterar sedan resultatet först efter försäljningsorder och sedan efter försäljningsorderrad.
START AT (valfritt)
Det valfria nyckelordet START AT
används i en ORDER BY
-sats. Det definierar värdet som frågeresultatet börjar med.
START AT syntax
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
START AT parametrar
Termin | Definition |
---|---|
value |
Ett konstant värde. Det kan inte vara ett uttryck. |
parameter |
Namnet på en parameter i en XMLA-instruktion som föregås av tecknet @ . |
START AT kommentarer
START AT argument har en en-till-en-korrespondens med kolumnerna i ORDER BY-satsen. Det kan finnas lika många argument i START AT-satsen som i ORDER BY-satsen, men inte mer. Det första argumentet i START AT definierar startvärdet i kolumn 1 i de ORDER BY kolumnerna. Det andra argumentet i START AT definierar startvärdet i kolumn 2 i de ORDER BY kolumnerna i de rader som uppfyller det första värdet för kolumn 1.
START AT exempel
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"
Returnerar alla kolumner från tabellen Försäljningsorder, sorterade i stigande ordning efter försäljningsordernummer, med början vid SO43661. Rader före den här försäljningsordern ingår inte i resultattabellen.
DEFINE (valfritt)
Det valfria nyckelordet DEFINE
introducerar en eller flera beräknade entitetsdefinitioner som bara finns under frågans varaktighet. Till skillnad från EVALUATE
kan det bara finnas ett DEFINE
block med en eller flera definitioner i en DAX fråga.
DEFINE
måste föregå den första EVALUATE
-instruktionen och är giltiga för alla EVALUATE-instruktioner i frågan. Definitioner kan vara variabler, mått, tabeller1och kolumner1. Definitioner kan referera till andra definitioner som visas före eller efter den aktuella definitionen. Minst en definition krävs om nyckelordet DEFINE
ingår i en fråga.
DEFINE MEASURE
är ett vanligt scenario för att skapa nya mått eller redigera befintliga mått i en semantisk modell. När måttet redan finns i modellen använder DAX-frågan måttet DAX formel som definierats i frågan. Det här är användbart för att testa mått med en DAX fråga innan du uppdaterar modellen.
DEFINE MEASURE
är också bra att skapa ytterligare analyser med DAX formler för en specifik DAX fråga där du kanske inte har behörighet att lägga till ett modellmått eller om det inte är nödvändigt att ha det i modellen.
DEFINE syntax
[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 parametrar
Termin | Definition |
---|---|
Entity |
MEASURE, VAR, TABLE1eller COLUMN1. |
name |
Namnet på en mått-, var-, tabell- eller kolumndefinition. Det kan inte vara ett uttryck. Namnet behöver inte vara unikt. Namnet finns bara under frågans varaktighet. |
expression |
Alla DAX uttryck som returnerar en tabell eller ett skalärt värde. Uttrycket kan använda någon av de definierade entiteterna. Om du behöver konvertera ett skalärt uttryck till ett tabelluttryck omsluter du uttrycket i en tabellkonstruktor med klammerparenteser {} eller använder funktionen ROW() för att returnera en tabell med en rad. |
[1]Varning: Frågedefinitioner för tabell- och kolumndefinitioner är endast avsedda för internt bruk. Du kan definiera TABELL- och KOLUMN-uttryck för en fråga utan syntaxfel, men de kan generera körfel och rekommenderas inte.
DEFINE kommentarer
En DAX fråga kan ha flera EVALUATE-instruktioner, men kan bara ha en DEFINE-instruktion. Definitioner i DEFINE-instruktionen kan gälla för alla EVALUATE-instruktioner i frågan.
Minst en definition krävs i en DEFINE-instruktion.
Mätdefinitions för ett frågeöverskridande modellmått med samma namn används dock endast inom frågan. De påverkar inte modellmåttet.
VAR namn har unika begränsningar. Mer information finns i VAR – Parametrar.
DEFINE exempel
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]}
Returnerar tabellen definierad i fråga DAX för att visa osålda produkter, med en extra kolumn som refererar till definierade variabler. Ett mått definieras och utvärderas också för att räkna rader av obetalda 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]
)
Returnerar en tabell som utvärderar tre definierade mått för att visa resultatet per räkenskapsår. Alla mått finns också i modellen och Beställningar per kund ändras i frågan DAX.
Parametrar för DAX frågor
En väldefinierad DAX frågeuttryck kan parametriseras och sedan användas om och om med bara ändringar i parametervärdena.
Metoden Execute Method (XMLA) har ett samlingselement Parameters Element (XMLA) som gör det möjligt att definiera parametrar och tilldela dem ett värde. I samlingen definierar varje parameterelement (XMLA)-element namnet på parametern och ett värde för den.
Referera till XMLA-parametrar genom att prefixera namnet på parametern med ett @
tecken. En plats i syntaxen där ett värde tillåts kan ersättas med ett parameteranrop. Alla XMLA-parametrar skrivs som text.
Viktig
Parametrar som definierats i avsnittet parametrar och som inte används i <STATEMENT>
-elementet genererar ett felsvar i XMLA.
Parametrar som används och inte definieras i <Parameters>
-elementet genererar ett felsvar i XMLA.