Dela via


DAX frågor

Rapportklienter som Power BI and Excel kör DAX frågor när visuella objekt visas i en rapport or ett fält som läggs till i en tabell, and dessa DAX frågor justeras när en filter tillämpas. prestandaanalys i Power BI Desktop kan visa dessa DAX frågor andeven köra dem i DAX frågevyn.

Genom att använda DAX frågevy i Power BI Desktop orWrite DAX queries i Power BI-tjänsten kan du skapa and köra dina egna DAX frågor. Med Microsoft Fabrickan du öka produktiviteten ytterligare med Copilot för att skriva DAX frågor i DAX skrivbordswebbens frågevy or. Förutom Power BI-verktyg kan DAX frågor köras i Fabric-anteckningsböcker med hjälp av semantisk länk för att läsa data från semantiska modeller med Python, and med REST-API:et Execute Queries, som också finns i Power Automate. Med andra verktyg som SQL Server Management Studio (SSMS), Power BI Report Builder, and verktyg med öppen källkod som DAX Studiokan du också skapa and köra DAX frågor.

DAX frågor returnerar resultat som en tabell right i verktyget, så att du snabbt kan skapa and testa prestanda för dina DAX formler i mått or helt enkelt visa data i din semantiska modell. INFO and INFO. VISA DAX funktioner kan också få information om din semantiska modell, till exempel en lista över tabeller, kolumner, mått and 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. If om du inte redan har gjort det, se till att 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 or-tabellnamn, som när den körs ger en resultattabell. Tabelluttryck som matar ut en resultattabell är:

  1. Vanliga DAX funktioner som matar ut en tabell, till exempel SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTER, UNION, TOPN, ADDCOLUMNS, DATATABLE, and många andra, arbetar med EVALUATE för att mata ut en resultattabell.
  2. 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.
  3. Mått i modellen or valfri DAX formel, som returnerar en skalär value, fungerar med EVALUATE för att visa value som en resultattabell när den omges av klammerparenteser. Till exempel kan EVALUATE {[Total Sales]}orEVALUATE {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, and 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ågeställning kan innehålla vilket antal som helst av EVALUATEstatements.

EVALUATE syntax

EVALUATE <table>

EVALUATE parametrar

Termin Definition
table Ett tabelluttryck.

EVALUATE exempel

EVALUATE
	'Sales Order'

Returnerar all rader och and kolumner från Försäljningsorder-tabellen som en resulterande tabell. Detta kan begränsas med hjälp av TOPNorFILTER, and sorterade med ORDER BY.

Skärmbild som visar hur du använder EVALUATE för en DAX fråga i DAX frågevy av Power BI Desktop.

ORDER BY (valfritt)

Det valfria nyckelordet ORDER BY definierar ytterligare en or kolumn i frågans or uttryck 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 not för DAX frågeresultat. If en kolumn ska sorteras efter en annan kolumn i modellen, till exempel när det gäller Month Namn, 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 en enda skalär value, or kolumn som ingår i DAX-frågan.
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

Returnera klädorder andaverage vinst per order som en resultattabell, sorterat efter monthi stigande ordning efter month.

Skärmbild som visar hur du använder ORDER BY för en DAX fråga i DAX frågevy av Power BI Desktop.

TOPN väljer not 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äljningsordern sorterade efter SalesOrderLienKey stigande och sorterar sedan resultatet first efter försäljningsorder och sedan efter försäljningsorderrad.

Skärmbild som visar hur du använder TOPNandORDER BY för en DAX fråga i DAX frågevy i Power BI Desktop.

START AT (valfritt)

Det valfria nyckelordet START AT används i en ORDER BY-sats. Den definierar value där frågeresultatet börjar.

START AT Syntax

EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]

START AT parametrar

Termin Definition
value En konstant value. 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 not mer. Argumentet first i START AT definierar den startande value i kolumn 1 av ORDER BY-kolumnerna. Argumentet second i START AT definierar starten value i kolumn 2 av kolumnerna ORDER BY i de rader som uppfyller firstvalue 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 all kolumner från försäljningsordertabellen, sorterade i stigande ordning efter försäljningsordernummer, med början vid SO43661. Rader före denna försäljningsorder är not inkluderade i resultattabellen.

Skärmbild som visar hur du använder ORDER BYandSTART AT för en DAX fråga i DAX frågevy i Power BI Desktop.

DEFINE (valfritt)

Det valfria nyckelordet DEFINE introducerar en or mer beräknade entitetsdefinitioner som bara finns för frågans duration. Till skillnad från EVALUATEkan det bara finnas ett DEFINE block med en or fler definitioner i en DAX sökfråga. DEFINE måste föregå firstEVALUATE-uttrycket and är giltiga för allEVALUATEstatements i frågeställningen. Definitioner kan vara variabler, mått, tabeller1, and kolumner1. Definitioner kan referera till andra definitioner som visas före or efter den aktuella definitionen. Minst en definition krävs if nyckelordet DEFINE ingår i en fråga.

DEFINE MEASURE är ett vanligt scenario för att skapa nya mått or redigera befintliga mått i en semantisk modell. När measure redan finns i modellen använder DAX-frågan den measureDAX 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 kan not ha behörighet att lägga till en modell measureor det är not nödvändigt att ha den 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, TABLE1, or COLUMN1.
name Namnet på en measure, var, tabell och or kolumndefinition. Det kan inte vara ett uttryck. Namnet måste not vara unikt. Namnet finns bara för duration i frågan.
expression Alla DAX uttryck som returnerar en tabell or skalär value. Uttrycket kan använda någon av de definierade entiteterna. If du behöver convert ett skalärt uttryck i ett tabelluttryck omsluter du uttrycket i en tabellkonstruktor med klammerparenteser {}or använda funktionen ROW() för att returnera en tabell med en rad.

[1]Varning: Frågeomfångsbegränsad TABELL and KOLUMN-definitioner är endast avsedda för intern användning. Du kan define TABLE and COLUMN-uttryck för en fråga utan syntax error, men de kan orsaka körningsfel and rekommenderas not.

DEFINE Anmärkningar

  • En DAX-sökning kan ha flera EVALUATEstatements, men kan bara ha ett DEFINE-uttryck. Definitioner i DEFINE-satsen kan gälla för alla EVALUATEstatements i frågan.

  • Minst en definition krävs i en DEFINE-instruktion.

  • Measure definitioner för en fråga åsidosätter modellmått med samma namn men används endast i frågan. De påverkar not modellen measure.

  • 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. En measure är också definierad and för att värderas till count raderna med osålda produkter.

Skärmbild som visar hur du använder DEFINE för en DAX fråga i DAX frågevy av Power BI Desktop.

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 resultaten efter finansår year. All mått finns också i modellen, och and Beställningar per kund ändras i frågan DAX.

Skärmbild som visar hur du använder DEFINEMEASURE för en DAX fråga i DAX frågevy i Power BI Desktop.

Parametrar för DAX frågor

Ett väldefinierat DAX frågeinstruktion kan parametriseras and och sedan användas över and med bara ändringar i parametern values.

Metoden Execute Method (XMLA) har ett XMLA-element (Parameters Element) samlingselement som gör att parametrar kan definieras and tilldelas en value. I samlingen definierar varje -parameterelement (XMLA) namnet på parametern and tillhörande value.

Referera till XMLA-parametrar genom att prefixera namnet på parametern med ett @ tecken. En plats i syntaxen där en value tillåts kan value ersättas med ett parameteranrop. All XMLA-parametrar skrivs som text.

Viktig

Parametrar som definieras i parametraravsnittet andnot, används i elementet <STATEMENT>generate och ett svar i error i XMLA. Parametrar som används andnot definierade i elementet <Parameters>generate ett error svar i XMLA.

DAX statements SUMMARIZECOLUMNS