Table of Contents

Acción de código DR006 (Legibilidad) Mover la agregación constante a una variable

Descripción

Cuando se usa una función de agregación dentro de un iterador o un predicado escalar, la agregación produce el mismo resultado para cada fila de la iteración y, por lo tanto, podría moverse a una variable de DAX fuera de la iteración.

Ejemplo

Cambiar:

CALCULATE(
    [Total Sales],
    'Date'[Date] = MAX('Date'[Date])
)

A:

VAR _maxDate = MAX('Date'[Date]) 
RETURN
    CALCULATE(
        [Total Sales], 
        'Date'[Date] = _maxDate
    )

¿Por qué Tabular Editor sugiere esto?

Un punto de confusión habitual para los nuevos desarrolladores de DAX es el concepto de contexto de fila y contexto de filtro. Cuando se usa una agregación dentro de un iterador o un predicado escalar, la agregación produce el mismo resultado para cada fila de la iteración. Esto es lo que permite una sintaxis como 'Date'[Date] = MAX('Date'[Date]). Aunque esta sintaxis funciona y es eficiente, puede resultar confusa para los nuevos desarrolladores, especialmente para quienes vienen de SQL, donde este tipo de sintaxis se consideraría un error.

Históricamente, DAX no admitía variables, por lo que la única forma de lograr este tipo de sintaxis era usar la agregación directamente en el iterador. Sin embargo, con la introducción de variables en DAX, ahora es posible mover la agregación a una variable fuera de la iteración. Esto hace que el código sea más legible y fácil de entender para los nuevos desarrolladores. También facilita depurar el código, ya que puedes inspeccionar el valor de la variable fuera de la iteración.

Observaciones

De forma predeterminada, Tabular Editor usa _ como prefijo para las variables. Puedes cambiar el prefijo en Herramientas > Preferencias > Editor de DAX > Acciones de código.

El nombre asignado a la variable es la concatenación de la función de agregación y el nombre de la columna. Si el nombre de la variable no es único dentro del ámbito, se añade un número para que sea único.