Diseñar cálculos escalables

Completado

El modelo está estructurado. Ahora diseñe los cálculos que lo mantienen eficaz y fácil de mantener a medida que crecen los datos y el equipo. A pequeña escala, un modelo con medidas duplicadas y nombres incoherentes sigue funcionando, incluso si no es ideal. A gran escala, el sistema falla. Un modelo con cientos de medidas necesita decisiones de diseño estructural que impidan la lógica duplicada, reduzcan el tiempo de consulta en grandes conjuntos de datos y hagan posible que los nuevos miembros del equipo comprendan y amplíen el modelo sin introducir errores.

Esta unidad aborda tres patrones: grupos de cálculo para reducir la proliferación de medidas, disciplina de legibilidad de DAX para facilitar el mantenimiento por parte del equipo y agregaciones para mejorar el rendimiento de las consultas en tablas de hechos de gran tamaño.

Grupos de cálculo

Los grupos de cálculo son objetos de modelo que aplican el mismo patrón de cálculo en varias medidas. En lugar de crear medidas independientes para cada variación, se define el patrón una vez y se aplica dinámicamente.

El problema que resuelven los grupos de cálculo

Considere una organización con 50 medidas base (como Ventas totales, Costo total, Beneficio y Unidades vendidas). Cada medida necesita cálculos de año a fecha, trimestre a fecha y mes a fecha. Sin grupos de cálculo, es 50 × 3 = 150 medidas adicionales. Agregue comparaciones del año anterior y examine más de 250 medidas para mantener.

Con los grupos de cálculo, se crea un grupo con elementos de cálculo para cada patrón de inteligencia de tiempo. Esos elementos se aplican a cualquier medida del modelo automáticamente.

Funcionamiento de los grupos de cálculo

Un grupo de cálculo contiene elementos de cálculo, cada uno de los cuales define una expresión DAX que modifica la medida actual mediante SELECTEDMEASURE(). He aquí un grupo de cálculo de inteligencia temporal:

// Year-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD('Date'[Date])
)
// Quarter-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESQTD('Date'[Date])
)
// Month-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESMTD('Date'[Date])
)

Cuando un usuario agrega el grupo de cálculo a un objeto visual, puede cambiar entre YTD, QTD y MTD para cualquier medida (como Ventas totales, Ganancias o Unidades vendidas) sin medidas independientes para cada combinación.

Cadenas de formato dinámico

Las cadenas de formato dinámico cambian el formato de presentación en función del contexto del elemento de cálculo. Por ejemplo, un cálculo de porcentaje debe mostrarse como porcentaje, mientras que los cálculos de moneda deben mostrarse como moneda, incluso cuando se aplican a la misma medida base.

// In the format string expression for a YoY % calculation item:
"0.0%"

Las cadenas de formato dinámico reducen la necesidad de medidas con formato independientes y mantienen el formato coherente en todo el modelo.

Sugerencia

Obtenga más información sobre cómo crear grupos de cálculo en Power BI.

Cuándo usar grupos de cálculo

Use grupos de cálculo cuando tenga tres o más medidas que necesiten aplicar el mismo patrón de cálculo. Entre los casos de uso comunes se incluyen la inteligencia de tiempo (YTD, QTD, MTD), la conversión de moneda y los cálculos de varianza (real frente al presupuesto).

Disciplina de legibilidad de DAX

A escala con un equipo que mantiene más de 200 medidas, la legibilidad es una decisión de diseño, no una preferencia personal. DAX coherente y legible reduce los errores de mantenimiento y facilita que los nuevos miembros del equipo comprendan el modelo.

Variables

Las variables almacenan resultados intermedios, mejoran la legibilidad y impiden que el motor evalúe la misma expresión varias veces:

Profit Margin =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
VAR ProfitAmount = TotalRevenue - TotalCost
RETURN
    DIVIDE(ProfitAmount, TotalRevenue)

Sin variables, la misma SUM(Sales[Revenue]) expresión puede aparecer tres veces en una medida compleja. Las variables evalúan la expresión una vez y reutilizan el resultado.

Sugerencia

Obtenga más información sobre el uso de variables para mejorar las fórmulas DAX.

Convenciones de nomenclatura

La nomenclatura coherente es fundamental cuando el modelo tiene cientos de medidas mantenidas por varias personas. Establecer convenciones para:

  • Nombres de medida: use nombres descriptivos claros, como "Ventas totales" o "Crecimiento de ingresos yoY". Evite abreviaturas que solo comprenda el autor original.
  • Nombres de variable: use nombres descriptivos que expliquen el valor intermedio (por TotalRevenue ejemplo, en lugar de x o temp).
  • Elementos del grupo de cálculo: Nombra los elementos por lo que hacen, no por cómo funcionan (por ejemplo, "Year-to-Date" en lugar de "DATESYTD Wrapper").

La nomenclatura descriptiva también es importante para el consumo de inteligencia artificial. Cuando Copilot o un agente de datos consulta el modelo, usa nombres de medida y descripciones para determinar qué cálculos se van a incluir. Una medida denominada "Crecimiento de ingresos yoY" genera mejores resultados de inteligencia artificial que "Calc7_v2".

Sugerencia

Copilot en Power BI puede ayudar a escribir y explicar fórmulas DAX. Cuando trabaje con medidas complejas, use Copilot para sugerir mejoras o explicar la lógica existente.

Iteradores frente a funciones de agregación

Las funciones de iterador (SUMX, AVERAGEX, MAXX) evalúan una expresión de fila por fila en una tabla. Las funciones de agregación (SUM, AVERAGE, MAX) funcionan en una sola columna. En grandes volúmenes de datos, la elección es importante:

  • Use funciones de agregación al resumir una sola columna. Son más rápidos porque el motor puede usar estructuras de datos precompiladas.
  • Use iteradores cuando el cálculo requiera una expresión de nivel de fila (como Quantity × UnitPrice por fila).

Nota:

Los iteradores procesan cada fila, lo que puede afectar al rendimiento en tablas de hechos grandes.

Funciones de información para patrones defensivos

Las funciones de información como ISBLANK, HASONEVALUEy ISINSCOPE crean patrones defensivos para las medidas consumidas por varios informes con contextos de filtro diferentes:

Sales per Customer =
IF(
    HASONEVALUE(Customer[CustomerID]),
    DIVIDE(SUM(Sales[Amount]), 1),
    DIVIDE(SUM(Sales[Amount]), DISTINCTCOUNT(Sales[CustomerID]))
)

Estos patrones impiden resultados inesperados cuando se usan medidas en contextos que el autor original no anticipó.

Aggregations

Las agregaciones son tablas de resumen que almacenan totales precalculados en un nivel más alto que los datos de detalle. Las consultas alcanzan primero estas tablas, lo que mejora el rendimiento de las tablas de hechos grandes. Cuando una consulta coincide con una agregación, el motor devuelve resultados de la tabla de resumen más pequeña en lugar de examinar millones de filas de detalles.

Agregaciones como decisión de diseño

Decidir cuándo agregar agregaciones y en qué granularidad es una decisión de diseño. La supervisión y el ajuste del rendimiento son problemas operativos independientes, pero se toma la elección estructural durante el diseño del modelo.

Tenga en cuenta las agregaciones cuando:

  • Las tablas de hechos superan millones de filas y las consultas usadas habitualmente resumen los datos en un nivel más específico (como los totales mensuales por región).
  • Los usuarios encuentran lentos los tiempos de respuesta de consulta en visuales de nivel resumen.
  • La mayoría de las interacciones de informe no necesitan detalles a nivel de fila.

Diferencias entre el comportamiento de agregación y el modo de almacenamiento

En el modo de importación, las agregaciones se almacenan como tablas ocultas independientes. El motor enruta automáticamente las consultas coincidentes a la tabla de agregación.

En el modo Direct Lake, las tablas Delta pueden servir como orígenes de agregación. Dado que Direct Lake lee archivos Parquet en columnas, el motor puede controlar volúmenes de datos más grandes sin agregaciones en muchos escenarios. Agregue agregaciones solo cuando los patrones de consulta confirmen la necesidad.

Sugerencia

Obtenga más información sobre las agregaciones definidas por user en Power BI.