DAX es un lenguaje de consulta muy potente que permite desarrollar funciones para calcular y devolver uno o varios valores en entornos como Power BI, Power Pivot o modelos tabulares en SSAS. Como en todos los procesos de desarrollo, la depuración de código puede ser necesaria cuando no se consigue un resultado esperado y se desconoce el motivo. Lo mismo ocurre con las expresiones DAX y por ello, una forma fácil de depurar código en este lenguaje, es mediante la herramienta DAX Studio.

En este artículo, veremos las principales funcionalidades de la herramienta y cómo utilizarla desde un enfoque práctico 🙂

¿Qué es DAX Studio?

DAX Studio depurar expresiones 1

DAX Studio es una herramienta gratuita de código abierto que permite ejecutar y analizar expresiones DAX con el objetivo de depurar y mejorar los tiempos de ejecución de estas funciones.

¿Qué funciones tiene?

Lo primero que se debe hacer cuando se abre esta herramienta, es conectar DAX Studio al modelo de datos de Power BI, Power Pivot o tabular, en el que se necesita depurar código DAX.

How to connect DAX Studio

A continuación se detallan las cuatro principales funciones de DAX Studio:

Formar Query DAX Studio

  • “Format Query”: Se trata de una opción que permite formatear el código DAX de forma correcta para hacer la expresión lo más legible posible. Este botón es un acceso directo a la funcionalidad que aporta la página https://www.daxformatter.com/, desarrollada por los creadores de la plataforma sqlbi.

Format Query DAX Studio 2

  • “All Queries”: Esta segunda funcionalidad activa un servidor con el objetivo de capturar todas las consultas que son ejecutadas en el modelo de datos conectado.

All Queries DAX Studio

  • Query Plan”: Si se quiere ver el plan de ejecución generado a partir de una expresión DAX, esta es la característica de DAX Studio que lo permite. De esta forma se podrá capturar el plan lógico y físico de la expresión DAX analizada.

DAX Studio all queries 2

  • “Server Timings”: Junto con la opción anterior, esta tercera funcionalidad permite analizar los tiempos de ejecución de las expresiones DAX que corren en el modelo de datos. De esta manera, se permite completar el análisis del plan de ejecución ya que muestra los tiempos del plan lógico y físico así como el número de consultas que realiza cada uno de ellos.

DAX Studio server timings

¿Cómo utilizar DAX Studio?

A continuación se expone un caso real en el que es preciso depurar una expresión DAX debido a que su funcionamiento no es el esperado y se desconoce cuál puede ser el motivo:

En este caso, se trata de un modelo en estrella en Power BI, en el que se hayan una tabla de ventas, como tabla de hechos, y distintas dimensiones que permiten desglosar la información en función de la tienda, el producto, el cliente y la fecha.

DAX Studio expression

El problema que se presenta es que existen dos métricas en la tabla de hechos, que aparentemente tienen una sintaxis equivalente, pero su comportamiento es distinto.

TotalSalesNY =

CALCULATE (

SUM ( Sales[SaleIncome] );

Store[StoreDescription] = «Store New York»

)

Esta métrica pretende mostrar el resultado de las ventas realizadas en la tienda de Nueva York.

DAX Studio result

TotalSalesJune =

CALCULATE (

SUM ( Sales[SaleIncome] );

‘Date'[MonthNameLong] = «June»

)

Esta métrica muestra el resultado de las ventas realizadas en el mes de junio.

Tal y como se puede observar, la métrica “TotalSalesNY” repite el resultado de Nueva York al desglosar el dato por todas las tiendas. Este es el comportamiento correcto de la función CALCULATE ya que se está sustituyendo el contexto de filtro que conlleva cada tienda, por el filtro de la propia métrica, siendo este la tienda de Nueva York.

Este comportamiento no se está replicando con la métrica “TotalSalesJune” y por este motivo se debe analizar en profundidad. Al tratarse de una métrica sencilla, no es posible hacer una depuración mediante la introducción de variables en la propia métrica para ver resultados intermedios. Es por ello que la utilización de DAX Studio es la mejor opción para realizar la depuración de dicha métrica. De este modo, lo que se pretende es analizar la consulta DAX que está detrás de la visualización de la tabla compuesta por la métrica “TotalSalesJune”.

 

Desde DAX Studio, una vez conectado al Power BI en cuestión, se pueden ver las tablas y sus distintos campos y métricas a través de un “Object Browser”.

DAX Studio Query example

Si se hace click encima de las métricas con el botón derecho, se puede seleccionar la opción “Define Measure” y ver la expresión de la métrica desde DAX Studio.

DAX Studio define measure

La principal utilidad de esta ventana en la que aparecen las expresiones que definen las métricas, es la de ejecutar consultas DAX. Estas, a diferencia de las expresiones DAX que conforman métricas o columnas calculadas, únicamente devuelven una tabla como resultado de ejecución. Toda expresión DAX, para obtener los datos correspondientes, es transformada previamente en una consulta DAX.

Para capturar la consulta DAX que se genera al mostrar la métrica “TotalSalesJune”, se debe activar la funcionalidad “All Queries”. De esta manera se establece un servidor que captura todas las consultas que son ejecutadas en el modelo de datos de Power BI.

Una vez activado el servidor, lo óptimo es volver a crear las dos tablas en las que se muestran las métricas “TotalSalesNY” y “TotalSalesJune” desglosadas respectivamente por tiendas y por meses. De esta forma se capturan las consultas DAX generadas para la obtención de toda esta información.

Al crear las tablas, el servidor muestra las consultas DAX capturadas en la pestaña “All Queries”.

Si se hace click en las dos queries, se muestra en la ventana principal el código completo que componen ambas consultas. En las dos consultas, la primera parte está relacionada con un filtro que hay en el informe en el que se elimina la tienda “Main Store”.

El recuadro en rojo señala la parte de la consulta en la que se obtienen las ventas de la tienda de Nueva York con el desglose por tienda utilizando el campo “StoreDescription”.

DAX Studio code

De la misma forma, en la siguiente captura se señala en rojo la parte de la consulta en la que se obtienen las ventas de junio junto con el desglose mensual utilizando el campo “MonthNameLong”. En este caso, también se está utilizando el campo “MonthNumber” sin que en el Power BI se esté mostrando. Esta es la principal diferencia entre las dos métricas analizadas y por ese motivo no se están comportando de la misma forma.

DAX Studio problem revolve

Lo que está ocurriendo, es que al utilizar el campo “MonthNameLong”, internamente se está utilizando también la columna “MonthNumber” para que se muestren los meses ordenados. Por este motivo, la función CALCULATE en este caso, no puede sustituir su filtro por el contexto de filtro de cada fila en la tabla visualizada. Se debe forzar la obtención de todos los meses y no solamente el mes de junio mediante la siguiente modificación de la métrica:

TotalSalesJune2 =

CALCULATE (

SUM ( Sales[SaleIncome] );

‘Date'[MonthNameLong] = «June»;

ALL ( ‘Date'[MonthNumber] )

)

De esta forma, si creamos de nuevo la tabla con la métrica modificada y desglosando por meses, el comportamiento ahora es el correcto.

Esta ha sido una forma de depurar una métrica mediante la herramienta DAX Studio. Si te ha gustado el artículo, te invitamos a suscribirte a nuestra newsletter para recibir más noticias y tutoriales sobre temas relacionados en nuestro blog 🙂

Ruben González Barral

Data Platform Engineer at SolidQ
I am working at SolidQ as a Data Platform Engineer. I dedicate myself professionally to the development of Business Intelligence solutions through Microsoft tools.

My tasks focus on all the phases of a BI project, starting from the movement of data with SSIS, until its consolidation in a Data Warehouse in order to be able to consult information from different platforms such as SSRS, PowerBI or SSAS.
Ruben González Barral

Latest posts by Ruben González Barral (see all)