Pipeline completo de Business Intelligence para la empresa ficticia DataShop: desde el diseño del modelo dimensional hasta un tablero analítico en Power BI, pasando por la implementación del Data Warehouse en SQL Server y el proceso ETL en Python.
Este proyecto implementa un Data Warehouse siguiendo un esquema en estrella, con un pipeline ETL de tres etapas (staging → intermediate → final) que procesa más de 20.000 registros de ventas distribuidos entre productos, clientes y tiendas.
El tablero final en Power BI permite analizar el desempeño de ventas por período, tienda, producto y cliente, con KPIs clave y comparativas mensuales.
DataShop-SQL-PowerBI/
│
├── data/ # Archivos fuente
│ ├── clientes.csv
│ ├── tiendas.csv
│ ├── productos.csv
│ └── ventas.csv
│
├── docs/ # Diagramas y documentación
│ └── DW_Diagrama_DataShop.png
│
├── sql/ # Scripts SQL (ejecutar en orden)
│ ├── 01_DW_Script_Estructura.sql
│ ├── 02_DW_DataShop_StoredProcedures.sql
│ └── 03_etl_carga_Dim_Tiempo.sql
│
├── etl/ # Scripts ETL en Python
│ ├── staging/ # Carga CSV → tablas Stg_*
│ │ ├── etl_carga_Stg_Dim_Producto.py
│ │ ├── etl_carga_Stg_Dim_Cliente.py
│ │ ├── etl_carga_Stg_Dim_Tienda.py
│ │ └── etl_carga_Stg_Fact_Ventas.py
│ ├── intermediate/ # Limpieza y transformación → Int_*
│ │ ├── etl_carga_Int_Dim_Producto.py
│ │ ├── etl_carga_Int_Cliente.py
│ │ ├── etl_carga_Int_Tienda.py
│ │ └── etl_carga_Int_Fact_Ventas.py
│ └── final/ # Carga final → Dim_* y Fact_*
│ ├── etl_carga_Dim_Producto.py
│ ├── etl_carga_Dim_Cliente.py
│ ├── etl_carga_Dim_Tienda.py
│ └── etl_carga_Fact_Ventas.py
│
├── powerbi/
│ └── Dashboard_DataShop.pbix
│
├── screenshots/ # Capturas del dashboard
└── README.md
El DW sigue un esquema en estrella con las siguientes tablas:
- Dimensiones:
Dim_Producto,Dim_Cliente,Dim_Tienda,Dim_Tiempo - Tabla de hechos:
Fact_Ventas - Tablas de staging:
Stg_*— carga directa desde CSV - Tablas intermedias:
Int_*— limpieza y normalización
El proceso ETL se ejecuta en tres etapas secuenciales:
1. Staging — Los scripts en etl/staging/ leen los archivos CSV de data/ y los cargan sin transformaciones en las tablas Stg_*.
2. Intermediate — Los scripts en etl/intermediate/ aplican limpieza, normalización y validaciones, escribiendo el resultado en las tablas Int_*.
3. Final — Los scripts en etl/final/ pueblan las tablas definitivas del DW (Dim_* y Fact_Ventas). La Dim_Tiempo se genera directamente desde SQL mediante el stored procedure Sp_Genera_Dim_Tiempo.
El archivo .pbix contiene 4 hojas:
| Hoja | Descripción |
|---|---|
| KPIs de Ventas | Indicadores clave y gráficos por año/mes, tienda y clientes |
| KPIs de Productos y Clientes | Métricas por categoría, tienda y producto |
| Detalle de Ventas | Tabla completa con todas las transacciones |
| Comparativa por Tienda | Matriz de ventas con variación mensual |
KPIs de Ventas![]() |
KPIs de Productos y Clientes![]() |
Detalle de Ventas![]() |
Comparativa por Tienda![]() |
Ejecutar los scripts en SQL Server Management Studio en el siguiente orden:
-- 1. Crear estructura del DW (tablas Stg_, Int_, Dim_, Fact_)
01_DW_Script_Estructura.sql
-- 2. Crear stored procedures de carga
02_DW_DataShop_StoredProcedures.sql
-- 3. Poblar la Dim_Tiempo
03_etl_carga_Dim_Tiempo.sql# Etapa 1: Staging
python etl/staging/etl_carga_Stg_Dim_Producto.py
python etl/staging/etl_carga_Stg_Dim_Cliente.py
python etl/staging/etl_carga_Stg_Dim_Tienda.py
python etl/staging/etl_carga_Stg_Fact_Ventas.py
# Etapa 2: Intermediate
python etl/intermediate/etl_carga_Int_Dim_Producto.py
python etl/intermediate/etl_carga_Int_Cliente.py
python etl/intermediate/etl_carga_Int_Tienda.py
python etl/intermediate/etl_carga_Int_Fact_Ventas.py
# Etapa 3: Final
python etl/final/etl_carga_Dim_Producto.py
python etl/final/etl_carga_Dim_Cliente.py
python etl/final/etl_carga_Dim_Tienda.py
python etl/final/etl_carga_Fact_Ventas.pyAbrir powerbi/Dashboard_DataShop.pbix en Power BI Desktop y actualizar la conexión a la base de datos local.
- SQL Server — Implementación del Data Warehouse
- Python — Scripts ETL (pandas, pyodbc)
- Power BI Desktop — Modelado, DAX y visualización
Ignacio López Parra
Proyecto personal de Business Intelligence.




