Domina CALCULATE y la Inteligencia de Tiempo: Claves para la Certificación PL-300 en Power BI

Domina CALCULATE y la Inteligencia de Tiempo: Claves para la Certificación PL-300 en Power BI

Written by:

Introducción La certificación PL-300 (Microsoft Power BI Data Analyst) demanda un entendimiento profundo de cómo crear y optimizar modelos de datos, así como de la sintaxis y uso de DAX (Data Analysis Expressions). Dentro de estas competencias, aprender a manipular el contexto de filtros y aprovechar la inteligencia de tiempo es fundamental para producir informes y visualizaciones potentes. En este artículo, exploraremos algunos conceptos clave, desde la función CALCULATE hasta la utilización de ALL y FILTER para controlar el filtrado, pasando por la importancia de las tablas de fechas para la inteligencia de tiempo. Además, revisaremos por qué a veces conviene reemplazar columnas calculadas por medidas para optimizar el rendimiento de nuestro modelo.

Si estás estudiando para la certificación PL-300 o simplemente deseas mejorar tus habilidades en Power BI, te invito a quedarte hasta el final. Compartiré consejos prácticos y ejemplos que te ayudarán a comprender mejor estos temas y aplicarlos en tus proyectos. ¡Acompáñame!


1. ¿Por qué es tan importante el perfilado de datos y la manipulación de filtros?

Antes de sumergirnos en DAX y CALCULATE, conviene subrayar la relevancia del perfilado de datos. En el entorno de Power BI, el perfilado de datos implica examinar la calidad, la distribución y las características de la información antes de crear cualquier modelo o medida. Para el examen PL-300, esta habilidad es esencial porque:

  1. Garantiza calidad y consistencia: Detectar valores atípicos, identificar columnas con valores nulos o faltantes y verificar tipos de datos adecuados acelera la fase de modelado y reduce posibles errores en nuestros cálculos.
  2. Optimiza la creación de medidas: Si conocemos a fondo los datos (por ejemplo, las relaciones entre tablas y el volumen de cada campo), podremos diseñar nuestras medidas DAX con mayor precisión y eficiencia.
  3. Evita confusiones en el contexto de filtros: Cuando la data está depurada y entendida, usar funciones como CALCULATE, FILTER o ALL se vuelve más intuitivo, minimizando resultados inesperados.

Si aspiramos a la certificación PL-300, dominar tanto el perfilado de datos como la manipulación de filtros en DAX nos dará una base sólida. Recuerda siempre validar la exactitud de tu modelo antes de aventurarte con complejas fórmulas de DAX.


2. Repaso de la función CALCULATE

La función CALCULATE es una de las más poderosas y utilizadas en DAX. Su propósito principal es cambiar o manipular el contexto de filtros para una expresión dada. De forma general, su sintaxis es:

CALCULATE(
    <expresión_de_medida>,
    <filtro1>,
    <filtro2>,
    ...
)
  • <expresión_de_medida>: Es la expresión que se calcula, generalmente una medida o agregación. Debe retornar un solo valor (por ejemplo, la suma de ventas o el recuento de filas).
  • <filtro1>, <filtro2>, …: Representan las condiciones o tablas que se aplican para modificar el contexto. Todos estos filtros se unen lógicamente mediante AND. Para un comportamiento de tipo OR, deberías usar || dentro de la expresión.

¿Por qué es útil CALCULATE? Imagina que quieres calcular los ingresos brutos, pero filtrados únicamente por una región específica, por ejemplo “Midwest”. Con CALCULATE, podrías escribir una medida como esta (en un pseudo-código ilustrativo):

GrossRevenue_Midwest =
CALCULATE(
    [GrossRevenue],
    'Regions'[Region] = "Midwest"
)

Esta medida devolvería el valor de ingresos brutos solo de la región “Midwest”, sin importar qué otros filtros existan en la página, siempre y cuando no sobrescriban directamente ese mismo criterio.

Aspectos clave a recordar para el examen PL-300:

  • CALCULATE cambia el contexto de filtros de manera muy controlada.
  • Puedes incluir múltiples filtros, todos unidos por la lógica AND.
  • Para comparaciones más elaboradas que incluyan medidas o columnas variables, deberás usar la función FILTER dentro de CALCULATE.

3. Uso de la función FILTER dentro de CALCULATE

Hay situaciones donde no basta con ‘Tabla’[Columna] = «Valor», sino que necesitamos comparar columnas entre sí, comparar con medidas o resultados de fórmulas complejas. En esos casos, FILTER es tu mejor aliada. La sintaxis típica es:

CALCULATE(
    <expresión_de_medida>,
    FILTER(
        <tabla_o_expresión_tabla>,
        <condición>
    )
)

Algunos ejemplos de condiciones que requieren FILTER son:

  • <columna> = <medida>
  • <columna> = <fórmula>
  • <columna> = <columna>
  • <medida> = <medida>
  • <medida> = <valor_fijo>

¿Por qué se necesita FILTER? Porque en estos casos no podemos expresar la condición con un simple operador de igualdad = o <> en la llamada directa a CALCULATE. FILTER recibe una tabla como primer argumento, y esa tabla puede ser la tabla original o una generada en tiempo de ejecución. A continuación, se aplica la condición para filtrar filas.

Por ejemplo, si quisiéramos encontrar cuántos productos hay con un ranking de ventas mayor que la media global, podríamos hacer algo así:

CountProductsAboveAverage =
CALCULATE(
    COUNTROWS('Products'),
    FILTER(
        'Products',
        [SalesRanking] > [AverageSalesRanking]
    )
)

Este tipo de comparación (columna vs. medida) obliga al uso de FILTER.


4. La función ALL para ignorar el contexto de filtros

Otra herramienta importante en DAX es la función ALL, que indica que se ignore por completo (o parcialmente) el contexto de filtros para una tabla o columna. Imagínate que quieres calcular el porcentaje de ingresos brutos que aporta cada producto con respecto al total. Sin ALL, si en un visual estás filtrando por un producto en particular, el denominador se reducirá a ese producto, obteniendo un resultado de 100%.

Para sortearlo, se suele usar una medida así:

%GrossRevenuePerProduct =
DIVIDE(
    [GrossRevenue],
    CALCULATE(
        [GrossRevenue],
        ALL('Products'[ProductName])
    )
)
  • [GrossRevenue] representa el numerador, es decir, los ingresos brutos del producto en el contexto actual.
  • CALCULATE([GrossRevenue], ALL(‘Products'[ProductName])) fuerza a que el cálculo del denominador se haga sobre todos los productos, ignorando el filtro por producto específico que se aplique en el informe.

De este modo, conseguimos un porcentaje correcto en cualquier nivel de desglose.

Consejo para el examen: A menudo se ven preguntas relacionadas con la eliminación parcial del contexto (p.ej., ignorar solo la columna de producto, pero mantener otras segmentaciones). Asegúrate de comprender cómo ALL, ALLSELECTED y ALLEXCEPT funcionan en distintos escenarios.


5. Inteligencia de tiempo: la clave de los análisis comparativos

La mayoría de los reportes en Power BI incluyen alguna forma de análisis de tiempo: comparar ventas actuales vs. pasadas, calcular acumulados anuales, totales mensuales, etc. Para ello, DAX ofrece funciones de inteligencia de tiempo muy útiles:

  1. Requieren de CALCULATE: Funciones como DATESYTD, DATESMTD o SAMEPERIODLASTYEAR suelen ir anidadas dentro de CALCULATE, para recalcular las expresiones en el contexto de fechas específico.
  2. Funciones “sintactic sugar”: Otras como TOTALYTD, CLOSINGBALANCEMONTH o TOTALMTD son atajos que internamente emplean CALCULATE y evitan que tengamos que escribir expresiones más largas.

Un ejemplo de medida usando “sintactic sugar” es:

Sales_YTD =
TOTALYTD(
    [TotalSales],
    'Date'[Date]
)

En cambio, la versión “manual” sería algo como:

Sales_YTD_Manual =
CALCULATE(
    [TotalSales],
    DATESYTD('Date'[Date])
)

Ambas devuelven resultados similares. Lo que varía es la forma de escribir la expresión.


6. Importancia de la tabla de fechas

Para aprovechar al máximo la inteligencia de tiempo, necesitamos una tabla de fechas adecuada. Este es uno de los puntos que Microsoft suele enfatizar en el examen PL-300. Una buena tabla de fechas debe:

  1. Cubrir todo el rango de fechas de tu modelo: Desde la fecha mínima hasta la máxima, sin saltos.
  2. Incluir columnas útiles: Año, trimestre, mes, día, semana, año fiscal, etc.
  3. Relacionarse con las tablas de hechos: Normalmente, relacionamos la tabla de fechas con las columnas de fecha relevantes (por ejemplo, OrderDate y ShipDate), de modo que podamos usar la misma tabla para múltiples roles.

Si tu tabla de fechas se llama ‘Date’ y está relacionada con una tabla de ventas ‘Sales’, es crucial que la relación apunte de ‘Date’[Date] a ‘Sales’[OrderDate] (o la columna correspondiente). Además, si en la misma tabla de ventas hay otra columna de fecha (por ejemplo, ShipDate), podemos crear una relación inactiva y luego activar esa relación de forma explícita en medidas específicas. Esto es parte de lo que se conoce como dimensión que se “disfraza” de múltiples roles, o “role-playing dimension”.


7. Dimensiones de roles (role-playing dimensions)

En ocasiones, una única tabla de fechas debe cubrir varios usos en el modelo: la fecha de pedido, la fecha de envío, la fecha de pago, etc. Esto es factible gracias a la creación de relaciones inactivas. Por ejemplo:

  • Relación activa: ‘Date’[Date] → ‘Sales’[OrderDate]
  • Relación inactiva: ‘Date’[Date] → ‘Sales’[ShipDate]

Cuando definimos una medida para, digamos, el número de productos enviados en el año en curso, podemos activar la relación inactiva usando la función USERELATIONSHIP dentro de CALCULATE. Un ejemplo simplificado podría ser:

ProductsShipped_YTD =
CALCULATE(
    [TotalProductsShipped],
    DATESYTD('Date'[Date]),
    USERELATIONSHIP('Date'[Date], 'Sales'[ShipDate])
)

Así, la misma tabla de fechas actúa en diversos roles: filtro para fechas de pedido o filtro para fechas de envío, según lo requiera la situación. Esto ahorra espacio en el modelo y nos brinda un enfoque más consistente.


8. Reemplazar columnas calculadas con medidas

En Power BI, existe una diferencia crucial entre las columnas calculadas y las medidas:

  • Columnas calculadas: Se evalúan y almacenan en la tabla para cada fila. Esto puede resultar costoso en términos de espacio y tiempo de procesamiento, sobre todo si hay un gran número de filas.
  • Medidas: Se evalúan en tiempo de ejecución, dependiendo del contexto de filtros. No almacenan valores para cada fila, sino que recalculan el resultado según sea necesario.

Por ejemplo, si tienes una columna calculada para el Margen (Ventas – CosteProducción) en una tabla con 1 millón de filas, esa columna se conservará físicamente en el modelo. En cambio, si usas una medida con la misma fórmula, el cálculo se realiza solo cuando la medida aparece en un visual.

¿Cuándo conviene usar medidas en lugar de columnas calculadas?

  • Cuando el resultado deseado es una agregación (suma, promedio, mínimo, máximo, etc.).
  • Cuando quieres optimizar el espacio en el modelo.
  • Cuando el valor no sea intrínseco a cada fila, sino que dependa de la interacción con otros filtros.

Para la certificación PL-300, es muy frecuente que las preguntas te hagan distinguir estos conceptos. Recuerda que las medidas se usan típicamente para agregaciones y que las columnas calculadas son más útiles cuando necesitas una clasificación por fila que se reutilizará en segmentaciones, agrupaciones o relaciones.


9. Consejos finales para el examen PL-300

  1. Practica la sintaxis de CALCULATE con filtros simples y complejos. Aprende a distinguir cuándo es obligatorio el uso de la función FILTER.
  2. Familiarízate con ALL, ALLEXCEPT, ALLSELECTED. Comprender cómo ignoran o modifican el contexto te dará ventaja en preguntas sobre porcentajes y totales acumulados.
  3. Domina la tabla de fechas: Asegúrate de saber cómo crearla, relacionarla y usarla con funciones de inteligencia de tiempo como TOTALYTD, SAMEPERIODLASTYEAR, DATESINPERIOD, etc.
  4. Perfilado de datos: No olvides que una parte importante del éxito en la certificación consiste en la capacidad de depurar y entender los datos antes de modelarlos.
  5. Role-playing dimensions: Presta atención a cómo se activan relaciones inactivas con USERELATIONSHIP. Ten presente que puedes tener varias relaciones entre la misma tabla de fechas y una tabla de hechos (ventas, pedidos, etc.).
  6. Evita anglicismos innecesarios: Aunque en la documentación oficial veas términos en inglés, trata de entenderlos y explicarlos de la forma más clara y nativa posible, ya que el examen también evalúa tu comprensión de los conceptos.
  7. Optimiza el uso de columnas calculadas: Usa medidas siempre que sea posible para ahorrar espacio y mejorar el rendimiento.

10. Conclusión y llamada a la acción

Dominar el contexto de filtros con CALCULATE, utilizar FILTER y ALL de manera eficiente, así como aprovechar las funciones de inteligencia de tiempo con tablas de fechas bien estructuradas, son aspectos esenciales para cualquier analista de datos que busque certificarse en PL-300. Además, reemplazar columnas calculadas por medidas (cuando sea posible) brinda un modelo más ligero y robusto.

Si estás preparando el examen, mi recomendación es que practiques con ejemplos reales y ejercicios prácticos. No te limites a la teoría: crea tus propias tablas de fechas, escribe medidas con inteligencia de tiempo, experimenta con relaciones activas e inactivas y observa cómo cambian los resultados al modificar el contexto de filtros.


Preguntas para la comunidad:

  • ¿Has utilizado CALCULATE y FILTER en tus proyectos de Power BI? ¿Cuál fue tu mayor desafío?
  • ¿Qué estrategias usas para optimizar el uso de columnas calculadas y medidas en tus modelos?
  • ¿Cómo gestionas la creación y mantenimiento de tu tabla de fechas en proyectos complejos?

¡Comparte tus experiencias en los comentarios! Al hacerlo, ayudarás a otros profesionales de Power BI a mejorar sus prácticas y, quién sabe, tal vez a certificarte con éxito en PL-300.

¡Te animo a dejar tus opiniones, dudas y consejos! Así, entre todos, seguiremos aprendiendo y fortaleciendo la comunidad de Power BI en habla hispana.


¡Mucho éxito en tu camino hacia la certificación PL-300 y en tus proyectos de Power BI!

Deja un comentario

Descubre más desde Blog de Alex Ayala

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo