Proyecto 04 · Reporteo ejecutivo
Una solución completa de analítica logística: modelo dimensional en PostgreSQL, una capa de vistas construida para cada pregunta de negocio y un reporte de cinco páginas en Power BI conectado por DirectQuery.
Qué es
El proyecto parte de un conjunto de datos logísticos sintético con más de 31,000 embarques, unos 5,400 incidentes, capacidad y pronóstico diarios, transportistas, instalaciones, rutas, niveles de servicio y calendario.
Los datos viven en PostgreSQL y Power BI se conecta por DirectQuery: el archivo PBIX no contiene una copia de los datos operativos, sino que consulta la base cuando el usuario interactúa con el reporte.
La intención no es mostrar habilidad de visualización, sino modelado de datos, SQL, diseño de la capa de reporteo, definición de indicadores y criterio sobre qué datos debe recibir cada caso de uso.
Desempeño general de la red.
Costo, confiabilidad, servicio y excepciones por transportista.
Exactitud, utilización, sobrecargas y volumen real.
Severidad, causa raíz y resolución.
Investigación a nivel de embarque.
Uno · El modelo de datos
El modelo sigue una estructura de hechos y dimensiones. Los hechos guardan eventos o mediciones del negocio; las dimensiones los describen. Lo importante es que los tres hechos no viven en la misma granularidad: los embarques son por embarque, la capacidad es por instalación y día, y los incidentes son por incidente.
Mantener esas granularidades separadas evita que un cruce entre niveles de detalle distintos duplique registros y distorsione las medidas.
Dos · La capa de reporteo
La decisión central fue esta: Power BI debe recibir los datos ya organizados en el nivel que cada página necesita, en lugar de reconstruir uniones y agregaciones complejas por DirectQuery cada vez que alguien toca un filtro.
Por eso las vistas no son copias arbitrarias de las tablas. Cada una tiene una granularidad y un propósito de negocio deliberados, y expone solo los campos que su página realmente usa.
| Vista | Granularidad | Propósito |
|---|---|---|
| rpt_network_monthly | Mes + Instalación | Reporteo ejecutivo: volumen, costo, entregas a tiempo, utilización, días de sobrecarga e incidentes abiertos. Un tablero ejecutivo no necesita registros individuales de embarque. |
| rpt_carrier_monthly | Mes + Transportista + Nivel de servicio | Análisis de transportistas. Conservar el nivel de servicio permite distinguir si el mal desempeño se asocia a Standard, Expedited o Priority en lugar de culpar al transportista completo. |
| rpt_capacity_daily | Fecha + Instalación | Pronóstico y capacidad: exactitud, utilización, variación de capacidad, error de pronóstico y bandera de sobrecarga. Se mantiene diaria a propósito. |
| rpt_incidents_monthly | Mes + Instalación + Severidad + Tipo + Causa raíz | Gestión de incidentes y causa raíz: dónde ocurren, de qué tipo, qué tan graves, qué los causa y cuánto tardan en resolverse. Cinco incidentes críticos no significan lo mismo que cinco leves. |
| rpt_exception_detail | Un embarque con excepción por fila | Investigación. Las demás páginas responden dónde está el problema; esta responde cuál embarque lo causó, con fecha, instalación, transportista, ruta, costo, retrasos, incidente, severidad y tiempo de resolución. |
Tres · Un criterio con consecuencias
Agregar la capacidad a nivel mensual habría hecho el reporte más ligero y habría escondido justo el problema que importa. Un promedio mensual de 78.6% de utilización describe una operación sana; el miércoles a 112% describe una operación que se rompió.
Por eso esa vista conserva el día, junto con unidades pronosticadas y reales, capacidad planeada, error de pronóstico, variación y evento de alto volumen. La granularidad se elige según la decisión que se va a tomar, no según el tamaño del conjunto de datos.
El modelo no usa una sola tabla universal de reporteo, y eso fue deliberado: una tabla plana mezclaría embarques, incidentes, capacidad diaria y cálculos mensuales, con granularidades distintas que producen duplicados y medidas incorrectas.
«Mantuve los datos en un modelo de hechos y dimensiones, pero creé una capa de reporteo en PostgreSQL para Power BI. En lugar de que Power BI reconstruyera uniones y agregaciones sobre las tablas transaccionales por DirectQuery, hice vistas específicas en la granularidad que cada página analítica necesita: el reporteo ejecutivo y de transportistas es mensual, la capacidad se queda diaria porque las sobrecargas desaparecen en los promedios, el reporteo de incidentes conserva dimensiones de riesgo como severidad y causa raíz, y la vista de excepciones se queda detallada porque está pensada para investigar.»
Cómo explico esta arquitectura en una entrevistaEl reporte está publicado y es navegable.
Abrir el reporte ↗