Analítica Avanzada (OLAP) y
Common Table Expressions
En este capítulo, rompemos la barrera de "una fila por grupo". Aprenderás a usar Window Functions para realizar cálculos complejos como acumulados anuales (YTD), rankings y comparativas mes a mes (MoM) sin perder el detalle de los datos, usando la potencia de OVER() y organizando tu código con CTEs.
2. El Concepto de "Ventana" (Window)
¿Cómo mirar "alrededor" de la fila actual sin agrupar todo?
GROUP BY vs. PARTITION BY
Reduce múltiples filas en una sola. Pierdes el detalle individual.
Ej: "Suma total de ventas por mes".
Mantiene todas las filas originales pero añade una columna con el cálculo agregado repetido o acumulado.
Ej: "Venta de esta factura vs el promedio del mes".
Anatomía de la Ventana
3. Funciones de Ranking
Diferencias críticas en cómo enumerar filas con empates.
| Valor (Ventas) | ROW_NUMBER() | RANK() | DENSE_RANK() | Explicación |
|---|---|---|---|---|
| $5000 | 1 | 1 | 1 | Líder indiscutible. |
| $3000 | 2 | 2 | 2 | Empate detectado. |
| $3000 | 3 | 2 | 2 | ROW_NUMBER desempató forzosamente. |
| $1000 | 4 | 4 | 3 | RANK salta (2->4). DENSE_RANK no salta (2->3). |
4. Viaje en el Tiempo: LEAD & LAG
Acceder a filas anteriores o posteriores sin hacer Self-Joins.
Mes,
VentaActual,
LAG(VentaActual) OVER (ORDER BY Mes) AS VentaMesAnterior,
VentaActual - LAG(VentaActual) OVER (ORDER BY Mes) AS Diferencia
5. Common Table Expressions (CTEs)
El fin de las subconsultas anidadas ilegibles.
Un CTE (definido con WITH) crea una tabla temporal que solo existe durante la ejecución de la consulta. Es vital para limpiar datos antes de analizarlos.
WITH VentasLimpias AS (
-- Paso 1: Limpieza
SELECT
UPPER(Cliente) as Cliente,
CAST(Fecha AS DATE) as FechaVenta,
Monto
FROM RawData
),
VentasMensuales AS (
-- Paso 2: Agregación
SELECT
YEAR(FechaVenta) as Anio,
MONTH(FechaVenta) as Mes,
SUM(Monto) as Total
FROM VentasLimpias
GROUP BY YEAR(FechaVenta), MONTH(FechaVenta)
)
-- Paso 3: Análisis Final
SELECT * FROM VentasMensuales;
The Financial Analyst Protocol
El CFO necesita un reporte urgente. Excel colapsó. Debes generar una Consulta Única que muestre el rendimiento histórico de ventas.
Requerimientos del Query (Single SELECT):
-
1
Limpieza (CTE): Usa el dataset
raw_sales_dump.csvnormalizado. - 2 Venta Mensual: Agrupa las ventas por Año y Mes.
-
3
Growth (MoM): Usa
LAG()para calcular el % de crecimiento respecto al mes anterior. -
4
Acumulado (YTD): Usa
SUM() OVER(PARTITION BY Anio ORDER BY Mes)para el Running Total.