Este proyecto implementa una solución analítica end-to-end en Google Cloud Platform para el análisis de ventas y logística, abarcando desde la generación de datos hasta la construcción de un Data Warehouse modelado en esquema estrella.
El objetivo es simular un escenario realista de operación de distribuidores, integrando datos de ventas, stock y clientes, y transformarlos en un repositorio analítico preparado para consumo en herramientas de Business Intelligence.
El proyecto se basa en un escenario de distribución comercial con múltiples distribuidores, sucursales y clientes, donde se busca responder preguntas operativas y comerciales como:
- Evolución de stock en el tiempo
- Desempeño en ventas por región y producto
- Análisis de stock y reposición
- Comparación entre distribuidores
Dado que no se dispone de datos reales, se implementó un generador de datos sintéticos en Python que respeta reglas de negocio realistas (condiciones de venta, comportamiento de clientes, reposición de stock, etc.).
La solución sigue una arquitectura analítica por capas:
- Generación de datos (Python) →
- Google Cloud Storage (Data Lake) →
- BigQuery capa raw →
- Data Warehouse →
- Datamarts →
- Dashboard en Looker Studio
- Separación por capas para desacoplar ingesta, modelado y consumo
- Uso de esquema estrella para facilitar análisis
- Datamarts para simplificar la lógica en BI
- SQL versionado y orquestación desde Python
├── src/
│ ├── generate_data/ # Generación de datos sintéticos
│ ├── upload_to_gcs/ # Carga de archivos a Cloud Storage
│ ├── load_raw_to_bq/ # Ingesta RAW en BigQuery con control de idempotencia
│ ├── dwh/ # Orquestación del Data Warehouse
│ ├── datamarts/ # Orquestación de Datamarts
│ └── common/ # Utilidades comunes (auth, clientes GCP)
│
├── sql/
│ ├── dwh/ # SQL del Data Warehouse (dimensiones y hechos)
│ └── datamarts/ # SQL de Datamarts
│
├── requirements.txt
└── README.md
El Data Warehouse está modelado bajo un esquema estrella, separando dimensiones y tablas de hechos. Dimensiones:
dim_fechadim_clientedim_productodim_sucursal
Hechos:
fact_ventasfact_stock
La carga es incremental e idempotente, permitiendo la reejecución del pipeline sin duplicación de datos. Se implementa una tabla de control para evitar reprocesos y duplicación de archivos provenientes de Cloud Storage.
Para facilitar el consumo analítico y simplificar la lógica en herramientas de BI, se construyó una capa de datamarts sobre el Data Warehouse.
Los datamarts se implementan como vistas en BigQuery y están orientados al consumo analítico.
Incluye métricas y dimensiones necesarias para el análisis comercial:
- Unidades vendidas
- Importe vendido
- Producto
- Provincia
- Tipo de negocio
- Sucursal
- Dimensiones temporales (año, mes, semana ISO)
Orientado al análisis operativo y logístico:
- Stock diario por producto y distribuidor
- Métricas agregables (promedio, mínimo, desvío estándar)
- Dimensiones temporales (año, mes, semana ISO)
Los datamarts se conectan a Looker Studio para la visualización de indicadores clave.
Se desarrollaron dashboards con foco en:
- Análisis de ventas
- Distribución geográfica
- Desempeño por producto y tipo de negocio
- Control de stock y variabilidad
La capa de BI se apoya exclusivamente en los datamarts, evitando joins y lógica compleja en la herramienta de visualización.
Clickea aquí para visualizar el Dashboard
- Generación de datos sintéticos.
python -m src.generate_data.generate_data- Carga de archivos en Cloud Storage.
python -m src.upload_to_gcs.upload_to_gcs- Ingesta incremental en BigQuery raw.
a. Creacion de capas raw, dwh y datamarts si no existen:
b. Creacion de tabla de control
python -m src.load_raw_to_bq.setup_datasets
c. Ingesta de datos desde Cloud Storage a rawpython -m src.load_raw_to_bq.setup_infra_control
python -m src.load_raw_to_bq.load_raw
- Ejecución del Data Warehouse.
python -m src.dwh.run_dwh- Ejecución de Datamarts
python -m src.datamarts.run_datamarts- Python
- Google Cloud Storage
- Google BigQuery
- SQL
- Looker Studio