Cómo calcular el porcentaje del total en DAX: paso a paso
Mostrar cada valor como porcentaje del total es uno de los análisis más solicitados en cualquier informe: cuánto pesa cada categoría, región o producto dentro del total general. En DAX, el secreto está en comparar el valor de la fila actual con un total que ignore los filtros de esa misma fila. Cuando esa comparación está bien hecha, los porcentajes siempre suman 100% — y eso es exactamente lo que vamos a construir aquí, desde cero y de forma reutilizable.
Requisitos previos
- Power BI Desktop instalado, o el Power BI Service con un modelo que puedas editar.
- Una tabla de hechos con valores numéricos — usaremos una tabla
Ventascon la columnaImporte. - Al menos una columna para agrupar los datos, como
Ventas[Categoría]. - Saber crear una medida sencilla con
SUM. No hace falta nada más.
Paso 1: Crear la medida base del total
Antes de pensar en porcentajes, necesitamos una medida que sume los valores. Esta medida reacciona al contexto de filtro: en una matriz por categoría devuelve el total de cada categoría; en una fila de total, devuelve el total de todo.
Total Ventas = SUM ( Ventas[Importe] )
Crea la medida con el botón Nueva medida y arrástrala a una matriz que tenga Ventas[Categoría] en las filas. Deberías ver un valor distinto por categoría.
Paso 2: Calcular el total general con ALL
El porcentaje necesita un denominador que no cambie de fila en fila: el total general. La función ALL elimina los filtros de una columna o tabla, y CALCULATE vuelve a evaluar la medida en ese nuevo contexto sin filtros. El resultado es el total de todas las categorías, incluso cuando estamos dentro de la fila de una sola.
Total General =
CALCULATE (
[Total Ventas],
ALL ( Ventas[Categoría] )
)
Si añades esta medida a la matriz, verás que muestra el mismo número en todas las filas. Parece extraño al principio, pero es justamente el denominador que buscamos: el "todo" con el que se comparará cada categoría.
Paso 3: Dividir para obtener el porcentaje
Ahora combinamos las dos ideas en una sola medida. Usamos DIVIDE en lugar de la barra de división porque DIVIDE devuelve un valor en blanco (en vez de un error) cuando el denominador es cero. Las variables VAR hacen la fórmula más legible y más rápida, porque cada valor se calcula una sola vez.
% del Total =
VAR TotalCategoria = [Total Ventas]
VAR TotalGeneral =
CALCULATE ( [Total Ventas], ALL ( Ventas[Categoría] ) )
RETURN
DIVIDE ( TotalCategoria, TotalGeneral )
Por último, selecciona la medida y dale formato de Porcentaje, con uno o dos decimales. Ahora cada categoría muestra su peso real en el total.
Consejo: pon nombres claros a las medidas. "% del Total" se entiende de inmediato para quien abre el informe meses después.
Paso 4: Respetar los filtros con ALLSELECTED
Hay un detalle que marca toda la diferencia. Como ALL elimina todos los filtros, también ignora las segmentaciones (slicers) que el usuario ha elegido. Si filtras por un año y quieres que 100% represente solo ese año, necesitas ALLSELECTED, que respeta los filtros que vienen de los visuales y las segmentaciones.
% del Total (Seleccionado) =
DIVIDE (
[Total Ventas],
CALCULATE ( [Total Ventas], ALLSELECTED ( Ventas[Categoría] ) )
)
Regla práctica: usa ALL cuando 100% deba ser siempre el total absoluto; usa ALLSELECTED cuando 100% deba reflejar lo que el usuario ha filtrado en el informe.
Verificar el resultado
Coloca Ventas[Categoría] en una matriz con las medidas [Total Ventas] y [% del Total] y busca dos señales de que todo está correcto:
- La columna de porcentajes suma 100% en la fila de total.
- Al añadir una segmentación por año, la versión con
ALLSELECTEDsigue sumando 100%, mientras que la versión conALLpasa a sumar menos de 100%, porque compara con el total de todos los años.
Esta "prueba del 100%" es la forma más rápida de confirmar el resultado y de decidir qué función usar en cada caso.
Conclusión
Con solo tres piezas — una medida base, un denominador con ALL o ALLSELECTED, y DIVIDE para evitar errores — ya puedes calcular cualquier porcentaje del total en DAX y aplicar el mismo patrón a regiones, productos o clientes. El siguiente paso es calcular el porcentaje dentro de una jerarquía, mostrando el peso de cada producto dentro de su categoría. ¿Qué argumento crees que tendrías que cambiar en la función ALL para lograr ese efecto?