Consultas DAX

Los clientes de informes como Power BI y Excel ejecutan consultas DAX cada vez que se coloca un campo en un informe o cuando se aplica un filtro. Mediante SQL Server Management Studio (SSMS), el Generador de informes de Power BI y herramientas de código abierto como DAX Studio, puede crear y ejecutar sus propias consultas DAX. Las consultas DAX devuelven resultados como una tabla directamente dentro de la herramienta, lo que le permite crear y probar rápidamente el rendimiento de las fórmulas DAX.

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

Palabras clave

Las consultas DAX tienen una sintaxis simple formada por una sola palabra clave necesaria, EVALUATE, y varias palabras clave opcionales: ORDER BY, START AT, DEFINE, MEASURE, VAR, TABLE y COLUMN. Cada palabra clave define una instrucción usada durante la consulta.

EVALUATE (necesario)

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

Sintaxis de EVALUATE

EVALUATE <table>  

Parámetros de EVALUATE

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

Ejemplo de EVALUATE

EVALUATE
    'Internet Sales'

Devuelve todas las filas y columnas de la tabla Ventas por Internet, como una tabla.

Instrucción Evaluate de DAX

ORDER BY (opcional)

La palabra clave opcional ORDER BY define una o varias expresiones que se usan para ordenar los resultados de la consulta. Cualquier expresión que se puede evaluar para cada fila del resultado es válida.

Sintaxis de ORDER BY

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

Parámetros de ORDER BY

Término Definición
expression Cualquier expresión DAX que devuelve un valor escalar único.
ASC (Predeterminado) Criterio de ordenación ascendente.
DESC Criterio de ordenación ascendente.

Ejemplo de ORDER BY

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Order Date]

Devuelve todas las filas y columnas de la tabla Ventas por Internet, en orden ascendente por Fecha de pedido, como una tabla.

Instrucción Evaluate order by de DAX

START AT (opcional)

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

Sintaxis de START AT

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

Parámetros de START AT

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

Comentarios sobre START AT

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

Ejemplo de START AT

EVALUATE
    'Internet Sales'
    
ORDER BY
    'Internet Sales'[Sales Order Number]
START AT "SO7000"

Devuelve todas las filas y columnas de la tabla Internet Sales, en orden ascendente por Número de pedido de venta, empezando en SO7000.

Instrucción EVALUATE de DAX con las cláusulas ORDER BY y SALES ORDER NUMBER

DEFINE (opcional)

La palabra clave opcional DEFINE presenta una o varias definiciones de entidad calculadas que solo existen durante la consulta. Las definiciones preceden a la instrucción EVALUATE y son válidas para todas las instrucciones EVALUATE de la consulta. Las definiciones pueden ser variables, medidas, tablas1 y columnas1. 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 palabra clave DEFINE se incluye en una consulta.

Sintaxis de DEFINE

[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>) +

Parámetros de DEFINE

Término Definición
Entidad MEASURE, VAR, TABLE1 o COLUMN1.
name Nombre de una definición de medida, variable, tabla o columna. No puede ser una expresión. El nombre no tiene que ser único. El nombre existe únicamente lo que dura la consulta.
expression Cualquier expresión DAX que devuelve un valor de tabla o 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, encapsule la expresión dentro de un constructor de tabla con llaves {} o use la función ROW() para devolver una tabla de una sola fila.

[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 errores de sintaxis, pueden producir errores en tiempo de ejecución, por lo que no se recomienda.

Comentarios sobre DEFINE

  • 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 cualquier instrucción 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.

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

Ejemplo de DEFINE

DEFINE
    MEASURE 'Internet Sales'[Internet Total Sales] =
        SUM ( 'Internet Sales'[Sales Amount] )

EVALUATE
SUMMARIZECOLUMNS (
    'Date'[Calendar Year],
    TREATAS (
        {
            2013,
            2014
        },
        'Date'[Calendar Year]
    ),
    "Total Sales", [Internet Total Sales],
    "Combined Years Total Sales",
        CALCULATE (
            [Internet Total Sales],
            ALLSELECTED ( 'Date'[Calendar Year] )
        )
)
ORDER BY [Calendar Year]

Devuelve como una tabla las ventas totales calculadas para los años 2013 y 2014, y las ventas totales calculadas combinadas para los años 2013 y 2014. La medida de la instrucción DEFINE, Internet Total Sales, se usa tanto en las expresiones Total Sales como en Combined Years Total Sales.

Evaluate de DAX con definición de medida

Parámetros en consultas DAX

Se puede parametrizar una instrucción de consulta DAX bien definida y, después, usarla una y otra vez con tan solo realizar cambios en los valores de parámetro.

El Método Execute (XMLA) tiene un elemento de la colección Elemento de parámetros (XMLA) que permite definir parámetros y asignarles un valor. Dentro de la colección, cada elemento de Elemento de parámetros (XMLA) define el nombre del parámetro y un valor.

Para hacer referencia a los parámetros XMLA, debe añadir un carácter @ como prefijo al nombre del parámetro. En cualquier lugar de la sintaxis donde se permita un valor, este se podrá 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 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 elemento <Parameters> generan una respuesta de error en XMLA.

Instrucciones DAX
SUMMARIZECOLUMNS
TREATAS
FILTER