En Power BI, un promedio por categoría no necesita una fórmula especial: pones la categoría en las filas de una tabla o en el eje de un gráfico y la medida AVERAGE(Ventas[Importe]) se calcula sola para cada una. Lo que sí requiere DAX es responder preguntas como «¿cuánto vende en promedio una categoría?» (AVERAGEX(VALUES(Ventas[Categoría]), [Ventas])) o «¿este producto está por encima del promedio de su categoría?», que necesita quitar el filtro de producto con REMOVEFILTERS.
Tres preguntas distintas
| Pregunta | Medida | Resultado total |
|---|---|---|
| ¿Cuál es el importe promedio por renglón? | AVERAGE(Ventas[Importe]) | 116.75 |
| ¿Cuánto vende en promedio cada categoría? | AVERAGEX(VALUES(Ventas[Categoría]), [Ventas]) | 467 |
| ¿Cuánto vende en promedio cada producto? | AVERAGEX(VALUES(Ventas[Producto]), [Ventas]) | 186.8 |
Las tres son «promedios por categoría» en lenguaje cotidiano, y dan números muy distintos. Los datos son los de la tabla Ventas de AVERAGE y AVERAGEX, con Ventas = SUM(Ventas[Importe]).
Paso a paso
- Escribe en una frase qué se promedia y entre qué: «el total de cada producto, entre los productos de la categoría».
- Lo que va después de «cada» es la tabla de
AVERAGEX:VALUES(Ventas[Producto]). - Lo que se promedia es la expresión: casi siempre una medida de total como
[Ventas]. - Si la comparación debe ignorar un filtro del visual, quítalo con
REMOVEFILTERSdentro deCALCULATE. - En un modelo con dimensiones, usa las columnas de la dimensión (
Productos[Categoría]), no las de la tabla de hechos.
Ejemplos resueltos
Ejemplo 1: promedio de renglón frente a promedio de totales
En una tabla con Categoría en filas:
Ticket promedio = AVERAGE ( Ventas[Importe] )
Venta promedio por producto = AVERAGEX ( VALUES ( Ventas[Producto] ), [Ventas] )
| Categoría | Ventas | Ticket promedio | Venta promedio por producto |
|---|---|---|---|
| Abarrotes | 595 | 148.75 | 297.50 |
| Limpieza | 339 | 84.75 | 113.00 |
| Total | 934 | 116.75 | 186.80 |
Abarrotes tiene 4 renglones y 2 productos (café molido con 285 y galletas con 310): su ticket promedio es 595 / 4 y su venta promedio por producto, 595 / 2. Limpieza tiene 3 productos: 339 / 3 = 113. En el total, VALUES(Ventas[Producto]) devuelve los 5 productos: 934 / 5 = 186.8.
Ejemplo 2: cada producto contra el promedio de su categoría
Con Producto en las filas del visual, la medida debe quitar el filtro de producto pero conservar la categoría del producto actual:
Promedio de su categoría =
CALCULATE (
AVERAGEX ( VALUES ( Ventas[Producto] ), [Ventas] ),
REMOVEFILTERS ( Ventas[Producto] ),
VALUES ( Ventas[Categoría] )
)
Diferencia vs categoría = [Ventas] - [Promedio de su categoría]
| Producto | Ventas | Promedio de su categoría | Diferencia |
|---|---|---|---|
| Café molido | 285 | 297.5 | −12.5 |
| Galletas | 310 | 297.5 | 12.5 |
| Cloro | 75 | 113 | −38 |
| Detergente | 204 | 113 | 91 |
| Jabón | 60 | 113 | −53 |
VALUES(Ventas[Categoría]) se evalúa antes de quitar los filtros, en el contexto de la fila: para «Cloro» devuelve «Limpieza», y ese filtro se conserva. Por eso la medida funciona aunque Categoría no esté en el visual. Detergente es el único producto de Limpieza por encima del promedio.
Ejemplo 3: categorías que superan el promedio de todas
Para resaltar las categorías que venden más que la categoría promedio (467):
Promedio entre categorías =
CALCULATE (
AVERAGEX ( VALUES ( Ventas[Categoría] ), [Ventas] ),
REMOVEFILTERS ( Ventas[Categoría] )
)
Sobre el promedio = IF ( [Ventas] > [Promedio entre categorías], 1, 0 )
Abarrotes (595) da 1 y Limpieza (339) da 0. Usa Sobre el promedio en el formato condicional del visual, con la opción de valor de campo, para colorear las filas. Si el informe tiene un filtro de fecha, se respeta, porque solo se quitó el filtro de categoría.
Errores comunes
ALL(Ventas)en lugar deREMOVEFILTERS(Ventas[Producto]). Quitar todos los filtros de la tabla también elimina los de fecha o región que el usuario eligió en una segmentación.ALLEXCEPT(Ventas, Ventas[Categoría])cuando la categoría no está en el visual. Conserva el filtro de categoría solo si existe; conProductosolo en filas, no hay filtro de categoría que conservar y obtienes el promedio de todos los productos. El patrón conVALUESdel ejemplo 2 no tiene ese problema.- Promediar promedios en el total. El total de una columna de promedios no es el promedio de las filas visibles; DAX recalcula la medida con todo el contexto del total.
- Columnas de la tabla de hechos en un modelo estrella. Si filtras por
Productos[Categoría], usa esa misma columna enVALUESyREMOVEFILTERS.
En SQL, la comparación con el promedio del grupo se hace con AVG() OVER (PARTITION BY ...); ver HAVING y filas sobre el promedio.
Fuentes
- Microsoft Learn, REMOVEFILTERS (DAX). Quitar filtros de columnas dentro de CALCULATE. Consultado el 11 de noviembre de 2026.
- Microsoft Learn, VALUES (DAX). Valores distintos de una columna en el contexto actual. Consultado el 11 de noviembre de 2026.