Construir la página ejecutiva —5 números, 1 pregunta, 0 ruido—, saber decir si un ratio empeoró por el numerador o por el denominador, y dejarla publicada y documentada para que otro pueda usarla sin ti.
El notebook de esta clase: https://gaa1104.vercel.app/notebooks/clase-20.ipynb
Ing. en Administración · mención Finanzas · Prof. Tomás Fernández
La página del CFO: primero el titular, después el contexto temporal, después el detalle. Ese orden es el diseño.
La forma la decide el trabajo que hace el dato —magnitud, identidad, polaridad, cambio en el tiempo, distribución—, no el gusto. Regla del curso: un solo eje.
Lo que quedó planteado ayer (se proyecta la pregunta, NO la respuesta):
«Utilities pierde 4 puntos de ROE entre 2021 y 2023 (9,2 % → 5,3 %) con el margen EBITDA prácticamente intacto (34,7 % → 34,5 %). ¿Empeoró el negocio?»
Dos preguntas, en silencio, 60 segundos (espaciado 1–3–7–21):
La respuesta se construye entre todos, corriendo la consulta, no contándola. Viene resuelta: se corre y se leen los cuatro números.
-- 👀 SE MIRA · EBITDA, gastos financieros, utilidad y deuda de Utilities SELECT anio, SUM(ebitda_mm_clp) AS ebitda_12m, SUM(gastos_financieros_mm_clp) AS gastos_financieros, SUM(utilidad_neta_mm_clp) AS utilidad_neta, SUM(deuda_financiera_mm_clp) FILTER (WHERE q = 'Q4') AS deuda_cierre FROM eeff WHERE sector_n = 'UTILITIES' GROUP BY 1 ORDER BY 1; -- 2021 | 1.073.517 | 131.322 | 402.158 | 3.042.929 -- 2023 | 1.267.692 | 418.434 | 282.699 | 3.773.745
Se leen en voz alta, uno por uno, y la sala saca la conclusión antes que el profesor:
El negocio no empeoró: se encareció la deuda.
«Si ustedes le llevan al directorio "Utilities cayó 4 puntos de ROE", lo primero que va a pasar es que alguien va a pedir un plan de eficiencia operacional. Y van a recortar donde no está el problema. Separar operación de financiamiento es lo que convierte un tablero en un diagnóstico.»
La regla, escrita en la pizarra y usada el resto de la clase:
Todo ratio que baja tiene dos culpables posibles. Antes de recomendar, di cuál de los dos fue.
Un número solo no decide nada. El triplete que se copia y se exige:
valor · comparación (vs período anterior, vs sector, vs covenant) · dirección.
Primero se deja el año armado en una vista, para no repetir el mismo GROUP BY cinco veces:
Las dos consultas vienen resueltas: la primera arma la vista del año, la segunda saca los cinco números.
-- 👀 SE MIRA · el año armado una sola vez, para no repetir cinco GROUP BY CREATE OR REPLACE VIEW anual_panel AS SELECT rut_n, anio, SUM(ingresos_mm_clp) AS ing, SUM(ebitda_mm_clp) AS ebitda, SUM(utilidad_neta_mm_clp) AS util, AVG(patrimonio_mm_clp) AS patrim, SUM(deuda_financiera_mm_clp) FILTER (WHERE q = 'Q4') AS deuda, SUM(activos_corrientes_mm_clp) AS act_corr, SUM(pasivos_corrientes_mm_clp) AS pas_corr FROM eeff WHERE rut_n <> '76660573-7' -- la que reporta en USD GROUP BY 1, 2 HAVING COUNT(*) = 4; -- sólo años completos
Y encima, los cinco números:
-- 👀 SE MIRA · los cinco números del tablero SELECT anio, ROUND(SUM(ing) / 1e6, 2) AS ingresos_bill, ROUND(100.0 * SUM(ebitda) / SUM(ing), 1) AS margen_pct, ROUND(100.0 * SUM(util) / SUM(patrim), 1) AS roe_pct, ROUND(SUM(deuda) / SUM(ebitda), 2) AS deuda_ebitda, ROUND(SUM(act_corr) / SUM(pas_corr), 2) AS liquidez FROM anual_panel GROUP BY 1 ORDER BY 1;
| Año | Ingresos bill. | Margen | ROE | Deuda/EBITDA | Liquidez |
|---|---|---|---|---|---|
| 2019 | 16,60 | 25,0 % | 9,6 % | 2,30 | 1,24 |
| 2020 | 16,49 | 23,5 % | 8,8 % | 2,57 | 1,26 |
| 2021 | 19,74 | 24,0 % | 9,5 % | 2,39 | 1,22 |
| 2022 | 23,03 | 23,3 % | 6,8 % | 2,49 | 1,24 |
| 2023 | 23,28 | 23,7 % | 6,4 % | 2,48 | 1,22 |
| 2024 | 24,21 | 24,0 % | 7,3 % | 2,46 | 1,23 |
| 2025 | 26,02 | 24,2 % | 8,1 % | 2,44 | 1,24 |
Se leen en voz alta sólo cuatro: 2019, 2021, 2023 y 2025. Con esos basta para ver la forma —ingresos que suben todo el tiempo, margen que casi no se mueve, ROE que se hunde en 2023 y se recupera a medias.
El HAVING COUNT(*) = 4 no es adorno, y se dice: sin él, las tres empresas con trimestres faltantes contaminan el año. Un año incompleto en un total anual es una mentira aritméticamente correcta.
Y así se ve la página, hecha con las manos antes de abrir la herramienta. La tabla de arriba ya trae los cinco números; lo que falta es el orden en que se miran, y ese orden es el diseño: primero el titular, después de dónde viene, después quién lo explica. Tres piezas, cada una con un solo eje y todas con la misma unidad —por ciento— para que el ojo pueda saltar de una a otra sin recalibrar.
# 👀 SE MIRA · la página del CFO ya dibujada: se corre y se mira el ORDEN import matplotlib.pyplot as plt GRIS, TINTA, ALERTA = "#b8b8b8", "#102a38", "#8c2b20" roe_anio = bd.sql("""SELECT anio, ROUND(100.0 * SUM(util) / SUM(patrim), 1) AS roe FROM anual_panel GROUP BY 1 ORDER BY 1""") roe_sector = bd.sql("""SELECT s.sector_n AS sector, ROUND(100.0 * SUM(a.util) / SUM(a.patrim), 1) AS roe FROM anual_panel a JOIN (SELECT DISTINCT rut_n, sector_n FROM eeff) s USING (rut_n) WHERE a.anio = 2025 GROUP BY 1 ORDER BY roe""") hoy = roe_anio[roe_anio.anio == 2025].roe.iloc[0] antes = roe_anio[roe_anio.anio == 2019].roe.iloc[0] peor = roe_anio.loc[roe_anio.roe.idxmin()] lider = roe_sector.iloc[-1] fig = plt.figure(figsize=(12.5, 5)) rej = fig.add_gridspec(1, 3, width_ratios=[1, 1.45, 1.45], wspace=0.30, left=0.035, right=0.975, top=0.76, bottom=0.13) # 1 · el titular: un número, y su comparación t = fig.add_subplot(rej[0]); t.axis("off") t.text(0, 0.60, f"{hoy:.1f} %".replace(".", ","), fontsize=52, color=ALERTA, ha="left", va="center") t.text(0, 0.36, "ROE del panel · 2025", fontsize=13, color=TINTA, ha="left") t.text(0, 0.26, f"{antes - hoy:.1f} pp bajo 2019".replace(".", ","), fontsize=11, color="#767676", ha="left") # 2 · la tendencia: de dónde viene d = fig.add_subplot(rej[1]) d.plot(roe_anio.anio, roe_anio.roe, color=ALERTA, linewidth=2.4, marker="o") d.annotate(f"{peor.roe:.1f} %".replace(".", ","), xy=(peor.anio, peor.roe), xytext=(-10, -20), textcoords="offset points", fontsize=11, color=TINTA) d.set_title("de dónde viene: el hoyo de 2023", fontsize=12, color=TINTA, loc="left") d.set_xlabel("ROE anual del panel, en %", fontsize=9) d.set_xticks(list(roe_anio.anio)); d.tick_params(labelsize=9) d.set_ylim(0, 12); d.set_yticks([0, 3, 6, 9, 12]) # 3 · el ranking: quién lo sostiene r = fig.add_subplot(rej[2]) r.barh(roe_sector.sector, roe_sector.roe, height=0.60, color=[ALERTA if s == lider.sector else GRIS for s in roe_sector.sector]) r.axvline(hoy, color=TINTA, linestyle="--", linewidth=1) r.text(hoy + 0.25, len(roe_sector) - 0.35, f"{hoy:.1f} % del panel".replace(".", ","), fontsize=9, color=TINTA) for i, v in enumerate(roe_sector.roe): r.text(19.6, i, f"{v:.1f}".replace(".", ","), va="center", ha="right", fontsize=9.5, color=TINTA) r.set_title("quién lo sostiene: la Banca, sola", fontsize=12, color=TINTA, loc="left") r.set_xlabel("ROE 2025 por sector, en %", fontsize=9) r.set_xlim(0, 20); r.set_xticks([0, 5, 10, 15, 20]) r.tick_params(labelsize=9, length=0) r.set_ylim(-0.6, len(roe_sector) - 0.15) for eje, lados in ((d, ("top", "right")), (r, ("top", "right", "left"))): for lado in lados: eje.spines[lado].set_visible(False) fig.suptitle("La página del CFO: el dueño recuperó la mitad de lo que perdió en 2023,\n" "y lo que queda arriba lo sostiene un solo sector", fontsize=15, color=TINTA, x=0.035, y=0.98, ha="left") plt.show()
Qué se mira en el resultado, y en este orden exacto:
El quinto número no está en el panel, y hay que decirlo. El CFO de una empresa operativa —el de Austral, el de la carrera de ustedes— también mira cuánto se demora en cobrar. Los números ya están medidos desde la clase 13 y van a la pizarra sin volver a correr la consulta: DSO Público 91,6 · Construcción 72,5 · Minería 60,6 · Industrial 56,2 · Retail 55,7.
El DSO es el ratio del capital de trabajo y el que más rápido se convierte en decisión: 91,6 días contra 55,7 son 36 días de caja financiando al sector Público. El panel de EEFF no lo trae, porque el panel es la mirada del inversionista. El libro de ventas sí. Un tablero de CFO decente mezcla las dos fuentes y declara cuál viene de dónde.
El contexto macro va un clic detrás, no en la página 1. datos/tc_mensual.csv trae el dólar observado mensual (promedio anual: 700,3 en 2019 · 751,0 en 2021 · 826,4 en 2023 · 933,7 en 2025) y la tasa implícita de la deuda del panel va de 4,32 % en 2021 a 11,46 % en 2023 (gastos financieros del año ÷ deuda promedio de los cuatro trimestres — no es la medida deuda cierre del covenant, que usa Q4; con Q4 dan 4,31 % y 11,34 %). Eso explica el mundo, pero la página ejecutiva no se pelea con el mundo: página 2 o drill-through.
Entregas: en el cuaderno, tus cinco KPI y tu visual dominante con la restricción 5-1-0 y el título-mensaje escrito. 3 minutos acá; la página construida y exportada a PDF se entrega antes de mañana, mié 02-12, 20:30.
Y la restricción de la página, proyectada, dura, y copiada en el cuaderno (3 min, cada uno escribe la suya):
5 tarjetas KPI máximo · 1 visual dominante · 0 tablas de detalle · título-mensaje.
Estructura sugerida —se puede cambiar, pero se justifica—: 1 · margen EBITDA vs 2019 · 2 · ROE vs el año anterior · 3 · deuda/EBITDA con el umbral de 4× dibujado · 4 · liquidez corriente vs el sector · 5 · empresas en alerta, con el año de la última alerta nueva. Dominante: la serie 2019–2025 del indicador que sostiene tu mensaje, con las empresas deterioradas destacadas y las otras en gris.
Qué es un covenant, en 60 segundos: una cláusula del contrato de crédito. El banco presta con la condición de que la empresa mantenga, por ejemplo, deuda financiera / EBITDA por debajo de 4 veces. Si se cruza, el banco puede exigir el pago anticipado. No es un indicador de gestión: es un gatillo contractual. Por eso una alerta falsa cuesta reuniones, y una alerta perdida cuesta la empresa.
Se corre la consulta completa, sin anticipar el resultado:
-- 👀 SE MIRA · qué empresas cruzan 4× de deuda/EBITDA, y en qué años WITH anual AS ( SELECT rut_n, sector_n, anio, SUM(deuda_financiera_mm_clp) FILTER (WHERE q = 'Q4') AS deuda_cierre, SUM(ebitda_mm_clp) AS ebitda_12m FROM eeff GROUP BY 1, 2, 3 HAVING COUNT(*) = 4) SELECT a.anio, any_value(e.empresa_n) AS empresa, a.sector_n, ROUND(a.deuda_cierre / a.ebitda_12m, 2) AS deuda_ebitda FROM anual a JOIN eeff e USING (rut_n) WHERE a.deuda_cierre / a.ebitda_12m > 4.0 GROUP BY a.anio, a.rut_n, a.sector_n, a.deuda_cierre, a.ebitda_12m ORDER BY a.anio, deuda_ebitda DESC;
Salen 12 alertas en 6 empresas, en dos láminas seguidas:
| Año | Empresa | Sector | Deuda/EBITDA |
|---|---|---|---|
| 2020 | Clínica Santa Elena S.A. | Salud | 5,01 |
| 2020 | Clínica Los Robles S.A.. | Salud | 4,30 |
| 2020 | Clínica Puerto Varas SpA | Salud | 4,15 |
| 2020 | Centro Médico Cordillera SpA | Salud | 4,11 |
| 2023 | Papelera Itata S.A. | Forestal | 4,70 |
| 2023 | Clínica Los Robles S.A.. | Salud | 4,64 |
| Año | Empresa | Sector | Deuda/EBITDA |
|---|---|---|---|
| 2024 | Papelera Itata S.A. | Forestal | 6,07 |
| 2024 | Clínica Los Robles S.A.. | Salud | 5,53 |
| 2024 | Multitienda Aconcagua S.A. | Retail | 4,55 |
| 2025 | Papelera Itata S.A. | Forestal | 7,61 |
| 2025 | Clínica Los Robles S.A.. | Salud | 6,44 |
| 2025 | Multitienda Aconcagua S.A. | Retail | 5,41 |
Entregas: tu lista de alertas descartadas, escrita, con el porqué al lado de cada una. En pares, 3 minutos, y antes de cualquier explicación.
Antes de que yo diga nada: en pares, 3 minutos. Consigna proyectada, y el docente se calla:
De estas 12 alertas, ¿cuáles descartarías y por qué? Escríbelo. No hace falta más dato que el que está en la tabla: año, empresa, sector y el número.
Grupo 1 — las cuatro de 2020 son falsas. Se demuestra, no se afirma:
-- 👀 SE MIRA · se cayó el denominador: el EBITDA de Salud, no la deuda SELECT anio, SUM(ebitda_mm_clp) AS ebitda_12m, SUM(deuda_financiera_mm_clp) FILTER (WHERE q = 'Q4') AS deuda_cierre FROM eeff WHERE sector_n = 'SALUD' AND anio IN (2019, 2020, 2021) GROUP BY 1 ORDER BY 1; -- 2019 | 228.436 | 576.929 -- 2020 | 144.302 | 583.882 -- 2021 | 271.371 | 738.684
El EBITDA del sector Salud cae 36,8 % en 2020 (las clínicas suspendieron cirugías electivas) y la deuda sube 1,2 %. Nadie se endeudó. Se cayó el denominador. Un semáforo automático habría mandado cuatro cartas al directorio y cuatro llamadas del banco, por nada. En 2021 las cuatro vuelven solas por debajo de 4×.
Grupo 2 — las de 2023 en adelante son verdaderas, y se prueban con dos cosas: cuatro indicadores deteriorados a la vez y persistencia.
| Papelera Itata S.A. | 2021 | 2023 | 2025 |
|---|---|---|---|
| Deuda/EBITDA | 2,99 | 4,70 | 7,61 |
| Margen EBITDA % | 18,8 | 14,1 | 11,1 |
| ROE % | 3,9 | −2,1 | −4,0 |
| Liquidez | 1,55 | 1,28 | 1,08 |
Y la contraprueba, que es lo que hace utilizable la alerta: el máximo deuda/EBITDA entre las otras 37 empresas nunca cruza 4× salvo en el año del shock (3,51 · 5,01 · 3,52 · 3,66 · 3,80 · 3,58 · 3,56 de 2019 a 2025).
La regla de diseño que sale de aquí, y va a la pauta de la formativa 3:
Una alerta en una página ejecutiva muestra siempre su denominador. La tarjeta no dice «deuda/EBITDA 4,70 🔴»: dice «4,70× — deuda +10 %, EBITDA −13 %, segundo año consecutivo de caída». Si no cabe, no es que falte espacio: es que la alerta todavía no está entendida.
Hilo 3 — salir de Excel rápido. Un covenant vigilado en una planilla es una celda que alguien tiene que acordarse de mirar, y ese alguien está de vacaciones en febrero. Aquí es una regla que se recalcula sola cada vez que llega un trimestre nuevo. Ésa es la diferencia entre un control y un recordatorio.
Se proyecta la página ejecutiva que acaban de diseñar en el cuaderno, y se pregunta:
«Esta página la explicas tú. Estás en la reunión, alguien pregunta por el 4,70 y tú cuentas la historia del denominador.
¿Y cuando la abra alguien un martes a las 8 de la mañana, sin ti en la sala?»
Se recogen dos respuestas y se construye la del curso, que queda escrita en la pizarra el resto de la clase:
Cuando no estás tú, lo único que queda es lo que está escrito. El informe no termina cuando se ve bien: termina cuando puede viajar solo. Y viajar solo significa tres cosas concretas: que llegue (distribución), que cargue rápido (rendimiento) y que se entienda sin traductor (diccionario). Eso es la segunda mitad de esta clase.
El criterio no es técnico: es quién lo recibe y qué necesita hacer con él.
| Vía | Qué entrega | Cuándo se usa | Qué se pierde |
|---|---|---|---|
| 1 · Publicar al servicio | Interactividad y actualización automática | El comité mensual que va a filtrar en vivo | Requiere cuenta, permisos y gobierno de accesos |
| 2 · Exportar a PDF | Congela la decisión de hoy | Correo al directorio, acta de reunión, respaldo de auditoría | Nadie puede explorar; y por eso nadie puede romperlo |
3 · Pack reproducible (.pbix + fuentes + diccionario) | Que el otro rehaga tu número | Traspaso de cargo, auditoría, entrega académica | Pesa y exige que la documentación esté al día |
Regla del curso para el Examen Transversal: vía 2 obligatoria en la entrega, vía 3 como anexo. El criterio es auditor y se dice tal cual: «que otro pueda rehacer tu número sin ti».
Y acá se cierra el argumento de la herramienta libre, en un minuto y sin desviarse: «en el examen ustedes eligen la herramienta —el instrumento dice «Power BI (o herramienta de BI equivalente)»— y estas tres vías son exactamente el criterio con que se elige. Un.pbixes un archivo: viaja, se versiona y la vía 3 sale gratis. Un informe de Looker Studio es un servicio con permisos: la vía 1 sale gratis y es un enlace, pero la vía 3 hay que armarla a mano y el enlace deja de funcionar para el que pierde el acceso. Ninguna de las dos es mejor: son dos maneras distintas de que tu trabajo sobreviva sin ti, y elegir con eso a la vista es el IE 5.1.1.» Regla escrita enrecursos/herramienta-de-bi.md; y si eligen Looker Studio, la parte 4 derecursos/guia-looker-estudiante.mdes obligatoria, porque compartir el informe no comparte la hoja de datos.
Y la conversación incómoda, que hay que tener hoy y no en el trabajo: qué pasa cuando el informe sale de tu carpeta. Los roles de acceso no son un tema de TI. Si el panel muestra por empresa y el que abre es un ejecutivo comercial de una de esas empresas, hay una decisión de negocio detrás de cada permiso. Se pregunta antes de publicar, no después.
Primero, la honestidad: este panel tiene 1.109 filas y 164 KB. Carga instantáneo aunque lo hagas mal. Las dos cifras se leen en voz alta y no se corre nada en vivo:
eeff_empresas.csv 1.109 filas · 164 KB · se lee en 0,11 s ventas_full.csv.gz 810.000 filas · 24 MB · se cuenta en 0,73 s
Y las tres razones por las que el modelo ágil escala y la tabla plana no, dictadas: 1 · las dimensiones son cortas —dim_empresa tiene 40 filas, no 1.109 repeticiones del nombre—; 2 · la agregación vive en la medida, no en columnas calculadas —una columna se materializa fila por fila, una medida se evalúa sólo para lo que estás mirando—; 3 · sólo cargas las columnas que usas.
«La estética también es de tiempo. Un informe que tarda quince segundos en responder a un filtro, en una reunión de ocho minutos, es un informe que no se usa.»
Y lo que falta para cerrar el argumento, con una confesión: «todo lo que hemos hecho este semestre es Importación, y no se los había dicho. Es uno de tres modos, y es el que casi siempre corresponde. Pero el primer día que abran Power BI en una empresa con base corporativa, alguien de TI les va a preguntar por los otros dos.»
| Modo | Qué hace | La pregunta de negocio que lo decide |
|---|---|---|
| Importación | Copia el dato dentro del .pbix y lo comprime. Se actualiza según un calendario | ¿Basta con el dato de anoche? Entonces éste, y punto |
| DirectQuery | No copia nada. Cada clic dispara una consulta a la base de origen | ¿Tiene que mostrar el dato de hace cinco minutos? Entonces éste — y la velocidad del informe pasa a ser la de esa base, no la tuya |
| Live Connection | Te conectas a un modelo semántico ya publicado por otro equipo. No modelas: consumes | ¿Ya existe un modelo corporativo con las definiciones oficiales? Conéctate, y que el margen EBITDA signifique lo mismo en los doce informes de la empresa |
La pregunta se dice completa y se copia, porque es la que se lleva un titulado a su primer trabajo:
«¿El informe tiene que mostrar el dato de hace cinco minutos o el de anoche?» La respuesta la da el negocio, no TI.
Y el aviso honesto: DirectQuery se paga. Todo lo del modelo ágil se aplica igual, y encima se le suman la latencia de la red y la carga sobre una base que además tiene gente trabajando.
Y la herramienta que dice cuál visual es el lento: Performance Analyzer (pestaña Optimize / View): Start recording, se refrescan los visuales, y devuelve milisegundos por visual, separando la consulta DAX del dibujo.
«Cuando alguien diga "el informe está lento", eso no es un diagnóstico: es un síntoma. Un informe no es lento: hay un visual que es lento, y casi siempre es uno solo.»
Es la media lámina de recursos/etica-y-privacidad.md §6, que está escrita y minutada ahí. Acá va sólo lo que se dice en voz alta y en qué minuto. Este bloque no se corta.
rut_cliente son empresas, y la ley protege a personas naturales. limite_credito_clp no es dato personal: es secreto comercial, y se cuida igual. Y vendedor son siete personas, con su rendimiento comercial al lado. «El dato personal de este archivo no es el RUT del cliente: es el nombre del vendedor, y lleva doce semanas proyectado en esta pantalla.»No es documentación: es un contrato. Define qué significa cada campo y, sobre todo, qué NO significa. Cinco columnas:
| Tabla | Campo | Tipo | Qué significa | Regla / advertencia |
|---|
En clase se documenta fact_eeff, que es la tabla que sostiene todas las medidas; dim_empresa, dim_sector y dim_tiempo se completan en casa sobre la misma plantilla. Pero antes, los cuatro ejemplos obligatorios de este panel (12 min), que se escriben en la pizarra y se copian textual porque son la clase:
fact_eeff, y la prueba de fuegoEntregas: la fila de diccionario de cada campo de fact_eeff —cinco columnas— más los cuatro ejemplos obligatorios escritos, y la prueba de fuego pasada con el compañero de al lado. 12 minutos de escritura + 8 de prueba en pares; el diccionario completo se entrega antes de mañana, mié 02-12, 20:30.
1 · El ejemplo insignia: ebitda_mm_clp no significa lo mismo en Banca.
-- 👀 SE MIRA · ese 33,0 % de Banca está bien calculado y no es un margen EBITDA SELECT sector_n, ROUND(100.0 * SUM(ebitda_mm_clp) / SUM(ingresos_mm_clp), 1) AS margen_pct, ROUND(SUM(activos_corrientes_mm_clp) / SUM(pasivos_corrientes_mm_clp), 2) AS liquidez FROM eeff WHERE anio = 2025 AND rut_n <> '76660573-7' GROUP BY 1 ORDER BY 2 DESC; -- UTILITIES 35,3 · 1,18 -- BANCA 33,0 · 1,02 -- MINERIA 30,4 · 1,83 -- FORESTAL 18,5 · 1,46 -- SALUD 14,2 · 1,09 -- RETAIL 8,0 · 1,31
Ese 33,0 % de Banca está bien calculado y no es un margen EBITDA. Un banco no tiene costo de venta ni EBITDA: en este panel esas columnas se reutilizan con la lectura del área de estudios — costo_venta_mm_clp son los intereses pagados a los depositantes y deuda_financiera_mm_clp no incluye los depósitos.
Y el costo de no escribirlo, medido:
-- 👀 SE MIRA · el mismo titular, con Banca y sin Banca: 24,3 contra 22,8 SELECT ROUND(100.0 * SUM(ebitda_mm_clp) / SUM(ingresos_mm_clp), 1) AS con_banca, ROUND(100.0 * SUM(ebitda_mm_clp) FILTER (WHERE sector_n <> 'BANCA') / SUM(ingresos_mm_clp) FILTER (WHERE sector_n <> 'BANCA'), 1) AS sin_banca FROM eeff WHERE anio = 2025 AND rut_n <> '76660573-7'; -- 24,3 | 22,8
El margen agregado del panel en 2025 es 24,3 % con Banca y 22,8 % sin ella: un punto y medio de diferencia en el titular. (Sobre el panel completo, 24,0 % y 22,6 %: el filtro también hay que declararlo.) Los dos números son correctos. Sólo uno de los dos es honesto, y cuál lo sea depende de lo que diga el diccionario. Si eso no está escrito, el informe miente solo, sin que nadie mienta.
2 · La convención de signos. Todas las columnas de gasto van en positivo, como magnitud, y la identidad se cumple fila a fila: ebitda = ingresos − costo_venta − gastos_operacionales. Quien no lo sepa va a restar dos veces.
3 · La exclusión declarada. «El margen EBITDA excluye a Minera Andes Blancos SpA (RUT 76.660.573-7): reporta ingresos en millones de USD y el resto en MM CLP. Consultado a Control de Gestión el [fecha]. Pendiente la conversión.» Una exclusión sin nota es un maquillaje.
4 · Lo que la fuente no trae. «Deuda/EBITDA se calcula sobre deuda bruta: el panel no informa efectivo, por lo tanto no hay deuda neta.» Y: «Tres empresas tienen 11 trimestres ausentes; los totales anuales usan sólo años completos.»
Y la fila que salió hace quince minutos, que también es del diccionario: una columna puede tener una advertencia de publicación, no sólo de significado. «rut_cliente: identificador del cliente. No se publica en paneles distribuidos fuera de Control de Gestión; la apertura publicable es segmento × macrozona, con mínimo 3 clientes por celda.» El diccionario es donde esa decisión queda escrita — si no, se vuelve a discutir cada vez y se resuelve distinto cada vez.
La prueba de fuego, 8 minutos, en pares. Se intercambian los diccionarios. La pregunta al compañero:
«Con esto en la mano y sin hablar conmigo: ¿puedes decirme qué significa deuda_financiera_mm_clp para una empresa de Banca, y por qué mi margen agregado da 24,3 y no 22,8?»
Si no puede, el contrato está cojo y se reescribe la fila. No se discute, se reescribe.
Los dos en la misma lámina. Son las dos llamadas que hay que aprender a hacer por teléfono.
1 · Tesorería. «Calculé el covenant condeuda_financiera_mm_clp. ¿Está bien?»
La pregunta textual: «¿El covenant de nuestro contrato se mide sobre deuda bruta o sobre deuda neta de caja? ¿Y el EBITDA es el reportado o lleva ajustes pactados con el banco?»
Por qué cambia todo: la deuda neta descuenta el efectivo. Una empresa con 4,70× de deuda bruta y caja abundante puede estar en 3,2× de deuda neta — y no estar en incumplimiento en absoluto. La respuesta cambia quién aparece en rojo en tu página.
Y el hallazgo que hay que hacerles descubrir, no contarles:
-- 👀 SE MIRA · busca la columna de caja: no existe, y eso se escribe en la lámina SELECT column_name FROM (DESCRIBE SELECT * FROM read_csv_auto('datos/finanzas/eeff_empresas.csv')) WHERE lower(column_name) LIKE '%caja%' OR lower(column_name) LIKE '%efectivo%'; -- (0 filas)
El panel no tiene columna de caja. Con este archivo, el covenant sólo se puede calcular sobre deuda bruta, y eso no es una decisión: es una limitación de la fuente. La diferencia entre un analista y alguien que hace gráficos es que el analista escribe esa limitación en la lámina: «deuda/EBITDA calculado sobre deuda bruta; el panel no informa efectivo».
2 · El analista de Estudios del banco (o, en una empresa operativa, Control de Gestión). «Voy a escribir en el diccionario qué significaebitda_mm_clpen Banca. ¿Con qué palabras exactas?»
La pregunta textual: «¿"EBITDA" de un banco significa lo mismo que el de un retailer? Si tengo que ponerlo en una línea de diccionario, ¿cómo lo escribirías tú?»
Y aquí está lo nuevo del método, que hay que subrayar: su respuesta se copia textual al diccionario, entre comillas y con la fecha. No se parafrasea. Un diccionario escrito con las palabras del área que genera el dato se defiende solo en una auditoría; uno escrito con tus palabras es tu interpretación, y a los seis meses nadie sabe si era la de ellos o la tuya.
Hilo 1, en su forma final. El semestre partió con «una consulta SQL sin una conversación previa es una opinión con formato de tabla». El diccionario es el registro escrito de esas conversaciones. Es lo único que queda de ellas cuando tú ya no estás en el cargo.
Hilo 2 — qué van a ver en la organización. Ésta es la lámina que se proyecta en el comité de gestión mensual. La pregunta que hace el CFO ahí no es «¿por qué el gráfico es de barras?»: es «¿de dónde sale ese número y qué supuesto tiene adentro?». Y el diccionario es lo primero que pide un auditor externo y lo primero que no existe: el que lo escribe se vuelve indispensable en tres meses.
Síntesis, construida con ellos (6 min):
Las tres entregas, dichas con reloj y escritas en la pizarra (4 min):
| Qué | Cuándo | Mínimo |
|---|---|---|
| Página ejecutiva construida en Power BI | antes de mañana, mié 02-12, 20:30 | cumple 5-1-0 y tiene título-mensaje |
| Reporte exportado a PDF | idem | las tarjetas no cortadas y el título-mensaje legible en la primera página |
| Diccionario de datos | idem | fact_eeff completo + los cuatro ejemplos obligatorios escritos |
«El boceto lo tienen en el cuaderno desde las 20:55 y el modelo está cargado desde ayer: lo que falta es armarla y exportarla. Un PDF que no abriste no se manda. Y mañana es la formativa 3: el PDF que suban esta noche es el que van a presentar.»
Publicación al servicio para quien pueda; demo desde la cuenta del profesor para el resto. Carpeta del pack reproducible armada: .pbix + los CSV de las cuatro tablas + el diccionario; si no alcanza hoy, se sube al sitio antes del sábado 23:59.
Ticket TC20 (3 min): a) ¿Qué parte del reporte reemplaza al que lo explica? Una frase. b) Con los gastos financieros 520.955 (2021) → 1.651.271 (2023) MM CLP y Utilities perdiendo ROE de 9,2 % a 5,3 % con el margen EBITDA casi intacto (34,7 % → 34,5 %), escribe la línea del diccionario que impide que alguien lea eso como mala gestión. c) Del 1 al 5, dónde te sientes y qué te falta.
Anki S14–S15 publicado (10 tarjetas: las cuatro reglas de estética, las cuatro medidas, el triplete, la trampa del denominador).
Preguntas que quedan planteadas (se escriben en la pizarra y no se responden hoy):
→ Tienes el reporte publicado y documentado. Si te dieran dos horas y un caso que nunca viste, ¿cuánto de todo esto se sostiene?
→ Mañana presentas tu dashboard en tres minutos. ¿Qué sacas primero si te quedan dos?
Tres minutos. No suma nota. Sirve para armar la apertura de la próxima clase.
El notebook de esta clase:
https://gaa1104.vercel.app/notebooks/clase-20.ipynb