En DAX, AVERAGE ignora los blancos pero cuenta los ceros. Para excluir también los ceros, filtra dentro de la medida: CALCULATE(AVERAGE(T[Valor]), T[Valor] <> 0). Para lo contrario, contar los blancos como cero, suma cero a cada fila: AVERAGEX(T, T[Valor] + 0). AVERAGEA es otra función: cuenta TRUE como 1 y FALSE y el texto como 0, y casi nunca es lo que buscas para cifras numéricas.
Qué cuenta cada opción
| Medida | Blancos | Ceros |
|---|---|---|
AVERAGE(T[Valor]) | Ignorados | Contados |
CALCULATE(AVERAGE(T[Valor]), T[Valor] <> 0) | Ignorados | Ignorados |
AVERAGEX(T, T[Valor] + 0) | Contados como 0 | Contados |
DIVIDE(SUM(T[Valor]), COUNTROWS(T)) | Contados como 0 | Contados |
Paso a paso
- Revisa en la vista de tabla qué significa un blanco en tu columna: dato que no llegó o valor cero.
- Revisa también qué significa un cero: medición real o relleno del sistema de origen.
- Elige la medida de la tabla anterior según esa decisión.
- Pon las dos versiones (con y sin ceros) lado a lado en una tabla para ver la diferencia antes de publicar.
Tabla de ejemplo Produccion (piezas por máquina en un turno; la máquina M4 no reportó):
| Máquina | Piezas |
|---|---|
| M1 | 120 |
| M2 | 0 |
| M3 | 135 |
| M4 | (blanco) |
| M5 | 110 |
| M6 | 0 |
Ejemplos resueltos
Ejemplo 1: las tres respuestas posibles
Promedio piezas = AVERAGE ( Produccion[Piezas] )
Promedio sin ceros =
CALCULATE ( AVERAGE ( Produccion[Piezas] ), Produccion[Piezas] <> 0 )
Promedio con blancos en cero = AVERAGEX ( Produccion, Produccion[Piezas] + 0 )
| Medida | Cálculo | Resultado |
|---|---|---|
| Promedio piezas | 365 / 5 | 73 |
| Promedio sin ceros | 365 / 3 | 121.67 |
| Promedio con blancos en cero | 365 / 6 | 60.83 |
Si M2 y M6 estuvieron paradas por mantenimiento programado, el promedio sin ceros (121.67) describe mejor lo que produce una máquina en operación. Si estuvieron paradas por fallas, el 73 es el número honesto. Y si M4 sí trabajó pero no reportó, ningún cálculo la representa bien: lo correcto es reportar cuántas máquinas entraron al promedio.
Ejemplo 2: excluir ceros con AVERAGEX
Otra forma de quitar ceros, útil cuando el valor sale de una expresión y no de una columna:
Ticket promedio sin cortesías =
AVERAGEX (
Ventas,
IF ( Ventas[Cantidad] * Ventas[Precio] = 0, BLANK (), Ventas[Cantidad] * Ventas[Precio] )
)
Convertir el cero en BLANK() hace que AVERAGEX lo ignore. En DAX, un blanco comparado con 0 da igual (BLANK() = 0 es verdadero), así que la condición <> 0 del ejemplo 1 también deja fuera los blancos. No pasa nada en este caso, porque AVERAGE ya los ignoraba, pero tenlo presente cuando filtres en otras medidas.
Ejemplo 3: AVERAGEA en una columna de verdadero o falso
En Power BI cada columna tiene un solo tipo de dato, así que AVERAGEA sirve sobre todo para columnas lógicas. Con una columna Pedidos[A tiempo] de tipo verdadero/falso:
Porcentaje a tiempo = AVERAGEA ( Pedidos[A tiempo] )
Porcentaje a tiempo (explícito) =
DIVIDE (
COUNTROWS ( FILTER ( Pedidos, Pedidos[A tiempo] = TRUE () ) ),
COUNTROWS ( Pedidos )
)
Con 8 pedidos y 6 entregados a tiempo, ambas dan 0.75; con formato de porcentaje, 75 %. AVERAGEA cuenta cada TRUE como 1 y cada FALSE como 0. La versión explícita es más larga, pero cualquiera que lea el modelo entiende qué calcula.
Las reglas de AVERAGEA
Según la documentación de Microsoft: TRUE cuenta como 1; FALSE, como 0; el texto que no es número, como 0; el texto vacío (""), como 0. AVERAGE, en cambio, ignora los valores lógicos y, si la columna es de texto, devuelve blanco. Las dos devuelven blanco si no hay filas que promediar. AVERAGEA existe sobre todo por compatibilidad con la función PROMEDIOA de Excel.
Errores comunes
- Suponer que
AVERAGEignora los ceros. No lo hace. Es la misma regla de PROMEDIO en Excel, que también se resuelve con un filtro"<>0"; ver PROMEDIO.SI en Excel. - Rellenar blancos con 0 en Power Query sin pensarlo. Desde ese momento,
AVERAGElos cuenta y ya no hay forma de distinguir «sin dato» de «cero». - Usar
AVERAGEApara «incluir los blancos». No es su propósito. Para contar blancos como cero usaAVERAGEXcon+ 0. - Filtrar con
FILTER(Produccion, ...)sobre toda la tabla. Funciona, pero en tablas grandes es más lento que el filtro de columnaProduccion[Piezas] <> 0dentro deCALCULATE.
Si tus datos vienen de SQL, la lógica equivalente con NULL está en AVG y NULL en SQL.
Fuentes
- Microsoft Learn, AVERAGE (DAX). Celdas vacías y lógicas ignoradas, ceros incluidos, texto devuelve blanco. Consultado el 11 de noviembre de 2026.
- Microsoft Learn, AVERAGEA (DAX). Reglas para TRUE, FALSE, texto y texto vacío. Consultado el 11 de noviembre de 2026.