Lección 13 de 16 · Nivel 4: Experto
Estado de resultados (P&L) en Power BI con DAX
- ⏱ 10 min de lectura
- ❓ 3 preguntas de repaso
- ✍️ Ejercicio con solución
- 📥 Plantilla descargable
En esta lección
- Construir un estado de resultados (P&L) en Power BI con líneas en el orden contable.
- Combinar las ventas del modelo con una tabla de gastos.
- Escribir una medida con SWITCH que calcula cada línea, subtotal y porcentaje sobre ventas.
- Darle formato financiero profesional a una matriz.
Seguimos con el modelo de Distribuidora Andina de todo el curso.
- andina-power-bi.xlsx · ventas, productos, clientes, vendedores y metas
Bienvenido al Nivel 4: Experto. Ya terminaste un panel de ventas completo y publicado. Ahora vas a construir los informes que más se piden en áreas de finanzas y dirección, a conectar Power BI con bases de datos de verdad, a hacer análisis avanzados de clientes y productos, y a prepararte para la certificación oficial. Empezamos por el informe que todo gerente quiere ver: el estado de resultados, o P&L (profit and loss).
El reto técnico es interesante: un estado de resultados no es una lista de categorías que se suman. Tiene líneas que vienen de tablas distintas (ventas, costos, gastos), subtotales que se restan y un orden fijo. Una matriz normal no sabe hacer eso. Lo resolverás con una técnica muy usada por los profesionales: una tabla de estructura y una medida con SWITCH.
Paso 1: la tabla de gastos
El archivo de práctica tiene las ventas y los costos de los productos, pero no los gastos operativos. Créalos con Inicio › Escribir datos (en una empresa real vendrían del sistema contable o de un Excel de finanzas):
| Fecha | Cuenta | Monto |
|---|---|---|
| 01/01/2025 | Personal | 4200 |
| 01/01/2025 | Alquiler | 1800 |
| 01/01/2025 | Transporte | 1500 |
| 01/01/2025 | Otros gastos | 600 |
Llámala Gastos, revisa que Fecha tenga tipo fecha y Monto tipo número decimal, y relaciona Gastos[Fecha] con Calendario[Date] (lección 8). Así, los gastos responden a los mismos filtros de tiempo que las ventas. Agrega más meses con el mismo formato cuando quieras.
Crea la medida base:
Gastos Operativos = SUM ( Gastos[Monto] )
Paso 2: la tabla de estructura del P&L
Esta tabla define las filas del informe, en orden. Créala también con Escribir datos y llámala Lineas PyG:
| Orden | Linea | Tipo |
|---|---|---|
| 1 | Ventas | Ingreso |
| 2 | Costo de ventas | Costo |
| 3 | Margen bruto | Subtotal |
| 4 | Personal | Gasto |
| 5 | Alquiler | Gasto |
| 6 | Transporte | Gasto |
| 7 | Otros gastos | Gasto |
| 8 | Total gastos operativos | Subtotal |
| 9 | Utilidad operativa | Subtotal |
Dos detalles importantes:
- Selecciona la columna Linea y, en Herramientas de columnas › Ordenar por columna, elige Orden. Si no, la matriz mostraría las líneas en orden alfabético.
- No relaciones esta tabla con ninguna otra. La medida leerá qué línea se está mostrando y decidirá qué calcular.
1. ¿Por qué se ordena la columna Linea por la columna Orden?
Por defecto, los textos se ordenan alfabéticamente: "Alquiler" aparecería antes que "Ventas". Ordenar por otra columna fija el orden que tú definas.
Paso 3: la medida que calcula cada línea
Importe PyG =
VAR Linea = SELECTEDVALUE ( 'Lineas PyG'[Linea] )
VAR Tipo = SELECTEDVALUE ( 'Lineas PyG'[Tipo] )
RETURN
SWITCH (
TRUE (),
Linea = "Ventas", [Ventas Totales],
Linea = "Costo de ventas", - [Costo Total],
Linea = "Margen bruto", [Margen],
Tipo = "Gasto", - CALCULATE ( [Gastos Operativos], Gastos[Cuenta] = Linea ),
Linea = "Total gastos operativos", - [Gastos Operativos],
Linea = "Utilidad operativa", [Margen] - [Gastos Operativos]
)
Cómo funciona:
SELECTEDVALUEdevuelve la línea de la fila que la matriz está calculando (o vacío si hay varias, como en el total).SWITCH ( TRUE (), condición, resultado, … )evalúa las condiciones en orden y devuelve el resultado de la primera que se cumple. Es la forma limpia de escribir muchos SI anidados.- Los costos y gastos se muestran en negativo, como en un estado de resultados formal: la lectura de arriba abajo "suma" sola.
- Las cuatro líneas de gasto comparten una sola regla: filtran la tabla Gastos por la cuenta con el mismo nombre que la línea. Si mañana agregas "Marketing", solo necesitas una fila nueva en cada tabla.
Y el porcentaje sobre ventas, que es como se analiza un P&L (lección 8 del curso de contabilidad):
% sobre Ventas = DIVIDE ( [Importe PyG], [Ventas Totales] )
Como Lineas PyG no está relacionada con Ventas, [Ventas Totales] no cambia de una línea a otra: siempre es el total de ventas del periodo, justo el denominador que necesitas.
2. ¿Qué devuelve SELECTEDVALUE ( 'Lineas PyG'[Linea] ) en la fila de total de la matriz?
SELECTEDVALUE solo devuelve un valor cuando hay exactamente uno en el contexto. En el total no se cumple ninguna condición del SWITCH, así que la medida queda vacía. Por eso conviene desactivar los totales de filas en esta matriz.
Paso 4: la matriz
- Inserta un objeto visual Matriz.
- Filas:
'Lineas PyG'[Linea]. Columnas: año y mes deCalendario. Valores:Importe PyGy% sobre Ventas. - En Formato › Subtotales de fila, desactívalos: los subtotales ya son líneas de tu estructura.
- Filtra el visual a enero de 2025 para comprobar los números.
| Línea | Ene 2025 | % sobre ventas |
|---|---|---|
| Ventas | 29.308,59 | 100,0% |
| Costo de ventas | -20.458,40 | -69,8% |
| Margen bruto | 8.850,19 | 30,2% |
| Personal | -4.200,00 | -14,3% |
| Alquiler | -1.800,00 | -6,1% |
| Transporte | -1.500,00 | -5,1% |
| Otros gastos | -600,00 | -2,0% |
| Total gastos operativos | -8.100,00 | -27,6% |
| Utilidad operativa | 750,19 | 2,6% |
Lectura de negocio: la distribuidora tiene un margen bruto saludable del 30%, pero los gastos se comen casi todo y la utilidad operativa es de apenas un 2,6%. Una pequeña baja en ventas o una subida del transporte la pondría en pérdida. Eso es lo que hace valioso un P&L en Power BI: con un segmentador de zona o de vendedor, verías qué parte del negocio sostiene al resto.
Paso 5: formato financiero
- Formato de número con separador de miles y dos decimales; los negativos, con signo menos o entre paréntesis, según el estándar de tu empresa.
- Subtotales en negrita: con Formato condicional no se puede poner negrita, pero sí un color de fondo suave. Crea una medida
Es Subtotal = IF ( SELECTEDVALUE ( 'Lineas PyG'[Tipo] ) = "Subtotal", 1, 0 )y úsala en Color de fondo › Valor del campo o con reglas. - Color en el %: rojo si la utilidad operativa es negativa, con una regla de formato condicional.
- Agrega una columna vs. mes anterior o vs. presupuesto usando las técnicas de inteligencia de tiempo de la lección 8.
Un P&L en Power BI que no coincide con el estado de resultados oficial pierde la confianza de la gerencia en un día. Antes de publicarlo, compara un mes cerrado con el informe contable y explica cualquier diferencia (por ejemplo, las 3 ventas con el código P99 de la lección 5, cuyo costo queda vacío).
3. Quieres agregar la línea "Marketing" al P&L. ¿Qué cambias?
La regla Tipo = "Gasto" ya cubre cualquier cuenta de gasto cuyo nombre coincida con la línea. Esa es la ventaja de separar la estructura de los cálculos.
Ejercicio práctico: amplía tu P&L
- Agrega gastos de febrero de 2025 (personal 4.200, alquiler 1.800, transporte 1.650, otros 550) y comprueba la matriz con dos meses.
- Agrega una línea "Depreciación" (gasto de 300 al mes) y otra "EBITDA" antes de ella, igual a margen bruto menos los gastos que no son depreciación.
- Crea la medida
Es Subtotaly úsala para colorear el fondo de los subtotales.
Ver solución
Nueva estructura (Orden · Linea · Tipo):
1 Ventas · Ingreso
2 Costo de ventas · Costo
3 Margen bruto · Subtotal
4 Personal · Gasto
5 Alquiler · Gasto
6 Transporte · Gasto
7 Otros gastos · Gasto
8 EBITDA · Subtotal
9 Depreciación · Gasto
10 Total gastos operativos · Subtotal
11 Utilidad operativa · Subtotal
Línea nueva en la medida (antes de "Total gastos operativos"):
Linea = "EBITDA",
[Margen] - CALCULATE ( [Gastos Operativos], Gastos[Cuenta] <> "Depreciación" ),
Es Subtotal = IF ( SELECTEDVALUE ( 'Lineas PyG'[Tipo] ) = "Subtotal", 1, 0 )
Con la depreciación incluida, el EBITDA de enero es 750,19 (8.850,19 − 8.100) y la utilidad operativa baja a 450,19 (8.850,19 − 8.400). Fíjate en que no tocaste las reglas de los gastos: "Depreciación" es una fila más de tipo Gasto, y EBITDA, una línea de tipo Subtotal con su propia condición.
Resumen
- Un P&L combina ventas, costos y gastos de tablas distintas con un orden fijo y subtotales.
- La técnica: una tabla de estructura sin relaciones, ordenada por una columna Orden, y una medida con SWITCH ( TRUE (), … ).
- Costos y gastos en negativo; el % sobre ventas usa el total de ventas como denominador.
- Desactiva los subtotales de la matriz y destaca los tuyos con formato condicional.
- Antes de publicar, cuadra un mes cerrado con el informe contable.
En la próxima lección conectarás Power BI a bases de datos reales: importar o DirectQuery, consultas SQL, la puerta de enlace (gateway) y la actualización programada.
Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.