# Dataset de prácticas — SunFruits Exports · Curso Power BI

**Archivo:** `SunFruits_Ventas_Practica.xlsx`
**Contexto:** Agroexportadora de Ica (uva, palta, cítricos, arándanos, granada). Datos **sintéticos**, ~5.800 filas de ventas. Diseñado con "suciedad" intencional para que las prácticas de Power Query tengan sentido y para construir un modelo en estrella en el Módulo 2.

> ⚠️ Esta guía es **para el instructor**. No la entregues a los alumnos antes del taller: revela los problemas que deben descubrir.

---

## Hojas del libro

| Hoja | Tipo | Filas aprox. | Propósito didáctico |
|------|------|--------------|---------------------|
| `Ventas_2023` | Rango con títulos | 1.150 | Hecho de ventas (año completo) |
| `Ventas_2024` | Rango con títulos | 1.300 | Hecho de ventas (año completo) |
| `Ventas_2025` | Rango con títulos | 1.150 | Hecho de ventas (año completo) |
| `Ventas_2026` | Rango con títulos | 400 | Año parcial (Ene–May) → YTD / time intelligence |
| `Clientes` | Rango "sucio" | 64 | Dimensión Cliente (limpiar + deduplicar + Merge) |
| `Productos` | **Tabla** `tblProductos` | 18 | Dimensión Producto (Tabla limpia) |
| `Fundos` | **Tabla** `tblFundos` | 4 | Dimensión Fundo (Tabla limpia) |
| `Costos_2025` | Rango **cruzado** | 28 | Costos con meses en columnas → **Unpivot** |
| `TipoCambio` | **Tabla** `tblTipoCambio` | 41 | USD→PEN mensual → **Merge** por periodo |
| `Metas` | Rango | 20 | Presupuesto por año/producto → variaciones DAX |

### Columnas de las hojas `Ventas_AAAA` (cabecera en la **fila 4**)
`N Orden · Fecha Pedido · Fecha Embarque · Cliente · Pais Destino · Vendedor · Fundo · Producto · Variedad · Calibre · Cajas · Kg Netos · Precio USD x Kg · Moneda · Incoterm · Puerto · Naviera · Estado · Monto USD`

---

## Problemas plantados (qué entrena cada uno)

| Problema | Dónde | Sesión que lo usa |
|----------|-------|-------------------|
| 3 filas de título antes de la cabecera | Ventas_* (filas 1–3) | S1 · PromoteHeaders |
| 4 hojas con mismo formato | Ventas_2023..2026 | S2 · Append + función por hoja |
| Fechas como texto en 4 formatos (`dd/mm/aaaa`, `aaaa-mm-dd`, `dd-mm-aaaa`, `dd-mmm-aaaa`) | Fecha Pedido/Embarque (~38%) | S1 · tipos + **locale** |
| Precio con coma decimal europea (`"3,31"`) | Precio USD x Kg (~15%) | S1 · "Using Locale…" |
| Cajas como texto con separador de miles (`"1.250"`) | Cajas (~2%) | S1 · tipos |
| Monto vacío o con texto (`N/A`, `pendiente`, `-`) | Monto USD (~9%) | S1 · `try…otherwise`, Replace/Remove Errors |
| Nombres de país inconsistentes (`USA`, `EE.UU.`, `Spain`, `Korea`, `Países Bajos `) | Pais Destino | S1/S2 · Replace Values, tabla de mapeo |
| Espacios y MAYÚSCULAS en Cliente | Cliente (~13%) | S1 · `Text.Trim`, `Text.Proper` |
| Filas en blanco intercaladas | Ventas_* (~1%) | S1 · Remove blank rows |
| Subtotales `TOTAL PARCIAL` / `TOTAL GENERAL` dentro de los datos | Ventas_* | S1 · filtrar filas basura |
| Filas duplicadas a propósito | final de cada Ventas_* | S1 · Remove Duplicates |
| Clientes duplicados con variación | Clientes | S3 · deduplicar dimensión |
| Costos con meses en columnas + celdas vacías | Costos_2025 | S2 · **Unpivot** |

---

## Modelo en estrella objetivo (Módulo 2)

```
                 ┌────────────┐
                 │  Calendario│ (generada en DAX)
                 └─────┬──────┘
   ┌──────────┐        │        ┌──────────┐
   │ Clientes │───┐    │    ┌───│ Productos│
   └──────────┘   ▼    ▼    ▼   └──────────┘
                ┌─────────────────┐
                │  Ventas (hecho) │
                └─────────────────┘
   ┌──────────┐   ▲         ▲   ┌────────────┐
   │  Fundos  │───┘         └───│ TipoCambio │ (por periodo)
   └──────────┘                 └────────────┘
            Metas → tabla aparte para comparativas
```

---

## Prácticas sugeridas por sesión

- **S1 (Arquitectura + limpieza):** conectar a `Ventas_2024`, promover encabezados, fijar tipos con locale, manejar errores en `Monto USD`, quitar totales/blancos/duplicados.
- **S2 (Combinar + M):** crear función que limpie una hoja y aplicarla a las 4 con `Append`; `Unpivot` de `Costos_2025`; `Merge` con `TipoCambio` (Periodo).
- **S3 (Modelado):** construir dimensiones (Clientes limpia, Productos, Fundos), tabla Calendario, relaciones y esquema estrella.
- **S4 (DAX base):** medidas Monto USD, Cajas, Kg, Precio promedio; `CALCULATE` por país/producto.
- **S5–S6 (DAX avanzado / time intelligence):** Monto en PEN (vía TipoCambio), YTD/YoY 2024 vs 2025, % cumplimiento vs `Metas`.
- **S7 (RLS):** seguridad por `Region Comercial` o por `Vendedor`.
- **S8 (Publicación):** refresco y parámetro de ruta del archivo.

---

## Regenerar el dataset
```bash
python3 gen_dataset.py   # usa semilla fija (random.seed 2026) → reproducible
```
Edita `gen_dataset.py` para cambiar volúmenes, productos o el nivel de "suciedad".
