¿Cómo se utiliza la función AVERAGEX en DAX?

Calculando Promedios en DAX: Guía Completa

28/10/2023

Valoración: 4.96 (7500 votos)

En el vasto universo del análisis de datos, calcular promedios es una operación fundamental que nos permite entender tendencias, evaluar rendimientos y obtener una visión general de nuestros conjuntos de información. Cuando trabajamos con modelos de datos complejos en herramientas como Power BI, Analysis Services o Power Pivot, el lenguaje DAX (Data Analysis Expressions) se convierte en nuestro aliado indispensable. DAX ofrece funciones potentes y flexibles para realizar este tipo de cálculos, adaptándose a diversas necesidades, desde el promedio simple de una columna hasta promedios condicionales o basados en expresiones complejas fila a fila.

¿Cómo sacar el promedio en Dax?
Si desea encontrar el promedio de una expresión que se evalúa como un conjunto de números, use la función AVERAGEX en su lugar. Los valores no numéricos de la columna se controlan de la siguiente manera: Si la columna contiene texto, no se puede realizar ninguna agregación y las funciones devuelven espacios en blanco.

Comprender cómo y cuándo usar las funciones de promedio en DAX es crucial para construir informes precisos y dinámicos. En este artículo, exploraremos en profundidad las dos funciones principales para promediar: AVERAGE y AVERAGEX. Desglosaremos su sintaxis, sus diferencias clave, los escenarios de uso más adecuados para cada una, y cómo manejan los valores no numéricos o vacíos. Prepárese para desentrañar el poder de los promedios en DAX y llevar sus capacidades de análisis de datos a un nuevo nivel.

¿Qué es DAX y por qué es importante para sus cálculos?

DAX, o Data Analysis Expressions, es un lenguaje de fórmulas utilizado en Power BI, SQL Server Analysis Services (SSAS) y Power Pivot en Excel. Está diseñado para interactuar con modelos de datos tabulares, permitiéndole definir cálculos personalizados (medidas, columnas calculadas y tablas calculadas) que van más allá de lo que se puede lograr con las funcionalidades de agregación básicas. La importancia de DAX radica en su capacidad para transformar datos crudos en información significativa y accionable.

A diferencia de las fórmulas de Excel que operan a nivel de celda, las fórmulas DAX trabajan a nivel de columna y tabla. Esto significa que una fórmula DAX siempre hará referencia a una columna completa o a una tabla. Por ejemplo, en lugar de sumar celdas individuales como A1+B1, en DAX sumaríamos una columna como `SUM(Tabla[Columna])`. Esta aproximación a nivel de columna es lo que le otorga a DAX su eficiencia y escalabilidad para manejar grandes volúmenes de datos.

Los elementos fundamentales de la sintaxis DAX incluyen el signo de igualdad (=) para indicar el inicio de una fórmula, corchetes ([]) para referenciar columnas, y paréntesis para los argumentos de las funciones. Comprender esta sintaxis es el primer paso para dominar cualquier cálculo en DAX, incluidos los promedios. A medida que avancemos, verá cómo estas reglas básicas se aplican a las funciones AVERAGE y AVERAGEX.

La Función AVERAGE en DAX: Un Promedio Simple y Directo

La función AVERAGE en DAX es la forma más sencilla de calcular la media aritmética de una columna. Su propósito es directo: tomar todos los números dentro de una columna específica y devolver su promedio.

Sintaxis:

AVERAGE(<column>)

Parámetros:

  • <column>: La columna que contiene los números para los que desea calcular el promedio.

Valor devuelto:

Un número decimal que representa la media aritmética de los números en la columna especificada.

Observaciones importantes:

  • Esta función está diseñada para operar directamente sobre una columna que ya contiene los valores numéricos que desea promediar.
  • Manejo de valores no numéricos: Si la columna contiene texto, la función no puede realizar la agregación y devuelve un valor en blanco. Si la columna contiene valores lógicos (VERDADERO/FALSO) o celdas vacías, estos valores son ignorados y no se incluyen en el cálculo del promedio.
  • Celdas con valor cero: Las celdas que contienen el valor numérico 0 (cero) sí se incluyen en el cálculo. Se suman al total y se cuentan como parte del número de filas para el divisor. Esta es una diferencia crucial con las celdas vacías.
  • Si no hay filas para agregar (por ejemplo, después de aplicar filtros), la función devuelve un espacio en blanco. Sin embargo, si hay filas, pero ninguna cumple los criterios numéricos o de existencia, la función devuelve 0.
  • Esta función no es compatible con el modo DirectQuery cuando se utiliza en columnas calculadas o reglas de seguridad de nivel de fila (RLS).

Ejemplo práctico:

Supongamos que tenemos una tabla llamada InternetSales y queremos calcular el promedio del monto extendido de las ventas. La fórmula sería tan simple como:

= AVERAGE(InternetSales[ExtendedSalesAmount])

Esta fórmula recorrerá cada fila de la columna ExtendedSalesAmount en la tabla InternetSales, sumará todos los valores numéricos y dividirá el resultado por el conteo de esas filas, dándonos el promedio directo de esas ventas.

¿Cómo sacar el promedio en Dax?
Si desea encontrar el promedio de una expresión que se evalúa como un conjunto de números, use la función AVERAGEX en su lugar. Los valores no numéricos de la columna se controlan de la siguiente manera: Si la columna contiene texto, no se puede realizar ninguna agregación y las funciones devuelven espacios en blanco.

AVERAGEX: Promediando Expresiones Fila a Fila

Mientras que AVERAGE es ideal para promediar una columna existente, AVERAGEX se convierte en una herramienta indispensable cuando necesita promediar los resultados de una expresión que se evalúa para cada fila de una tabla. La 'X' al final de las funciones de agregación en DAX (SUMX, COUNTX, AVERAGEX, etc.) indica que estas funciones son "iteradoras", es decir, que procesan fila por fila.

Sintaxis:

AVERAGEX(<table>, <expression>)

Parámetros:

  • <table>: El nombre de una tabla o una expresión que especifica la tabla sobre la cual se realizará la agregación (la iteración fila por fila).
  • <expression>: Una expresión escalar que se evaluará para cada fila de la tabla especificada en el primer argumento. El resultado de esta expresión para cada fila es lo que se promediará.

Valor devuelto:

Un número decimal que representa la media aritmética de los valores resultantes de la evaluación de la expresión para cada fila.

Observaciones importantes:

  • La función AVERAGEX es fundamental cuando se necesita realizar un cálculo previo por cada fila antes de promediar. Por ejemplo, si desea promediar el margen de beneficio de cada venta (Ventas - Costo), no puede usar AVERAGE directamente sobre una columna de margen si esta no existe; en su lugar, usaría AVERAGEX y calcularía el margen en la expresión.
  • Al igual que AVERAGE, AVERAGEX ignora las celdas no numéricas o nulas en el resultado de la expresión. Las celdas que resultan en 0 sí se incluyen.
  • Si no hay filas para agregar o si la expresión no produce valores válidos para promediar en ninguna fila, la función devuelve un espacio en blanco. Si hay filas, pero la expresión para todas ellas resulta en un valor que no cumple los criterios (por ejemplo, todas son vacías o texto), la función devuelve 0.
  • Esta función tampoco es compatible con el modo DirectQuery cuando se utiliza en columnas calculadas o reglas de seguridad de nivel de fila (RLS).
  • Si su expresión implica múltiples operaciones, es crucial usar paréntesis para controlar el orden de los cálculos, siguiendo las reglas de precedencia de operadores de DAX.

Ejemplo práctico:

Imaginemos que queremos calcular el promedio del costo total de flete e impuestos por cada pedido en la tabla InternetSales. No tenemos una columna que combine flete e impuestos, pero podemos crear una expresión que lo haga para cada fila:

= AVERAGEX(InternetSales, InternetSales[Freight] + InternetSales[TaxAmt])

En este ejemplo, AVERAGEX iterará sobre cada fila de la tabla InternetSales. Para cada fila, sumará el valor de Freight y TaxAmt. Luego, tomará todos esos resultados individuales (uno por cada fila) y calculará su promedio.

Contexto de Fila y Contexto de Filtro: Claves para Entender AVERAGEX

Para comprender plenamente el funcionamiento de AVERAGEX y otras funciones iteradoras, es fundamental entender los conceptos de contexto de fila y contexto de filtro en DAX.

  • Contexto de Fila: Este contexto se establece cuando una fórmula se evalúa fila por fila. Las funciones iteradoras como AVERAGEX crean implícitamente un contexto de fila. Esto significa que, para cada fila que la función está procesando, la expresión que se evalúa en el segundo argumento de AVERAGEX "sabe" qué fila actual está siendo considerada. Es por eso que en el ejemplo de AVERAGEX(InternetSales, InternetSales[Freight] + InternetSales[TaxAmt]), DAX puede acceder a InternetSales[Freight] y InternetSales[TaxAmt] para la fila *actual* en la que se está iterando. Si la fórmula se usa en una columna calculada, el contexto de fila es la fila actual de esa columna.
  • Contexto de Filtro: Este contexto se refiere a los filtros que se aplican a los datos antes de que se realice un cálculo. Por ejemplo, si coloca una medida en una tabla dinámica o un visual de Power BI, los filtros aplicados por las filas, columnas o segmentaciones de ese visual establecen un contexto de filtro. Todas las funciones de agregación (incluida AVERAGE y el resultado final de AVERAGEX) respetan el contexto de filtro existente. Si usted tiene una tabla de ventas por región y calcula el promedio de ventas, ese promedio se calculará para cada región individualmente debido al contexto de filtro que cada región impone.

La combinación de estos dos contextos es lo que hace a DAX tan potente. AVERAGEX opera dentro de un contexto de fila para la evaluación de su expresión interna, y luego el resultado final de la agregación se ve afectado por el contexto de filtro general de la consulta.

El Poder de CALCULATE: Modificando el Contexto

Aunque no es una función de promedio per se, la función CALCULATE es la función más poderosa y fundamental en DAX. Su relevancia aquí es que puede modificar el contexto de filtro en el que se evalúa una expresión, lo que indirectamente puede afectar cómo se calculan los promedios.

CALCULATE le permite imponer nuevos filtros o eliminar filtros existentes sobre una expresión. Por ejemplo, si desea calcular el promedio de ventas de un producto específico, independientemente de cualquier otro filtro aplicado en el informe, usaría CALCULATE para anular esos filtros y aplicar solo el filtro del producto deseado. Comprender CALCULATE es un paso esencial para realizar cálculos de promedios más avanzados y condicionales en DAX.

Consideraciones Clave al Calcular Promedios en DAX

Al trabajar con promedios en DAX, hay varios aspectos cruciales que debe tener en cuenta para asegurar la precisión de sus análisis:

  • Manejo de valores no numéricos: Tanto AVERAGE como AVERAGEX son estrictas con los tipos de datos. Si una columna o el resultado de una expresión contienen texto, la función devolverá un blanco. Asegúrese de que sus datos estén limpios y sean numéricos antes de intentar promediarlos. Si necesita promediar datos que pueden contener valores no numéricos que desea tratar de alguna manera (por ejemplo, convertirlos a 0), considere usar funciones como VALUE o IFERROR dentro de su expresión AVERAGEX, o explorar AVERAGEA, que, similar a su contraparte en Excel, puede tratar valores no numéricos como cero.
  • Diferencia entre celda vacía y cero: Este es un punto crítico. Una celda vacía (BLANK en DAX) es ignorada por AVERAGE y AVERAGEX; no se suma al numerador ni se cuenta en el denominador. Una celda con el valor 0 (cero) sí se incluye en ambos. Entender esta distinción es vital para evitar errores en sus promedios, especialmente si sus datos tienen muchos valores faltantes o nulos.
  • Comportamiento con filas sin datos: Si una función de promedio no encuentra filas para agregar después de aplicar todos los filtros, devolverá un BLANK. Sin embargo, si encuentra filas pero la expresión o columna evaluada para esas filas resulta consistentemente en BLANKs o valores no numéricos (y no hay ningún 0), la función también puede devolver un BLANK o un 0 dependiendo del escenario específico. Es importante probar sus medidas con diferentes contextos de filtro para entender su comportamiento.
  • Limitaciones de DirectQuery: Como se mencionó, AVERAGE y AVERAGEX no son compatibles en modo DirectQuery para columnas calculadas o reglas de seguridad de nivel de fila (RLS). Si trabaja en este modo y necesita cálculos de promedio complejos, a menudo tendrá que realizarlos en medidas o en la fuente de datos original.

Tabla Comparativa: AVERAGE vs. AVERAGEX

CaracterísticaAVERAGEAVERAGEX
Propósito principalCalcula el promedio de una columna existente.Calcula el promedio de una expresión evaluada fila por fila sobre una tabla.
ArgumentosUna única columna.Una tabla y una expresión.
Iteración (fila a fila)No itera; opera en la columna completa.Sí, itera sobre cada fila de la tabla especificada.
Uso comúnPromedio simple de valores directos.Promedio de cálculos o transformaciones por fila (ej: promedio de márgenes, promedio de costos combinados).
Contexto de filaNo crea un contexto de fila.Crea un contexto de fila implícito para evaluar la expresión.
FlexibilidadLimitada a columnas existentes.Muy alta, permite cálculos complejos antes del promedio.
Manejo de BLANKsIgnora celdas vacías en la columna.Ignora resultados BLANK de la expresión.
Manejo de 0sIncluye celdas con valor 0.Incluye resultados de expresión con valor 0.

Preguntas Frecuentes (FAQ)

P: ¿Cuándo debo usar AVERAGE en lugar de AVERAGEX?
R: Use AVERAGE cuando la columna que desea promediar ya contiene los valores exactos que necesita. Es la opción más simple y eficiente para un promedio directo de una sola columna existente.

¿Qué hace la función calculate en Dax?
La función CALCULATE evalúa una expresión, como un argumento, en un contexto que es modificado por los filtros especificados. Los paréntesis () alrededor de uno o más argumentos. Una medida [Ventas] en la misma tabla que una expresión. La medida Ventas tiene la fórmula: =SUMA(FactSales[SalesAmount]).

P: ¿Cuándo es necesario usar AVERAGEX?
R: AVERAGEX es indispensable cuando necesita realizar un cálculo o transformación para cada fila de una tabla antes de promediar los resultados. Por ejemplo, si quiere el promedio de la 'Cantidad * Precio' por cada transacción, o el promedio del 'Costo + Impuesto' por cada artículo.

P: ¿Qué sucede si mi columna tiene valores de texto al usar AVERAGE o AVERAGEX?
R: Ambas funciones devolverán un valor en blanco (BLANK) si la columna o el resultado de la expresión para todas las filas contienen texto. Solo operan sobre valores numéricos. Es crucial limpiar o transformar sus datos si contienen texto que no debe ser promediado.

P: ¿Cuál es la diferencia entre una celda vacía y una celda con cero en DAX para los promedios?
R: Una celda vacía (BLANK) es ignorada por las funciones AVERAGE y AVERAGEX, lo que significa que no se incluye en la suma ni en el conteo de elementos para el promedio. Una celda con el valor numérico 0 (cero) sí se incluye en el cálculo, sumándose al numerador y contando para el denominador. Esta distinción es vital para la precisión de sus promedios.

P: ¿Puedo usar AVERAGEX con filtros?
R: Sí, absolutamente. AVERAGEX, como todas las funciones de agregación en DAX, respetará el contexto de filtro existente. Si su medida AVERAGEX se coloca en una tabla visual filtrada por 'Región', el promedio se calculará solo para los datos de esa región. Además, puede combinar AVERAGEX con CALCULATE para modificar explícitamente el contexto de filtro y obtener promedios condicionales.

P: ¿Existe una función para promediar que incluya BLANKs como ceros?
R: Sí, la función AVERAGEA se comporta de manera similar a la función AVERAGEA de Excel. Puede tomar una columna como argumento y calcular una media en una columna que contenga valores vacíos, tratándolos como ceros. Sin embargo, para un control más explícito, a menudo es preferible usar AVERAGEX con una expresión condicional (como IF(ISBLANK([Columna]), 0, [Columna])) para manejar los BLANKs como ceros.

Conclusión

Las funciones AVERAGE y AVERAGEX son pilares fundamentales para cualquier analista de datos que trabaje con DAX. Mientras que AVERAGE ofrece una solución rápida y sencilla para promediar columnas existentes, AVERAGEX desata un nivel superior de flexibilidad, permitiéndonos promediar expresiones complejas evaluadas fila por fila. Dominar la distinción entre estas dos funciones, comprender cómo manejan los valores no numéricos y vacíos, y apreciar la importancia del contexto de fila y de filtro, le permitirá construir modelos de datos más robustos y generar insights más precisos.

Recuerde siempre que la calidad de sus promedios depende en gran medida de la limpieza de sus datos y de una comprensión clara de lo que cada función está calculando. Al aplicar los conocimientos adquiridos en este artículo, estará bien equipado para abordar una amplia gama de desafíos de promediado en sus proyectos de análisis de datos con DAX.

Si quieres conocer otros artículos parecidos a Calculando Promedios en DAX: Guía Completa puedes visitar la categoría Cálculos.

Subir