Skip to content

Cálculos Visuales DAX: Descifrando el Reticulado y el Contexto Visual (Tutorial ÉPICO) con nueva herramienta DAX Grid.

Este artículo introduce el funcionamiento interno real de los Cálculos Visuales DAX, estudiando la Tabla Virtual, la clásula VISUAL SHAPE, el Reticulado (Lattice) y el Contexto Visual.

Descargar Compendio de Archivos

Inserta tu dirección de correo electrónico y pulsa Descargar para acceder a los: Datasets, Plantillas de Power BI y Mini libro de la publicación.

Bienvenidos una vez más a nuestro Martes de Lenguaje DAX. Hoy nos embarcamos en una misión especial: estudiar de manera meticulosa, profunda y de forma 100% real en el funcionamiento “detrás de cámaras” de los Cálculos Visuales DAX.

Sabemos que los Cálculos Visuales DAX fueron diseñados para ser accesibles, permitiendo que cualquier persona, incluso con conocimientos básicos o nulos en Lenguaje DAX, pueda crear sus propias métricas. Es una herramienta poderosa que democratiza el análisis de datos.

Sin embargo, a medida que avanzamos y creamos cálculos más sofisticados, es común encontrarnos con situaciones, casos y escenarios donde la solución no es tan evidente. ¿Te ha pasado que intentas algo y el resultado no es el esperado? Es aquí donde un conocimiento “más allá”, más profundo, se vuelve indispensable.

Materiales Incluidos

Este artículo incluye el conjunto de datos (archivos .csv) de tres escenarios: Ventas, Inventarios y Operador Logístico.

Además, contiene todas las plantillas de Power BI (.pbit) para consultar fácilmente las matrices, notas y expresiones DAX.

Finalmente, se anexa un minilibro en PDF que acompaña el contenido de este artículo y video. Todo el material se puede descargar en el cuadro superior.

¿Por qué estudiar el “Detrás de Cámaras” de los Cálculos Visuales DAX?

Para llegar a la solución deseada en esos escenarios complejos, necesitamos ir más allá de la superficie. Entender detalladamente el funcionamiento interno de estos cálculos es lo que nos permitirá desbloquear el siguiente nivel en nuestro dominio del Lenguaje DAX en el rubro de Cálculos Visuales DAX.

Este contenido podría parecer, a primera vista, dirigido a usuarios con experiencia previa en Lenguaje DAX, si es tu caso encontraras un gran valor en este artículo y vídeo, no obstante, si estás iniciando tu camino con DAX, ¡este video y artículo también es para ti!

Te garantizo que aprenderás conceptos fundamentales que, aunque puedan parecer avanzados al principio, te ayudarán enormemente en tu recorrido de aprendizaje y te permitirán dominar el Lenguaje DAX de una forma más sólida y eficiente. Verás cómo se conectan las piezas y por qué ciertas cosas funcionan como lo hacen.

¿Quieres Aprender DAX Paso a Paso?

Hablando de llevar tu conocimiento al siguiente nivel (al nivel élite, como decimos en Power Elite Studio), si estás buscando una formación integral, desde los fundamentos hasta las técnicas más avanzadas en DAX, te invito a conocer el Magíster en Lenguaje DAX de Power Elite Studio.

Este es, sin duda, el curso más completo en español, diseñado para llevarte de básico a intermedio, o de intermedio a experto.

El curso Magíster en Lenguaje DAX ofrece:

  • Acceso de por vida: Aprende a tu ritmo y revisa el contenido cuantas veces necesites.
  • Para todos los niveles: Incluso si tienes un conocimiento avanzado, este curso te ayudará a consolidar y descubrir nuevas temáticas.
  • Actualizaciones constantes: El mundo de DAX evoluciona, ¡y el curso también!
  • Oferta Especial: Si te unes a la Membresía Prime (+270h de cursos) en los próximos 7 días, ¡te descontamos el 100% de lo que pagaste por este curso!

Puedes explorar el Magíster en Lenguaje DAX aquí.

1. DAX Tradicional

Para adentrarnos en ese estudio detallado del “detrás de cámaras” de los Cálculos Visuales, es fundamental hacer una breve recapitulación. Necesitamos recordar aquellos elementos clave que nos permiten comprender los “Cálculos DAX tradicionales”, ya que son la base de todo.

Nota importante: Si ya eres un usuario con un recorrido avanzado en DAX, puedes sentirte libre de saltar esta sección introductoria y dirigirte directamente a la Sección 2. El Eslabón Perdido. No obstante, si deseas repasar estos conceptos o estás iniciando, ¡te recomiendo seguir con atención los próximos minutos!

El Corazón de DAX: El Modelo de Datos

Para visualizar los puntos específicos que nos ayudan a entender los Cálculos DAX, vamos a trabajar con un archivo de Power BI llamado Ventas que encuentras en el compendio de archivos asociados a este artículo, el compendio lo encuentras en la parte inicial o final del presente artículo.

En nuestro archivo Ventas, contamos con tres tablas principales:

  1. Ventas: Nuestra tabla de hechos, donde cada fila representa una transacción o evento.
  2. Región: Una tabla de dimensión que nos proporciona atributos geográficos.
  3. Fechas: La típica tabla de dimensión de tiempo.

Si nos vamos a la Vista de Modelo, podemos observar cómo estas tablas se interrelacionan.

1 – Vista de Modelo del Archivo Ventas.pbix

Tablas de Dimensión: Describiendo Nuestros Datos

  • Tabla Región: Aquí encontramos columnas como Ciudad, Continente, ID_Region y País.
    • Ciudad e ID_Region son listas de valores únicos; no se repiten, ya que representan atributos distintivos. ID_Region es, en este caso, un equivalente numérico para Ciudad.
    • Continente y País brindan información adicional o descriptiva del atributo principal, que es la ciudad.
    • Por estas características, la tabla “Región” es una tabla de dimensión. Contiene una columna con valores únicos (la clave) y nos permite segmentar o agrupar los datos (por país, región, etc.).
  • Tabla Fechas: Similarmente, es una tabla de dimensión con una columna de fechas únicas y otras columnas que nos permiten agrupar por Año, Trimestre, Mes, etc.

Tablas de Hechos: Registrando los Eventos

  • Tabla Ventas: Esta es nuestra tabla de hechos. Cada fila es un evento del proceso de ventas, donde vemos Cantidad, Precio_Unitario, Fecha_Venta, y el ID_Region (la ciudad) donde ocurrió.
    • Es importante notar que en la tabla de hechos (Ventas), el ID_Region sí puede tener valores repetidos, ya que múltiples ventas pueden ocurrir en la misma región. Esto se evidencia en la relación del modelo, donde el lado de la tabla “Región” tiene un “1” (indicando unicidad) y el lado de “Ventas” tiene un asterisco “*” (indicando “muchos”).

El Modelo de Datos Completo

Lo que tenemos frente a nosotros, de manera simplificada, es el Modelo de Datos: el conjunto de tablas relacionadas, con todas sus columnas, todas sus filas y las relaciones que las unen.

El Pilar Fundamental: Contexto de Evaluación

Y aquí llegamos al primer gran pilar para entender los cálculos DAX tradicionales (columnas calculadas, medidas, tablas calculadas y grupos de cálculo): los cálculos DAX se evalúan en el Modelo de Datos.

Pero, ¿qué significa esto en la práctica?

  • Una expresión DAX específica (es decir, una fórmula particular para una celda de una tabla en un gráfico, o un punto específico de un objeto visual) se ejecuta sobre un “pedacito” (o varios “pedacitos”) de las tablas del modelo de datos. En otras palabras, la fórmula opera sobre un subconjunto de filas particular.

Este subconjunto de filas o “pedacitos” de tablas visibles es dictado por el Contexto de Evaluación. Y este contexto, a su vez, se compone de dos “sabores” principales:

  1. Contexto de Filtro: Es el conjunto de todos los filtros que se aplican al modelo de datos en un momento dado. Estos filtros son dictados inicialmente por el objeto visual (por ejemplo, la fila “Alemania” en nuestra matriz) y todo lo que lo filtra externamente (segmentaciones de datos, filtros en el panel de filtros, interacciones con otros gráficos).
  2. Contexto de Fila: Es la restricción a la fila actual en el “pedacito” de tabla que está visible en el modelo de datos, producto de un iterador (como SUMX).

Analogía: Piensa en el Modelo de Datos como un mapa detallado de todo. El Contexto de Evaluación es como poner una chincheta o un “pin” en ese mapa que dice: “Usted está aquí”. Este “pin” define el área específica sobre la cual se realizará el cálculo.

Aplicando el Concepto: Un Ejemplo Práctico

En la primera página en la vista de informe del archivo de Ventas.pbix tenemos la matriz:de “Ingresos por País”:

2 – Matriz de Ingresos por País

Enfoquemos nuestra atención en la celda de Alemania:

  • Para la celda de ingresos de “Alemania”, el contexto de filtro inicial es: Región[País] = "Alemania"
  • Este filtro actúa sobre la tabla Región, dejando visibles solo las filas donde País es “Alemania”, y por ende sólo queda visibles las filas cuyo ID_Region son: 33, 34 y 35
3 – Tabla de Región Filtrada Detrás de Cámaras por el Contexto de Filtro
  • Estos filtros de ID_Region propaga automáticamente a través de la relación (del lado del “1” al lado de los “muchos”) a la tabla Ventas gracias a al relación que existe entre este par de tablas mediante las columnas ID_Region, que para ambas tablas, en este caso, se llaman igual. Así, en la tabla Ventas, solo quedan visibles las filas cuyo ID_Region sea 33, 34 o 35.
4 – Tablas de Ventas Filtrada por Propagación Automática de Filtros
  • La tabla Fechas, al no estar directamente afectada por este filtro (la propagación no va en sentido opuesto al filtro cruzado), permanece intacta en este contexto inicial.

La medida Ingresos, que es:

                1 | = 2 | SUMX ( 3 |     Ventas, 4 |     Ventas[Precio_Unitario] * Ventas[Cantidad] 5 | )            

Realizará su recorrido fila por fila (gracias al contexto de fila creado por la propia función SUMX) únicamente sobre ese pedacito de la tabla Ventas que quedó visible después de aplicar el contexto de filtro. Multiplicará Precio_Unitario por Cantidad para cada una de esas filas filtradas y luego sumará todos esos resultados.

Este es el valor que finalmente se muestra en la celda “Alemania” de nuestra matriz. El mismo proceso se repite para Argentina, Australia, etc., cambiando el contexto de filtro inicial.

En resumen: Para dominar DAX, es crucial entender que las fórmulas no operan sobre la totalidad de las tablas siempre, sino sobre los subconjuntos de datos definidos por el contexto de evaluación (Contexto de Filtro + Contexto de Fila).

2. El Eslabón Perdido

¡Muy bien! Ahora que hemos repasado los fundamentos de cómo los “Cálculos DAX Tradicionales” se evalúan en el modelo de datos en un ambiente determinado para el mismo mediante: Contexto de Filtro + Contexto de Fila, es momento de dar el siguiente paso. Vamos a entender el ambiente donde se evalúan los Cálculos Visuales DAX.

Si nos dejamos llevar únicamente por lo superficial, por lo que vemos en la interfaz de Power BI, podríamos caer en una trampa. Podríamos pensar que los Cálculos Visuales DAX operan directamente sobre la matriz virtual o tabla virtual que representa el gráfico tal cual lo vemos.

El Desafío: La Lógica del Inventario y la Función LAST

Consideremos un ejemplo común en el análisis de Inventarios, el archivo de Power BI asociado se llama Inventarios.pbix y lo encuentras en el compendio de archivos de este artículo.

En el archivo tenemos una matriz que tiene Fecha de la dimensión de Fechas en el área de filas y tiene en el área de valores la medida: #sumStock, cuya definición es:

                1 | #sumStock = 2 | SUM ( Inventario[Cantidad_Stock] )            

Nos daremos cuenta que la medida por fecha esta bien, pues sumar el Stock para los distintos productos en los distintos almacenes es coherente, pues representaría el Stock al nivel de empresa, sin embargo, el total general estaría sumando el valor de Stock para cada fecha y esto no es coherente pues el Stock por fecha es una foto de lo que había, por lo que no puede ser aditivo

Por lo anterior, lo más común es querer mostrar el último valor de Stock a nivel de Fecha.

Si creamos un Cálculo Visual para esta matriz y no dejamos llevar por que una expresión DAX de cálculo visual se ejecutaría de forma 100% literal en la matriz virtual como la vemos en Power BI, e intentáramos el Cálculos Visual: LAST ( [#sumStock] ), observaremos un comportamiento que podría parecer inesperado:

5 – Resultado de LAST

Si LAST se ejecutará literalmente en la matriz que tenemos en frente, entonces, debería ser el 2045 el que deberíaos ver en todas partes, pues es el último valor según vemos la matriz.

¿Qué sucede realmente?
En una matriz con fechas y un cálculo visual como StockLast = LAST ( [#sumStock] ), veremos que:

  • A nivel de cada fecha individual, el cálculo SotckLast repite el valor de Stock de la última fecha disponible, es decir, que se evalúa para el pedacito de tabla que tiene el mismo nivel de detalle (Fecha), por ello el último dato es 550.
  • En el total general, el cálculo StockLast devuelve el total general: 2045, porque el nivel de detalle es diferente, es el detalle más global, por lo tanto, el pedacito de tabla donde se ejecuta es una tabla con un sola fila, que es el total general.

En otras palabras un Cálculo Visual para un punto determinado se ejecuta en un pedacito de tabla de la tabla o matriz virtual definido, que no necesariamente incluye toda las filas y columnas de la tabla virtual.

Claramente, este comportamiento no es el que buscaríamos para obtener el Stock de la última fecha en el total general.

Recapitulando los Cálculos Visuales: DAX NO se ejecutan sobre la Tabla Virtual en su forma “literal” como la vemos en la interfaz, sino en pedacitos de tabla (filas y columnas determinadas) derivados de esa Tabla Virtual total, pero para saber bien cómo se forma y cuáles son la reglas que rigen estos “pedacitos” hace falta información, hay un eslabón perdido.

3. VISUAL SHAPE

Una de las primeras revelaciones clave es que los cálculos visuales en DAX NO se ejecutan en la Tabla Virtual en su forma “literal”, tal como la vemos en la interfaz de Power BI.

Si pensamos en una matriz típica, por ejemplo, con “Fecha” en filas y “#SumStock”, en valores podríamos imaginar que una función como LAST([#sumStock]) simplemente tomaría el último valor visible de la matriz.

Si esto fuera así, el resultado sería el mismo para todas las celdas (el último valor del total general, por ejemplo, 2045). Sin embargo, observamos que el comportamiento es diferente. Parece que el cálculo se ejecuta en “ambientes” (pedacitos) distintos para cada sección de la matriz (valores individuales, subtotales, total general).

¿Cómo sabe el “Motor DAX” en qué nivel de detalle ejecutará el Cálculo DAX Visual puntual?

¿Cómo entiende la lógica cuando tenemos múltiples campos, jerarquías típicas como: Año > Trimestre > Mes > Día y más aún cuando esta en conjunto como otras jerarquías, como por ejemplo: Bodega > Pasillo > Estantería > Estante > Producto ?

El Eslabón Perdido: WITH VISUAL SHAPE

Aquí es donde entra en juego un concepto crucial que a menudo pasa desapercibido si solo nos quedamos con la interfaz: la cláusula WITH VISUAL SHAPE.

Si profundizamos y analizamos la Consulta DAX que Power BI genera internamente para una visulización que tiene un Cálculo Visual, por ejemplo, usando el Analizador de Rendimiento y examinando las Consulta DAX para una matriz con Fecha en filas y Almacén en columnas, nos encontraremos con una expresión DAX con una estrcutura:

                 1 | DEFINE 2 |     COLUMN __DS0VisualCalcs[#Stock] = ... 3 |     COLUMN __DS0VisualCalcs[StockLast] = .. 4 |  5 |     VAR __DS0Core = 6 |         SUMMARIZECOLUMNS ( 7 |            ... 8 |         ) 9 |     VAR __DS0VisualCalcsInput =10 |         SELECTCOLUMNS (11 |            ...12 |         )13 | 14 |     TABLE __DS0VisualCalcs = __DS0VisualCalcsInput15 |         WITH VISUAL SHAPE16 |         AXIS ROWS17 |             GROUP [Fecha]18 |                 TOTAL [IsGrandTotalRowTotal]19 |             ORDER BY [Fecha] ASC20 |         AXIS COLUMNS21 |             GROUP [Almacen]22 |                 TOTAL [IsGrandTotalColumnTotal]23 |             ORDER BY [Almacen] ASC24 |         DENSIFY "IsDensifiedRow"25 |     26 | EVALUATE27 |     __DS0Secondary28 | ORDER BY29 |     ...30 | 31 | EVALUATE32 | __DS0BodyLimited33 |    ORDER BY34 |    ...            

Y dentro de esa consulta DAX (en el code snippet anterior simplifciado) veremos algo nunca antes visto en el Lenguaje DAX tradicional, el verdadero “eslabón perdido”: la cláusula WITH VISUAL SHAPE.

Esta cláusula es la que proporciona al “Motor DAX” los metadatos esenciales sobre la estructura del objeto visual. Estos metadatos informan a DAX sobre:

  • AXIS ROWS y AXIS COLUMNS: Qué campos se encuentran en las filas y columnas, por ende la jerarquía.
  • GROUP: Los campos de agrupación (ej. [Fecha], [Almacén]).
  • TOTAL: Si se incluyen y cómo se calculan los totales y subtotales (ej. [IsGrandTotalRowTotal], [IsGrandTotalColumnTotal]).
  • ORDER BY: El orden de los campos (ej. [Fecha] ASC, [Almacén] ASC).
  • DENSIFY: Cómo se maneja la densificación de datos (mostrar elementos aunque no tengan datos).

Es crucial entender que WITH VISUAL SHAPE no materializa nuevas filas o columnas en la consulta DAX que vemos. Eso es tarea de cláusulas como DEFINE, EVALUATE, TABLE, COLUMN en el DAX de consulta tradicional. En cambio, WITH VISUAL SHAPE describe la estructura para que el “Motor DAX” sepa cómo interpretar, segmentar y agregar los datos de la Tabla Virtual.

La Fórmula Secreta: Reticulado = Tabla Virtual + Visual Shape

Para comprender verdaderamente cómo operan los cálculos visuales, debemos pensar en la siguiente “ecuación”:

Reticulado (Pedacitos de tabla donde se evalúan cálculos visuales ) = Tabla Virtual (Datos de la consulta DAX) + Visual Shape (metadatos de la estructura)

Este “Reticulado de Tabla Virtual” es la lógica interna que DAX utiliza.

Es la combinación de los datos agregados (Tabla Virtual) con la información estructural (Visual Shape). Es sobre este “Reticulado” que los cálculos visuales realmente operan, permitiendo que la misma fórmula LAST([#sumStock]) se comporte de manera diferente en los valores individuales, subtotales y totales generales, porque el “ambiente” o el “pedacito de datos visibles” cambia en cada uno de esos puntos.

En conclusión: Para dominar los cálculos visuales, no basta con entender la Tabla Virtual; es imprescindible comprender el papel de WITH VISUAL SHAPE y cómo, en conjunto, definen el “Reticulado” sobre el cual tus expresiones DAX serán evaluadas. Este es el conocimiento que nos permite ir más allá de lo superficial y resolver escenarios complejos con precisión.

6 – La fórmula del Reticulado

El Reticulado de tabla virtual, el cual también podríamos llamar Entramado de tabla virtual, es conocido en inglés como Virtual Table Lattice. Este concepto y su explicación fueron claramente y bien expuestos por el equipo de SQLBI. Te dejo el artículo de referencia aquí del equipo de SQLBI para su estudio.

4. El Reticulado (“Lattice”)

Muy bien, y ya que hemos armado este rompecabezas para entender dónde es que realmente se evalúan los cálculos visuales en DAX, es crucial recordar que no es en la matriz virtual que vemos literalmente en la interfaz de Power BI. El secreto está en la combinación de la Tabla Virtual (los datos agregados) y los metadatos de Visual Shape.

Esta combinación crea lo que podemos denominar el Reticulado de Tabla Virtual. Es sobre este reticulado, con sus distintos niveles de detalle y jerarquías, que los cálculos visuales operan.

Definiendo el Reticulado de Tabla

El Reticulado es el conjunto de todas las combinaciones posibles de campos en los ejes (ROWS y COLUMNS) según la jerarquía definida, y para cada una de estas combinaciones jerárquicas, incluye todas las combinaciones de los valores (elementos) de dichos campos.

Nota al pie para desarrolladores DAX: El reticulado es una representación conceptual. El motor DAX infiere todo esto de la combinación de Tabla Virtual + Visual Shape sin necesidad de materializar físicamente este reticulado completo en memoria. Esto nos facilita a nosotros, como desarrolladores, el entendimiento de su funcionamiento.

Construyendo el Reticulado: Un Ejemplo Práctico

Para aterrizar este concepto y construir el reticulado, volvamos a nuestra archivo de Power BI de Inventarios, y, en una nueva matriz agregamos:

  • Área de filas (ROWS): Campo Fecha.
  • Área de columnas (COLUMNS): Campo Almacén.
  • Área de valores: Medida #sumStock .

Para construir el Reticulado, el punto de partida o “Nodo Raíz” o “Nivel 0” del Reticulado es el total general, donde no hay detalle específico de fecha ni almacén. En nuestro ejemplo, es el valor de 2045 para #sumStock.

A partir de aquí, se generan los siguientes niveles:

  1. Nivel 1 en ROWS (Nodo Fecha): Se crea una “mini-tabla” o nodo para el eje de filas, que en este caso solo contiene el campo Fecha. Aquí se listan todas las fechas únicas presentes en nuestro contexto.
    • 01/05/2025 con #Stock 475
    • 02/05/2025 con #Stock 465
    • Y así sucesivamente.
  2. Nivel 1 en COLUMNS (Nodo Almacén): De forma similar, se crea un nodo para el eje de columnas, que contiene el campo Almacén.
    • Principal con #Stock 1820
    • Sucursal Norte con #Stock 225
  3. Nivel 1 en ROWS Y COLUMNS (Nodo Intersección): Aquí es donde el reticulado muestra su verdadera estructura. Se generan todas las combinaciones posibles de los elementos de los nodos de fila y los nodos de columna.
    • 01/05/2025 | Principal con #Stock 400
    • 02/05/2025 | Principal con #Stock 465
    • 01/05/2025 | Sucursal Norte con #Stock 75
    • 02/05/2025 | Sucursal Norte con #Stock 0
    • Y así sucesivamente para todas las fechas y todos los almacenes.

Gráficamente:

7 – Reticulado de Tabla Virtual Gráficamente

La Clave: Los cálculos visuales se evalúan en el Reticulado de Tabla Virtual. El contexto de evaluación (que para los cálculos visuales es el “Contexto Visual”,) dictará sobre qué “pedacito” específico de este Reticulado operará la fórmula.

Es por esto que la función LAST ( [#sumStock] ) en nuestro ejemplo anterior devuelve 550,00 para cada fecha en la columna “Total”, y 2.045,00 en el “Total General” de la matriz. El cálculo se aplica sobre la porción relevante del reticulado, que incluye la información jerárquica y de agregación definida por WITH VISUAL SHAPE.

Entender y poder “construir” mentalmente este reticulado, considerando los campos en los ejes, sus jerarquías y el orden, es el paso fundamental para dominar la lógica detrás de los cálculos visuales en DAX.

5. Resolviendo el Escenario

Para resolver el caso de Stock de escenario de Inventarios que hemos estado conversando, ya tenemos dos conceptos claves que rigen los Cálculos Visuales:

  1. Reticulado
  2. Contexto Visual

Sobre el Contexto Visual: Para cada celda de la matriz, el “motor DAX” tiene un contexto de evaluación único. Este contexto se define por los ejes (los campos en las áreas de filas y columnas, como Fecha y Almacén) y los filtros (los valores específicos que intersectan en esa celda, como Fecha = ’01/05/2024′ y Almacén = ‘Principal’).

La magia ocurre al entender que podemos identificar y manipular este contexto para cada celda, incluyendo los subtotales y el total general, permitiéndonos aplicar lógicas diferentes según dónde se esté realizando el cálculo.

Implementando la Solución: La Lógica DAX en Acción

Con estos conceptos en mente, podemos crear un cálculo visual que corrija nuestros totales. Utilizaremos una lógica condicional con la función ISATLEVEL(), que nos permite verificar si el cálculo se está ejecutando en un nivel de detalle específico.

La fórmula que implementaremos se vería así:

                1 | Stock = 2 | IF (3 |     ISATLEVEL ( [Fecha] ),4 |     [#sumStock],5 |     EXPAND( LAST( [#sumStock] ), ROWS )6 | )            

Desglosemos esta fórmula:

  • IF ( ISATLEVEL ( [Fecha] ), … ): Aquí preguntamos: “¿Estoy en un nivel de detalle donde el campo Fecha está presente?”.
    • Si es VERDADERO (estamos en una fila de fecha individual): La fórmula devuelve [#sumStock], que es el valor correcto para esa celda. Los subtotales de fila (el Total de la derecha) también entran aquí, ya que se calculan a nivel de fecha y la suma de los almacenes para un día sí es correcta.
    • Si es FALSO (estamos en un subtotal de columna o en el total general, donde no hay una Fecha específica): Activamos la lógica alternativa.
  • EXPAND( LAST( [#sumStock] ), ROWS ): Esta es la parte clave para los totales.
    • LAST( [#sumStock] ): Obtenemos el último valor de la columna de stock dentro del contexto actual.
    • EXPAND( … , ROWS ): Forzamos a que pase del nodo raíz a que pase al nodo con el detalle de fecha, pero sin el detalle de alamacén, pues le decimos que expanda sólo en ROWS y no en COLUMNS, gráficamente esto ocurre en el reticulado:
8 – Funcionamiento de EXPAND básico desde el Reticulado

Al aplicar este cálculo, la matriz se transforma. Los subtotales de columna ahora muestran 470,00 y 80,00 respectivamente, y el total general muestra 550,00, que es el stock total de la última fecha registrada (04/05/2024). ¡Hemos corregido los totales con éxito!

Este ejemplo apenas roza la superficie de lo que es posible. Entender el reticulado virtual y el contexto visual es el primer paso para desbloquear todo el potencial de los Cálculos Visuales, una herramienta que sin duda cambiará la forma en que construimos nuestros informes en Power BI.

6. DAX Grid

Como hemos corroborado a lo largo de las últimas secciones, tener un entendimiento profundo del Reticulado de tabla virtual es lo que nos permite, desde comprender un cálculo visual DAX básico, hasta crear escenarios de alta complejidad de manera sorprendentemente sencilla. Este concepto es la base sobre la que se construyen los Cálculos Visuales en Lenguaje DAX, y dominarlo marca la diferencia.

El Reticulado (Lattice) es, en esencia, la combinación de dos elementos: la Tabla Virtual (el subconjunto de datos que alimenta tu visual) y el Visual Shape (la estructura jerárquica que defines en los ejes de filas y columnas). Entender este “mapa” de datos es crucial, pero:

¿Qué sucede cuando la complejidad de nuestro visual crece exponencialmente?

El Reto: Cuando las Jerarquías se Vuelven Imposibles de Imaginar

Consideremos un escenario realista, como el de un Operador Logístico (archivo OperadorLogístico.pbix que encuentras en el compendio de archivos de eset artículo). Podemos tener una matriz con múltiples niveles de jerarquía en las filas (Industria, Tipo, Modalidad, Ruta) y también en las columnas (Continente, Región, Año, Trimestre). En una estructura tan densa, intentar visualizar mentalmente el reticulado de datos, con todos sus nodos de agregación y combinaciones, se convierte en una tarea titánica.

¿Cómo podemos saber con certeza en qué nodo específico se está evaluando nuestro cálculo? ¿Cómo podemos navegar de un subtotal de “Industria y Continente” al promedio del “Continente” para hacer una comparación?

Aquí es donde la abstracción se encuentra con una barrera práctica.

La Solución: DAX Grid, el Visualizador de Reticulado

Para resolver este desafío, en Power Elite Studio hemos desarrollado una herramienta gratuita y accesible para toda la comunidad: DAX Grid.

DAX Gird Se trata de un servicio web que no requiere instalación y te permite generar una representación gráfica de cualquier reticulado DAX.

9 – DAX Grid: Logo

El proceso es increíblemente simple:

  1. En Power BI, ve a la pestaña Optimizar y abre el Analizador de rendimiento.
  2. Inicia la grabación y actualiza tus objetos visuales.
  3. Despliega los detalles de tu matriz y haz clic en Copiar consulta. Esto copiará al portapapeles el código DAX que genera el visual, incluyendo la cláusula clave WITH VISUAL SHAPE que define la estructura.
  4. Abre tu navegador y ve a dax-grid.com.
  5. Pega la consulta que copiaste en el área de texto.
  6. Haz clic en Generar Gráfico del Reticulado.
10 – Utilizando DAX Grid

Lo que obtendrás es un mapa visual de tu Reticulado, donde cada caja representa un “nodo” o un nivel de agregación. Por ejemplo, verás el Nivel 0 (el total general), los nodos del primer nivel (como [Industria] o [Continente]), y todos los nodos de intersección (como [Industria] X [Continente]).

11 – Reticulado Generado por DAX Grid

Esta visualización es una herramienta de aprendizaje y depuración de un valor incalculable. Te permite:

  • Identificar con precisión en qué nodo se está ejecutando tu fórmula.
  • Planificar tus cálculos sabiendo exactamente cómo navegar de un punto a otro del Reticulado.
  • Acelerar tu curva de aprendizaje, transformando un concepto abstracto en un diagrama concreto y fácil de entender.
  • Descargar la imagen en formato PNG o SVG para documentar tus desarrollos o incluirla en tus presentaciones.

Entender el Reticulado de la tabla virtual es obligatorio para dominar los Cálculos Visuales. Con DAX Grid, ese entendimiento está a solo un clic de distancia, permitiéndote construir lógica DAX más compleja, precisa y rápida que nunca.

7. Final

Y así, hemos llegado al final de esta clase magistral. Antes que nada, quiero felicitarte por haber completado este estudio meticuloso e inicial sobre el fascinante mundo que se esconde detrás de los Cálculos Visuales. Ver cada sección, replicar los ejercicios y repasar los conceptos clave es el primer gran paso para dominar esta nueva frontera en Power BI.

Lo que hemos explorado hoy es apenas la introducción al “detrás de cámaras” de los Cálculos Visuales en DAX. Esto significa que todavía tenemos mucha temática por delante. Profundizaremos en el contexto visual, aprenderemos a modificarlo con precisión tanto en ejes como en filtros, y descubriremos cómo navegar por el reticulado de datos de maneras avanzadas, saltando, reiniciando y aplicando lógicas complejas que van mucho más allá de lo convencional.

Si deseas llevar tu aprendizaje al siguiente nivel y estudiar toda esta materia de forma estructurada, con módulos, lecciones y un acompañamiento visual que caracteriza a Power Elite Studio—con infografías animadas y visualizaciones que hacen lo complejo, simple—, te invito a explorar nuestro Magíster en Lenguaje DAX.

La excelente noticia es que, una vez lo adquieres, el acceso es para toda la vida, garantizando que siempre estarás actualizado con las últimas novedades.

En el Magíster en Lenguaje DAX, encontrarás un recorrido completo que va desde los fundamentos del DAX a nivel de modelo de datos hasta las técnicas más avanzadas, incluyendo:

  • Funciones de iteración.
  • Ejemplos prácticos y casos de uso avanzados.
  • Un dominio total de la función CALCULATE.
  • Una introducción detallada y módulos completos sobre Cálculos Visuales, donde desglosamos su funcionamiento interno para que puedas interiorizar lo complejo y hacerlo sencillo.

No siendo más, me despido y ¡hasta la próxima!

8. Bibliografía

Wang, J. (2024, 17 de abril). Visual Calculations: Introducing a Two-Layer Approach in DAX Calculations. pbidax. Recuperado de https://pbidax.wordpress.com/2024/04/17/visual-calculations-introducing-a-two-layer-approach-in-dax-calculations/
pbidax.wordpress.com

Russo, M., & Ferrari, A. (2024, 16 de marzo). Introducing VISUAL SHAPE for visual calculations in Power BI. SQLBI. Recuperado de https://www.sqlbi.com/articles/introducing-visual-shape-for-visual-calculations-in-power-bi/
sqlbi.com

Russo, M., & Ferrari, A. (2024, 26 de marzo). Introducing EXPAND and COLLAPSE for visual calculations in Power BI. SQLBI. Recuperado de https://www.sqlbi.com/articles/introducing-expand-and-collapse-for-visual-calculations/
sqlbi.com

Russo, M., & Ferrari, A. (2024, 15 de marzo). Understanding Visual Calculations in DAX [White paper]. SQLBI. Recuperado de https://www.sqlbi.com/whitepapers/understanding-visual-calculations-in-dax/

Descargar Compendio de Archivos

Inserta tu dirección de correo electrónico y pulsa Descargar para acceder a los: Datasets, Plantillas de Power BI y Mini libro de la publicación.

El Ing. Miguel Caballero es Microsoft MVP en la categoría Data Platform, además, es Microsoft Certified Trainer. Exmiembro de Power Skill (Escuela de Inteligencia de Negocios S.A.S) y Excel Free Blog

Back To Top