Compartir a través de


Consultas de DAX

Los clientes de informes como Power BI y Excel ejecutan DAX consultas cada vez que los objetos visuales se muestran en un informe o un campo agregado a una tabla, y estas DAX consultas se ajustan cuando se aplica un filtro. El analizador de rendimiento de Power BI Desktop puede mostrar estas DAX consultas e incluso ejecutarlas en DAX la vista de consulta de Power BI Desktop.

Mediante el uso DAX de la vista de consulta en Power BI Desktop o Escritura DAX de consultas en el servicio Power BI, puede crear y ejecutar sus propias DAX consultas. Con Microsoft Fabric, puede aumentar aún más su productividad usando Copilot para escribir DAX consultas en la vista de consultas de escritorio o web. Además de las herramientas de Power BI, DAX las consultas se pueden ejecutar en cuadernos de Fabric mediante un vínculo semántico para leer datos de modelos semánticos con Python y con la API REST Execute Queries, también disponible en Power Automate. Otras herramientas, como SQL Server Management Studio (SSMS), Power BI Report Builder y herramientas de código abierto como DAX Studio, también permiten crear y ejecutar DAX consultas.

DAX las consultas devuelven resultados como una tabla justo dentro de la herramienta, lo que le permite crear y probar rápidamente el rendimiento de DAX las fórmulas en medidas o simplemente ver los datos en el modelo semántico. Funciones INFO y INFO.VIEW DAX también pueden obtener información sobre su modelo semántico, como una lista de tablas, columnas, medidas y mucho más.

Antes de aprender sobre las consultas, es importante que tengas un conocimiento sólido de los conceptos básicos de DAX. Si aún no lo ha hecho, asegúrese de consultar DAX la información general.

Palabras clave

DAX las consultas tienen una sintaxis simple formada por una sola palabra clave necesaria, EVALUATE. EVALUATE va seguido de una expresión de tabla, como una función o un DAX nombre de tabla, que cuando se ejecuta genera una tabla de resultados. Las expresiones de tabla que generan una tabla de resultados incluyen:

  1. Las funciones comunes DAX que generan una tabla, como SUMMARIZE, SUMMARIZECOLUMNS, SELECTCOLUMNS, FILTERUNIONTOPN, ADDCOLUMNS, , DATATABLE, y muchas otras, funcionan con EVALUATE para generar una tabla de resultados.
  2. Las tablas del modelo cuando se hace referencia por nombre funcionan con EVALUATE para generar una tabla de resultados que muestra los datos de la tabla. Por ejemplo, EVALUATE "Nombre de tabla" se puede ejecutar como una DAX consulta.
  3. Medidas en el modelo o en cualquier fórmula DAX que devuelven un valor escalar funcionan con EVALUATE para mostrar el valor como una tabla de resultados cuando se incluyen entre llaves. Por ejemplo, EVALUATE {[Total Sales]} o EVALUATE {COUNTROWS('Sales')} se pueden ejecutar como una DAX consulta. Se denominan constructores de tabla.

Hay varias palabras clave opcionales específicas de las DAX consultas: ORDER BY, START AT, DEFINEMEASURE, , VAR, TABLE y COLUMN.

EVALUATE (Obligatorio)

En el nivel más básico, una DAX consulta es una EVALUATE instrucción que contiene una expresión de tabla. Para una consulta, se requiere al menos una EVALUATE instrucción; sin embargo, puede contener cualquier número de EVALUATE instrucciones.

EVALUATE Sintaxis

EVALUATE <table>

EVALUATE Parámetros

Término Definición
table Expresión de tabla.

EVALUATE Ejemplo

EVALUATE
	'Sales Order'

Devuelve todas las filas y columnas de la tabla Sales Order, como tabla de resultados. Esto puede limitarse con el uso de TOPN o FILTERy ordenado con ORDER BY.

DAX

ORDER BY (Opcional)

La palabra clave opcional ORDER BY define una o varias columnas de la consulta o expresiones usadas para ordenar los resultados de la consulta. Cualquier expresión que se pueda evaluar para cada fila del resultado es válida. Cualquier columna de la propia consulta también es válida.

La ordenación por propiedad de columna en los modelos semánticos no se aplica a los resultados de la consulta DAX. Si una columna debe ordenarse por una columna diferente en el modelo, como en el caso de Nombre del mes, la ordenación por columna también debe incluirse en la DAX consulta que se va a usar en .ORDER BY

ORDER BY Sintaxis

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

ORDER BY Parámetros

Término Definición
expression Cualquier DAX expresión que devuelva un único valor escalar o una columna incluida en la DAX consulta.
ASC (valor predeterminado) Criterio de ordenación ascendente.
DESC Criterio de ordenación descendente.

ORDER BY Ejemplo

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

Devuelve, como tabla de resultados, los pedidos de artículos de vestir y el beneficio promedio por pedido por mes, en orden ascendente por mes.

DAX

TOPN no elige el número especificado de filas que se van a devolver en función del criterio de ordenación especificado en ORDER BY. En su lugar, TOPN tiene su propia sintaxis para especificar opcionalmente una ordenación antes de que se devuelvan las 100 primeras filas. ORDER BY solo ordena la tabla de resultados devuelta por 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

Devuelve los 100 pedidos de ventas principales ordenados por SalesOrderLienKey ascendente y, a continuación, ordena los resultados primero por pedido de ventas y, a continuación, por línea de pedido de ventas.

Captura de pantalla que muestra cómo usar TOPN y ORDER BY para una DAX consulta en DAX la vista de consulta de Power BI Desktop.

START AT (Opcional)

La palabra clave opcional START AT se usa dentro de una ORDER BY cláusula . Define el valor en el que comienzan los resultados de la consulta.

START AT Sintaxis

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

START AT Parámetros

Término Definición
value Valor constante No puede ser una expresión.
parameter Nombre de un parámetro en una instrucción XMLA prefijo con un carácter @.

START AT Comentarios

START AT los argumentos tienen una correspondencia uno a uno con las columnas de la cláusula ORDER BY. Puede haber tantos argumentos en la START AT cláusula como hay en la ORDER BY cláusula , pero no más. El primer argumento de START AT define el valor inicial de la columna 1 de las ORDER BY columnas. El segundo argumento define el valor inicial de la columna 2 de las START AT columnas dentro de las filas que cumplen con el primer valor de la columna 1.

START AT Ejemplo

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"

Devuelve todas las columnas de la tabla Sales Order, en orden ascendente por Pedido de ventas, empezando por SO43661. Las filas anteriores a este pedido de venta no se incluyen en la tabla de resultados.

Captura de pantalla que muestra cómo usar ORDER BY y START AT para una DAX consulta en DAX la vista de consulta de Power BI Desktop.

DEFINE (Opcional)

La palabra clave opcional DEFINE presenta una o varias definiciones de entidad calculadas que solo existen durante la consulta. A diferencia de EVALUATE, solo puede haber un DEFINE bloque con una o varias definiciones en una DAX consulta. DEFINE debe preceder a la primera EVALUATE instrucción y son válidas para todas las EVALUATE instrucciones de la consulta. Las definiciones pueden ser variables, medidas, tablas1 ycolumnas 1. Las definiciones pueden hacer referencia a otras definiciones que aparecen antes o después de la definición actual. Se requiere al menos una definición si la DEFINE palabra clave se incluye en una consulta.

DEFINE MEASURE es un escenario común para crear nuevas medidas o editar medidas existentes en un modelo semántico. Cuando la medida ya existe en el modelo, la DAX consulta usará la fórmula de medida DAX definida en la consulta. Esto resulta útil para probar las medidas con una DAX consulta antes de actualizar el modelo.

DEFINE MEASURE también resulta útil para crear análisis adicionales con fórmulas de DAX para una consulta específica DAX en la que es posible que no tenga permiso para agregar una medida de modelo o no sea necesario tenerla en el modelo.

DEFINE Sintaxis

[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 Parámetros

Término Definición
Entity MEASURE, , VARTABLA1 o COLUMNA1.
name Nombre de una definición de medida, var, tabla o columna. No puede ser una expresión. El nombre no tiene que ser único. El nombre solo existe durante la consulta.
expression Cualquier expresión DAX que devuelva una tabla o un valor escalar. La expresión puede usar cualquiera de las entidades definidas. Si es necesario convertir una expresión escalar en una expresión de tabla, ajuste la expresión dentro de un constructor de tabla con llaves {}o use la función ROW() para devolver una sola tabla de filas.

[1]Precaución: Las definiciones TABLE y COLUMN con ámbito de consulta están pensadas solo para uso interno. Aunque puede definir expresiones TABLE y COLUMN para una consulta sin error de sintaxis, pueden producir errores en tiempo de ejecución y no se recomiendan.

DEFINE Comentarios

  • Una consulta DAX puede tener varias instrucciones EVALUATE, pero solo puede tener una instrucción DEFINE. Las definiciones de la instrucción DEFINE se pueden aplicar a las instrucciones EVALUATE de la consulta.

  • Se requiere al menos una definición en una instrucción DEFINE.

  • Las definiciones de medida de una consulta invalidan las medidas del modelo con el mismo nombre, pero solo se usan dentro de la consulta. No afectarán a la medida del modelo.

  • VAR nombres tienen restricciones únicas. Para obtener más información, consulte VAR: parámetros.

DEFINE Ejemplo

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]}

Devuelve la tabla definida en la DAX consulta que muestra productos no comprados con una columna adicional definida que hace referencia a variables definidas. También se define y se evalúa una medida para contar las filas de productos no comprados.

DAX

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]
	)

Devuelve una tabla que evalúa tres medidas definidas para mostrar los resultados por año fiscal. Todas las medidas también existen en el modelo y los pedidos por cliente se modifican en la DAX consulta.

DAX

Parámetros en consultas DAX

Una instrucción de consulta bien definida DAX se puede parametrizar y, a continuación, usarse repetidamente con solo cambiar los valores de los parámetros.

El método Execute (XMLA) tiene un elemento de colección Parameters Element (XMLA) que permite definir y asignar un valor a los parámetros. Dentro de la colección, cada elemento Parameter Element (XMLA) define el nombre del parámetro y un valor para él.

Haga referencia a parámetros XMLA mediante el prefijo del nombre del parámetro con un @ carácter. Cualquier lugar en la sintaxis donde se permite un valor, el valor se puede reemplazar por una llamada de parámetro. Todos los parámetros XMLA se escriben como texto.

Importante

Los parámetros definidos en la sección de parámetros y que no se usan en el elemento <STATEMENT> generan una respuesta de error en XMLA. Los parámetros usados y no definidos en el <Parameters> elemento generan una respuesta de error en XMLA.