Power BI & Bases de Datos
De Cero a Dashboards Empresariales Avanzados con MySQL y DAX
Guía didáctica integral y práctica: Extracción y Transformación de Datos (ETL) con Power Query, Modelado Relacional Tabular en Estrella, Inteligencia de Negocios con DAX, Dashboards Interactivos (Chart.js / Power BI), Diseño de Bases de Datos con MySQL & HeidiSQL, y Conectividad Híbrida con On-Premises Data Gateway.
Power BI
De cero a profesional
Manual práctico de MSI Micro School Informática. Cada procedimiento incluye una captura visual de referencia, pasos numerados y ejercicios construidos con datos reales de una empresa.
Empresa de práctica: Microsoft Corporation
Durante todo el manual trabajaremos con información publicada por Microsoft Corporation. Así el alumno aprende Power BI resolviendo un caso empresarial real, en lugar de practicar con números inventados.
| Año fiscal | Ingresos | Margen bruto | Resultado operativo | Resultado neto |
|---|---|---|---|---|
| 2023 | 211.915 | 146.052 | 88.523 | 72.361 |
| 2024 | 245.122 | 171.008 | 109.433 | 88.136 |
| 2025 | 281.724 | 193.893 | 128.528 | 101.832 |
Fuente: Microsoft Annual Report 2025. Los ejercicios fiscales indicados terminan el 30 de junio.
1. Introducción a Power BI
Power BI Desktop permite conectarse a datos, transformarlos, crear un modelo y construir informes. Esta ruta sigue el flujo recomendado por la documentación oficial de Microsoft Learn.
Traer datos desde Excel, bases de datos y otros orígenes.
Limpiar y preparar información con Power Query.
Crear gráficos, tarjetas, tablas y filtros.
2. Conectar Excel con Power BI
Microsoft documenta el flujo Inicio → Obtener datos → Excel → Conectar. citeturn0search1turn0search0
Paso 1 — Obtener datos
Paso 2 — Elegir el archivo
Obtener datos
Paso 3 — Seleccionar la tabla
Navegador
☐ Segmentos
☐ Estados financieros
Año Ingresos Resultado Neto
2023 211.915 72.361
2024 245.122 88.136
2025 281.724 101.832
- Crea un Excel con los datos 2023, 2024 y 2025.
- Importa la tabla siguiendo los pasos anteriores.
- Crea una tarjeta con los ingresos de 2025.
- Crea un gráfico de columnas con ingresos por año.
- Escribe una conclusión de dos líneas sobre la evolución.
3. Power Query
Power Query sirve para transformar los datos antes de utilizarlos en el modelo. Microsoft indica que desde Power BI se puede seleccionar Transformar datos para abrir el Editor de Power Query. citeturn0search3turn0search10
Ventas
Segmentos
✓ Origen
✓ Tipo cambiado
✓ Filas filtradas
| Año | Ingresos | Resultado Neto |
|---|---|---|
| 2023 | 211.915 | 72.361 |
| 2024 | 245.122 | 88.136 |
| 2025 | 281.724 | 101.832 |
Agrega a propósito un espacio en “2025”, una columna innecesaria y un duplicado. Luego corrige los tres problemas con Power Query. El resultado debe coincidir con los datos publicados.
Ejercicios Prácticos de Dashboards
Tres casos de negocio completos con estructura de datos en Excel, requerimientos de limpieza con Power Query, medidas DAX y entregables visuales interactivos simulados con Chart.js para evaluar cómo debe verse el reporte final.
01 · Dashboard de Ventas
Empresa: Comercial del Paraguay S.A. · Nivel: Básico · Excel: ventas_comercial.xlsx
Datos del Excel
| Fecha | Factura | Cliente | Producto | Categoría | Vendedor | Cantidad | Total |
|---|---|---|---|---|---|---|---|
| 02/01/2026 | F001-001 | Supermercado Central | Notebook HP | Informática | Juan | 2 | 9.000.000 |
| 03/01/2026 | F001-002 | Librería Norte | Mouse Logitech | Accesorios | María | 10 | 1.500.000 |
| 05/01/2026 | F001-003 | Comercial López | Teclado Logitech | Accesorios | Pedro | 5 | 1.100.000 |
| 08/01/2026 | F001-004 | Supermercado Central | Monitor Samsung | Informática | Juan | 3 | 5.400.000 |
| 10/01/2026 | F001-005 | Comercial López | Notebook Lenovo | Informática | María | 1 | 5.200.000 |
Para la práctica completa, ampliar a 50-100 registros y varios meses.
Medidas DAX
Ventas Totales = SUM(Ventas[Total]) Productos Vendidos = SUM(Ventas[Cantidad]) Cantidad Facturas = DISTINCTCOUNT(Ventas[Factura]) Ticket Promedio = DIVIDE([Ventas Totales], [Cantidad Facturas])
Dashboard esperado (Simulación Interactiva)
- Importa el Excel.
- Comprueba los tipos de datos en Power Query.
- Crea las 4 medidas DAX calculadas.
- Construye las tarjetas KPI y los gráficos de evolución y distribución.
- Agrega segmentadores (slicers) de fecha, categoría y vendedor.
02 · Dashboard de Inventario
Empresa: Distribuidora Salem · Nivel: Intermedio · Excel: 3 archivos relacionados
Excel 1 · productos.xlsx
| ID | Producto | Categoría | Marca | Compra | Venta |
|---|---|---|---|---|---|
| 001 | Aromatizante Textil | Limpieza | Saphirus | 25.000 | 38.000 |
| 002 | Difusor de Aroma | Aromatización | Saphirus | 35.000 | 55.000 |
| 003 | Limpiador Multiuso | Limpieza | X | 18.000 | 29.000 |
| 004 | Desinfectante | Limpieza | X | 15.000 | 25.000 |
Excel 2 · stock.xlsx
| ID | Stock Actual | Stock Mínimo | Stock Máximo |
|---|---|---|---|
| 001 | 45 | 20 | 100 |
| 002 | 8 | 15 | 80 |
| 003 | 120 | 30 | 150 |
| 004 | 12 | 25 | 100 |
Excel 3 · movimientos.xlsx
| Fecha | ID | Tipo | Cantidad |
|---|---|---|---|
| 02/01/2026 | 001 | Entrada | 50 |
| 03/01/2026 | 002 | Entrada | 30 |
| 05/01/2026 | 002 | Salida | 22 |
| 06/01/2026 | 001 | Salida | 5 |
MODELO DE RELACIONES: PRODUCTOS (1) ──── (*) STOCK PRODUCTOS (1) ──── (*) MOVIMIENTOS
Medida sugerida
Valor Inventario =
SUMX(
Stock,
Stock[Stock Actual] * RELATED(Productos[Compra])
)
Dashboard esperado (Simulación Interactiva)
- Importa los 3 Excel.
- Limpia los datos con Power Query y verifica tipos numéricos.
- Relaciona las tablas en el modelo mediante ID de producto.
- Crea las medidas de valor de stock y alertas.
- Crea gráficos de stock por categoría y entradas vs. salidas.
- Identifica y resalta visualmente los productos por debajo del stock mínimo.
03 · Dashboard de Recursos Humanos
Empresa: Empresa Tecnológica PY S.A. · Nivel: Intermedio/Avanzado · Excel: empleados.xlsx
Datos del Excel
| ID | Nombre | Departamento | Cargo | Ingreso | Salario | Estado | Ciudad |
|---|---|---|---|---|---|---|---|
| 001 | Carlos Benítez | Sistemas | Programador | 15/02/2021 | 7.500.000 | Activo | Asunción |
| 002 | María González | Administración | Contadora | 10/03/2022 | 6.500.000 | Activo | San Lorenzo |
| 003 | Pedro López | Sistemas | Analista | 20/06/2020 | 8.200.000 | Activo | Luque |
| 004 | Ana Torres | Marketing | Diseñadora | 05/01/2024 | 5.500.000 | Activo | Asunción |
| 005 | José Ramírez | Ventas | Ejecutivo | 12/09/2023 | 5.800.000 | Activo | Capiatá |
Para la práctica completa, ampliar a 100-300 empleados.
Medidas DAX
Total Empleados = DISTINCTCOUNT(Empleados[ID]) Salario Promedio = AVERAGE(Empleados[Salario]) Masa Salarial = SUM(Empleados[Salario])
Dashboard esperado (Simulación Interactiva)
- Importa empleados.xlsx.
- Revisa fechas y formato de salarios.
- Crea los 3 indicadores clave (Total, Promedio y Masa Salarial).
- Analiza la composición de la empresa por departamento y ciudad.
- Agrega segmentadores por departamento, cargo, ciudad y estado.
Comparación de Proyectos
| Proyecto | Excel | Nivel | Habilidades Clave Desarrolladas |
|---|---|---|---|
| 📊 Ventas | 1 archivo plano | Básico | Limpieza inicial + Dashboard + DAX básico |
| 📦 Inventario | 3 archivos | Intermedio | Power Query ETL + Modelo relacional estrella |
| 👥 RR.HH. | 1 archivo detallado | Intermedio/Avanzado | KPIs analíticos + Segmentación multicriterio |
Criterios de Evaluación
- Selección de Visualizaciones: ¿Por qué elegiste cada tipo de gráfico según el dato a comunicar?
- Lógica DAX: ¿Qué medida DAX fue determinante y cómo se estructuró?
- Filtros y Segmentadores: ¿Qué interacción aporta mayor valor al usuario de negocio?
- Toma de Decisiones: ¿Qué decisión empresarial concreta respalda el dashboard?
- Iteración y Mejora: ¿Qué optimización técnica o visual añadirías en una siguiente versión?
POWER BI · NIVEL 2Dashboards Interactivos y Herramientas Modernas
Segunda serie de prácticas para pasar de dashboards estáticos a soluciones interactivas, dinámicas y orientadas a decisiones empresariales.
Ruta de aprendizaje
Segmentadores, botones, marcadores y navegación.
KPI, metas, formato condicional y semáforos.
Drill-through y tooltips personalizados.
Parámetros de campos para cambiar el análisis.
Calendario, YTD, YoY y crecimiento.
Mapas, jerarquías y drill-down.
04 · Dashboard de Ventas Interactivo
Empresa: Comercial del Paraguay S.A. · Nivel: Intermedio
Excel: ventas_comercial.xlsx
| Fecha | Factura | Cliente | Producto | Categoría | Vendedor | Cantidad | Total (₲) |
|---|---|---|---|---|---|---|---|
| 02/01/2026 | F001-001 | Supermercado Central | Notebook HP | Informática | Juan | 2 | 9.000.000 |
| 03/01/2026 | F001-002 | Librería Norte | Mouse Logitech | Accesorios | María | 10 | 1.500.000 |
| 05/01/2026 | F001-003 | Comercial López | Teclado Logitech | Accesorios | Pedro | 5 | 1.100.000 |
| 08/01/2026 | F001-004 | Supermercado Central | Monitor Samsung 24" | Informática | Juan | 3 | 5.400.000 |
| 10/01/2026 | F001-005 | Comercial López | Notebook Lenovo | Informática | María | 1 | 5.200.000 |
| 12/01/2026 | F001-006 | Farmacia San José | Impresora Epson | Oficina | Pedro | 2 | 3.600.000 |
| 15/01/2026 | F001-007 | Librería Norte | Auriculares Sony | Accesorios | Juan | 6 | 2.700.000 |
| 18/01/2026 | F001-008 | Distribuidora Guaraní | Disco SSD 1TB | Componentes | María | 4 | 3.200.000 |
| 22/01/2026 | F001-009 | Supermercado Central | Silla Ergonómica | Oficina | Pedro | 3 | 4.500.000 |
| 26/01/2026 | F001-010 | Comercial López | Proyector Epson | Oficina | Juan | 1 | 6.800.000 |
- Importa el Excel.
- Crea las páginas Resumen, Vendedores y Productos.
- Agrega segmentadores de año, mes, vendedor y categoría.
- Crea botones de navegación.
- Usa marcadores para alternar vistas.
Año ▼ · Mes ▼ · Vendedor ▼
05 · Dashboard Ejecutivo
Empresa: Distribuidora Salem · Nivel: Intermedio
Excel: ventas_ejecutivas.xlsx
| ID | Producto | Categoría | Ventas Realizadas (₲) | Meta de Ventas (₲) | % Cumplimiento | Estado |
|---|---|---|---|---|---|---|
| P01 | Aromatizante Textil 250ml | Aromatización | 18.500.000 | 15.000.000 | 123,3% | 🟢 Alcanzada |
| P02 | Difusor de Aroma Varillas | Aromatización | 12.800.000 | 14.000.000 | 91,4% | 🟡 En Proceso |
| P03 | Desinfectante Multiuso 5L | Limpieza | 24.600.000 | 20.000.000 | 123,0% | 🟢 Alcanzada |
| P04 | Limpiador Concentrado 1L | Limpieza | 7.200.000 | 10.000.000 | 72,0% | 🔴 Crítico |
| P05 | Detergente Industrial 20L | Institucional | 16.400.000 | 15.000.000 | 109,3% | 🟢 Alcanzada |
| P06 | Jabón Líquido Manos 5L | Higiene | 9.500.000 | 12.000.000 | 79,2% | 🔴 Crítico |
| P07 | Alcohol en Gel 70% 1L | Higiene | 11.200.000 | 11.000.000 | 101,8% | 🟢 Alcanzada |
| P08 | Lava Vajillas Concentrado | Limpieza | 8.900.000 | 9.500.000 | 93,7% | 🟡 En Proceso |
| P09 | Cera Autobrillo Pisos 5L | Tratamiento Pisos | 6.300.000 | 8.500.000 | 74,1% | 🔴 Crítico |
| P10 | Desengrasante Potente 5L | Institucional | 14.100.000 | 13.000.000 | 108,5% | 🟢 Alcanzada |
Meta mensual global: ₲ 100.000.000.
Meta Ventas = 100000000 Cumplimiento = DIVIDE([Ventas Totales], [Meta Ventas])
| Cumplimiento | Estado | Significado |
|---|---|---|
| ≥ 100% | 🟢 | Meta alcanzada |
| 80%–99,99% | 🟡 | Cerca |
| < 80% | 🔴 | Por debajo |
06 · Dashboard con Drill-through y Tooltips
Empresa: Comercial del Paraguay S.A. · Nivel: Intermedio/Avanzado
Excel: ventas_detalle_vendedores.xlsx
| Fecha | Factura | Vendedor | Cliente | Producto | Cantidad | Total (₲) | Margen |
|---|---|---|---|---|---|---|---|
| 02/01/2026 | F001-001 | Juan | Supermercado Central | Notebook HP | 2 | 9.000.000 | 22% |
| 03/01/2026 | F001-002 | María | Librería Norte | Mouse Logitech | 10 | 1.500.000 | 35% |
| 05/01/2026 | F001-003 | Pedro | Comercial López | Teclado Logitech | 5 | 1.100.000 | 30% |
| 08/01/2026 | F001-004 | Juan | Supermercado Central | Monitor Samsung 24" | 3 | 5.400.000 | 25% |
| 10/01/2026 | F001-005 | María | Comercial López | Notebook Lenovo | 1 | 5.200.000 | 20% |
| 12/01/2026 | F001-006 | Pedro | Farmacia San José | Impresora Epson | 2 | 3.600.000 | 28% |
| 15/01/2026 | F001-007 | Juan | Librería Norte | Auriculares Sony | 6 | 2.700.000 | 32% |
| 18/01/2026 | F001-008 | María | Distribuidora Guaraní | Disco SSD 1TB | 4 | 3.200.000 | 26% |
| 22/01/2026 | F001-009 | Pedro | Supermercado Central | Silla Ergonómica | 3 | 4.500.000 | 24% |
| 26/01/2026 | F001-010 | Juan | Comercial López | Proyector Epson | 1 | 6.800.000 | 21% |
Página de detalle
- Ventas del vendedor
- Clientes atendidos
- Productos vendidos
- Evolución mensual
- Top clientes y productos
07 · Dashboard Dinámico con Parámetros de Campos
Empresa: Empresa Comercial PY S.A. · Nivel: Avanzado
Excel: matriz_dinamica_comercial.xlsx
| Fecha | Vendedor | Categoría | Ciudad | Cantidad | Ventas (₲) | Costo (₲) | Margen (₲) |
|---|---|---|---|---|---|---|---|
| 05/01/2026 | Juan | Informática | Asunción | 2 | 9.000.000 | 7.020.000 | 1.980.000 |
| 07/01/2026 | María | Accesorios | Fernando de la Mora | 10 | 1.500.000 | 975.000 | 525.000 |
| 10/01/2026 | Pedro | Accesorios | San Lorenzo | 5 | 1.100.000 | 770.000 | 330.000 |
| 12/01/2026 | Juan | Informática | Asunción | 3 | 5.400.000 | 4.050.000 | 1.350.000 |
| 14/01/2026 | María | Informática | Ciudad del Este | 1 | 5.200.000 | 4.160.000 | 1.040.000 |
| 16/01/2026 | Pedro | Oficina | Luque | 2 | 3.600.000 | 2.592.000 | 1.008.000 |
| 19/01/2026 | Juan | Accesorios | Asunción | 6 | 2.700.000 | 1.836.000 | 864.000 |
| 21/01/2026 | María | Componentes | Encarnación | 4 | 3.200.000 | 2.368.000 | 832.000 |
| 24/01/2026 | Pedro | Oficina | Asunción | 3 | 4.500.000 | 3.420.000 | 1.080.000 |
| 28/01/2026 | Juan | Oficina | San Lorenzo | 1 | 6.800.000 | 5.372.000 | 1.428.000 |
| Selector | Opciones |
|---|---|
| Métrica | Ventas · Cantidad · Margen · Ticket promedio |
| Analizar por | Producto · Categoría · Vendedor · Ciudad |
08 · Dashboard de Evolución Temporal
Empresa: Distribuidora Salem · Nivel: Avanzado
Excel: evolucion_historica_ventas.xlsx
| Mes | Período | Ventas 2025 (₲) | Ventas 2026 (₲) | Crecimiento (₲) | Crecimiento % |
|---|---|---|---|---|---|
| Enero | 2025 vs 2026 | 75.000.000 | 88.500.000 | +13.500.000 | +18,0% |
| Febrero | 2025 vs 2026 | 68.000.000 | 81.200.000 | +13.200.000 | +19,4% |
| Marzo | 2025 vs 2026 | 82.000.000 | 95.000.000 | +13.000.000 | +15,9% |
| Abril | 2025 vs 2026 | 71.500.000 | 84.600.000 | +13.100.000 | +18,3% |
| Mayo | 2025 vs 2026 | 90.000.000 | 106.500.000 | +16.500.000 | +18,3% |
| Junio | 2025 vs 2026 | 85.000.000 | 99.800.000 | +14.800.000 | +17,4% |
| Julio | 2025 vs 2026 | 78.000.000 | 92.400.000 | +14.400.000 | +18,5% |
| Agosto | 2025 vs 2026 | 88.000.000 | 104.200.000 | +16.200.000 | +18,4% |
| Septiembre | 2025 vs 2026 | 92.500.000 | 110.000.000 | +17.500.000 | +18,9% |
| Octubre | 2025 vs 2026 | 96.000.000 | 115.000.000 | +19.000.000 | +19,8% |
Ventas Año Anterior = CALCULATE([Ventas Totales], SAMEPERIODLASTYEAR(Calendario[Fecha])) Crecimiento % = DIVIDE([Ventas Totales]-[Ventas Año Anterior], [Ventas Año Anterior])
09 · Dashboard Geográfico
Empresa: Distribuidora Nacional PY · Nivel: Avanzado
Excel: distribucion_geografica_py.xlsx
| Cliente | Departamento | Ciudad | Ventas (₲) | Meta (₲) | Puntos de Venta |
|---|---|---|---|---|---|
| Supermercado Central | Central | San Lorenzo | 45.000.000 | 40.000.000 | 4 |
| Comercial El Sol | Capital | Asunción | 62.000.000 | 55.000.000 | 6 |
| Distribuidora del Este | Alto Paraná | Ciudad del Este | 78.500.000 | 70.000.000 | 5 |
| Comercial Sur | Itapúa | Encarnación | 38.000.000 | 35.000.000 | 3 |
| Farmacia San José | Central | Luque | 29.500.000 | 28.000.000 | 2 |
| Comercial Norte | Concepción | Concepción | 22.000.000 | 25.000.000 | 2 |
| Agroquímica Chaco | Boquerón | Filadelfia | 31.000.000 | 30.000.000 | 1 |
| Casa de la Música | Caaguazú | Coronel Oviedo | 19.800.000 | 20.000.000 | 2 |
| Librería del Centro | Cordillera | Caacupé | 15.400.000 | 15.000.000 | 1 |
| Importadora Misiones | Misiones | San Juan Bautista | 18.200.000 | 17.500.000 | 1 |
10 · Proyecto Integrador — Dashboard Empresarial
Nivel: Avanzado · Excel: clientes.xlsx, productos.xlsx, ventas.xlsx, vendedores.xlsx, stock.xlsx
Excel: proyecto_integrador_empresarial.xlsx
| ID | Sucursal | Departamento | Unidades | Ventas (₲) | Costo (₲) | Utilidad (₲) | Margen % | Cumplimiento |
|---|---|---|---|---|---|---|---|---|
| S01 | Sucursal Central | Capital | 1.450 | 185.000.000 | 135.000.000 | 50.000.000 | 27,0% | 🟢 105% |
| S02 | Sucursal San Lorenzo | Central | 1.120 | 142.000.000 | 103.600.000 | 38.400.000 | 27,0% | 🟢 101% |
| S03 | Sucursal CDE | Alto Paraná | 1.680 | 215.000.000 | 154.800.000 | 60.200.000 | 28,0% | 🟢 108% |
| S04 | Sucursal Encarnación | Itapúa | 890 | 112.000.000 | 82.880.000 | 29.120.000 | 26,0% | 🟡 95% |
| S05 | Sucursal Luque | Central | 940 | 118.000.000 | 86.140.000 | 31.860.000 | 27,0% | 🟢 102% |
| S06 | Sucursal Coronel Oviedo | Caaguazú | 650 | 78.000.000 | 57.720.000 | 20.280.000 | 26,0% | 🟡 92% |
| S07 | Sucursal Pedro Juan | Amambay | 810 | 98.000.000 | 71.540.000 | 26.460.000 | 27,0% | 🟢 100% |
| S08 | Sucursal Concepción | Concepción | 540 | 64.000.000 | 48.000.000 | 16.000.000 | 25,0% | 🔴 88% |
| S09 | Sucursal Pilar | Ñeembucú | 420 | 51.000.000 | 38.250.000 | 12.750.000 | 25,0% | 🔴 85% |
| S10 | Sucursal Filadelfia | Boquerón | 730 | 89.000.000 | 64.970.000 | 24.030.000 | 27,0% | 🟢 104% |
| Página | Contenido |
|---|---|
| Gerencia | Ventas, meta, crecimiento, margen y KPIs |
| Ventas | Productos, categorías, vendedores y clientes |
| Inventario | Stock, críticos y rotación |
| Geografía | Departamentos, ciudades y clientes |
| Detalle | Drill-through y tooltips |
4. Modelado de datos
Ahora agregaremos una segunda tabla con los segmentos de Microsoft.
| Segmento | 2024 | 2025 |
|---|---|---|
| Productivity and Business Processes | 106.820 | 120.810 |
| Intelligent Cloud | 87.464 | 106.265 |
| More Personal Computing | 50.838 | 54.649 |
Fuente: Microsoft Annual Report 2025, información por segmentos.
Construye una tabla Año y una tabla Segmentos. Identifica qué campo puede servir para relacionarlas y crea un gráfico que compare 2024 y 2025.
5. DAX inicial
Una medida permite realizar cálculos que responden al contexto de filtros del informe.
Ingresos Totales = SUM(Microsoft[Ingresos]) Resultado Neto = SUM(Microsoft[Resultado Neto]) Margen Neto = DIVIDE([Resultado Neto], [Ingresos Totales])
- Crea las tres medidas anteriores.
- Agrega una tarjeta para cada indicador.
- Formatea Margen Neto como porcentaje.
- Agrega un segmentador por año.
- Comprueba qué sucede al seleccionar 2024 y luego 2025.
6. Visualizaciones y dashboard
Ingresos 2025.
Ingresos 2023–2025.
Ingresos por segmento.
Construye una página que permita a un gerente responder:
- ¿Cuánto ingresó Microsoft en 2025?
- ¿Cómo evolucionaron los ingresos?
- ¿Cuál segmento tuvo mayor ingreso?
- ¿Cuál fue el resultado neto?
Incluye 3 tarjetas, 2 gráficos y un segmentador.
Proyecto final — Microsoft Corporation
- Preparar los datos en Excel.
- Importarlos a Power BI.
- Limpiarlos con Power Query.
- Crear el modelo.
- Crear medidas DAX.
- Construir el dashboard.
- Presentar 3 conclusiones empresariales basadas en los datos.
BASES DE DATOS · NIVEL 1
MySQL + HeidiSQL
Manual práctico para aprender bases de datos desde cero: conceptos fundamentales, lenguaje SQL, diseño de tablas, relaciones de integridad, consultas avanzadas con JOIN y un proyecto comercial completo listo para conectar con Power BI.
01 · ¿Qué es una base de datos?
Una base de datos es un sistema organizado para almacenar información de manera estructurada, segura y eficiente, permitiendo que los datos puedan ser consultados, modificados y relacionados entre sí en tiempo real.
Estructura bidimensional de filas y columnas que almacena un conjunto de datos homogéneo (ej. Clientes, Productos).
Representa una entidad o transacción individual con todos sus atributos específicos.
Representa una característica o atributo particular de la entidad con un tipo de dato definido.
02 · ¿Qué es MySQL?
MySQL es el sistema gestor de bases de datos relacionales (RDBMS) de código abierto más popular del mundo empresarial y web.
- Crear bases de datos y esquemas de tablas optimizados.
- Insertar grandes volúmenes de información empresarial.
- Consultar (SELECT), actualizar (UPDATE) y eliminar (DELETE) registros con filtros precisos.
- Definir claves primarias (PK) y foráneas (FK) para relacionar tablas.
- Crear vistas analíticas, procedimientos almacenados y triggers.
03 · ¿Qué es HeidiSQL?
HeidiSQL es un cliente gráfico ligero y potente para administrar servidores MySQL/MariaDB de forma visual, intuitiva y rápida.
04 · Ejercicio 01 — Crear nuestra primera base
El primer paso consiste en crear el contenedor lógico donde residirán todas nuestras tablas de negocio.
CREATE DATABASE comercial_py; USE comercial_py;
comercial_py.
- Servidor: La máquina o proceso que corre el motor MySQL.
- Base de datos: El contenedor con el conjunto de tablas de un sistema.
- Tabla: La entidad estructurada (ej. clientes).
05 · Ejercicio 02 — Tabla Clientes
Definición de la estructura de clientes con tipos de datos estándar y clave primaria autoincremental.
CREATE TABLE clientes (
id_cliente INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
apellido VARCHAR(100) NOT NULL,
telefono VARCHAR(30),
email VARCHAR(150),
ciudad VARCHAR(100),
fecha_registro DATE
);
Conceptos de tipos y restricciones en SQL
06 · Ejercicio 03 — Inserción de Datos (INSERT)
Poblamos la tabla con clientes de prueba de diversas ciudades del Paraguay.
INSERT INTO clientes
(nombre, apellido, telefono, email, ciudad, fecha_registro)
VALUES
('Carlos', 'Benítez', '0981123456', 'carlos@gmail.com', 'Asunción', '2026-01-10'),
('María', 'González', '0982123456', 'maria@gmail.com', 'Luque', '2026-01-12'),
('Pedro', 'López', '0983123456', 'pedro@gmail.com', 'San Lorenzo', '2026-01-15'),
('Ana', 'Torres', '0984123456', 'ana@gmail.com', 'Itauguá', '2026-01-20');
07 · Ejercicio 04 — Consultas de Datos (SELECT & WHERE)
Aprender a extraer y filtrar información específica según condiciones de negocio.
-- 1. Consultar todos los campos de todos los clientes SELECT * FROM clientes; -- 2. Consultar solo columnas de contacto SELECT nombre, apellido, ciudad, telefono FROM clientes; -- 3. Filtrar clientes por ciudad específica SELECT * FROM clientes WHERE ciudad = 'Luque'; -- 4. Filtrar por fecha de registro SELECT * FROM clientes WHERE fecha_registro >= '2026-01-15';
- Listar todos los clientes que residan en Asunción o Itauguá.
- Obtener nombre completo y teléfono de clientes ordenados alfabéticamente por apellido.
08 · Ejercicio 05 — Tabla Productos
Definimos el catálogo de artículos con control de precios en guaraníes, stock físico y estado.
CREATE TABLE productos (
id_producto INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(150) NOT NULL,
categoria VARCHAR(100),
precio DECIMAL(12,2) NOT NULL,
stock INT DEFAULT 0,
estado VARCHAR(20) DEFAULT 'ACTIVO'
);
INSERT INTO productos
(nombre, categoria, precio, stock, estado)
VALUES
('Notebook HP 15', 'Informática', 4500000, 10, 'ACTIVO'),
('Notebook Lenovo', 'Informática', 5200000, 8, 'ACTIVO'),
('Mouse Logitech', 'Accesorios', 150000, 50, 'ACTIVO'),
('Teclado Logitech', 'Accesorios', 220000, 30, 'ACTIVO'),
('Monitor Samsung 24', 'Monitores', 1800000, 15, 'ACTIVO');
09 · Ejercicio 06 — Ordenamiento y Rangos (ORDER BY & Filtros)
Clasificación de productos por precios, categorías y disponibilidad de inventario.
-- Productos ordenados del más caro al más económico SELECT * FROM productos ORDER BY precio DESC; -- Artículos de gama alta con precio superior a ₲ 1.000.000 SELECT * FROM productos WHERE precio > 1000000 ORDER BY precio DESC; -- Productos con bajo stock crítico (menor a 10 unidades) SELECT nombre, stock, precio FROM productos WHERE stock < 10;
- Obtener el producto más costoso y el más económico del inventario.
- Listar todos los productos pertenecientes a la categoría 'Informática' con stock disponible.
- Filtrar productos con precio comprendido entre ₲ 500.000 y ₲ 3.000.000.
10 · Ejercicio 07 — Actualización de Datos (UPDATE)
Modificación segura de registros existentes en la base de datos.
-- Actualizar precio del producto 1 UPDATE productos SET precio = 4700000 WHERE id_producto = 1; -- Incrementar el stock tras recibir un lote de 10 unidades UPDATE productos SET stock = stock + 10 WHERE id_producto = 1;
UPDATE sin la cláusula WHERE modificará todos los registros de la tabla irremediablemente.
-- ¡PELIGROSO! Modifica toda la tabla UPDATE productos SET precio = 500000; -- SEGURO: Afecta únicamente al registro deseado UPDATE productos SET precio = 500000 WHERE id_producto = 3;
11 · Ejercicio 08 — Eliminación Controlada (DELETE)
Procedimiento profesional para eliminar registros sin riesgos de pérdida accidental.
-- Paso 1: Verificar primero qué registro coincide con el criterio SELECT * FROM productos WHERE id_producto = 5; -- Paso 2: Ejecutar la eliminación con exactamente el mismo WHERE DELETE FROM productos WHERE id_producto = 5;
estado = 'INACTIVO' en lugar de borrar la fila física.
12 · Ejercicio 09 — Modelo Relacional (1 a N y Claves Foráneas)
Estructuración del circuito de ventas mediante cabecera y detalle para garantizar integridad referencial.
Tabla de Cabecera: Ventas
CREATE TABLE ventas (
id_venta INT AUTO_INCREMENT PRIMARY KEY,
id_cliente INT NOT NULL,
fecha DATETIME NOT NULL,
total DECIMAL(12,2) DEFAULT 0,
FOREIGN KEY (id_cliente)
REFERENCES clientes(id_cliente)
);
Tabla de Detalle: Detalle_Venta
CREATE TABLE detalle_venta (
id_detalle INT AUTO_INCREMENT PRIMARY KEY,
id_venta INT NOT NULL,
id_producto INT NOT NULL,
cantidad INT NOT NULL,
precio DECIMAL(12,2) NOT NULL,
FOREIGN KEY (id_venta) REFERENCES ventas(id_venta),
FOREIGN KEY (id_producto) REFERENCES productos(id_producto)
);
13 · Ejercicio 10 — Consultas Relacionales con INNER JOIN
Combinación de múltiples tablas en una sola vista analítica consolidada.
-- 1. Unir ventas con clientes
SELECT
v.id_venta,
v.fecha,
c.nombre,
c.apellido,
v.total
FROM ventas v
INNER JOIN clientes c
ON c.id_cliente = v.id_cliente;
Consulta Multitabla Completa (Ventas + Clientes + Detalle + Productos)
SELECT
v.id_venta,
v.fecha,
CONCAT(c.nombre, ' ', c.apellido) AS cliente,
p.nombre AS producto,
d.cantidad,
d.precio,
(d.cantidad * d.precio) AS subtotal_linea
FROM ventas v
INNER JOIN clientes c
ON c.id_cliente = v.id_cliente
INNER JOIN detalle_venta d
ON d.id_venta = v.id_venta
INNER JOIN productos p
ON p.id_producto = d.id_producto
ORDER BY v.fecha DESC;
SUM(d.cantidad * d.precio) y GROUP BY p.nombre.
14 · Proyecto Final — Comercial PY
comercial_py para que funcione como origen de datos en proyectos de PHP y dashboards de Power BI.
COMERCIAL_PY
│
┌────────────┼────────────┐
│ │ │
CLIENTES PRODUCTOS USUARIOS
│ │
└────── VENTAS ──────────┐
│ │
▼ │
DETALLE_VENTA ◄───┘
Preguntas de Negocio que debe responder el alumno con SQL y Power BI:
- ¿Cuánto facturó la empresa en el período?
- ¿Cuál es el producto líder en ventas por unidades y por ingresos?
- ¿Qué cliente representa el mayor volumen de compras?
- ¿Qué productos se encuentran en stock crítico de reposición?
- ¿Cuál es el ticket promedio por transacción?
INTEGRACIÓN · MYSQL + POWER BI
De la Base de Datos al Dashboard
Aprende a conectar la base comercial_py creada en MySQL/HeidiSQL con Power BI Desktop, transformar los datos con Power Query, construir el modelo relacional, crear medidas DAX y publicar con On-premises data gateway.
01 · La unión completa de arquitectura
En este módulo aprenderás el flujo técnico de extremo a extremo: cómo los datos transaccionales de MySQL viajan hacia el motor analítico de Power BI.
Almacena de forma persistente y segura las tablas transaccionales de clientes, productos y ventas.
Se conecta vía TCP/IP, valida tipos de datos, limpia registros y prepara el esquema analítico.
Modela relaciones 1 a N, calcula métricas con DAX y diseña visualizaciones interactivas de negocio.
02 · Requisitos antes de comenzar
- Power BI Desktop instalado y actualizado en Windows.
- Servidor MySQL (XAMPP o standalone) iniciado y escuchando en el puerto 3306.
- Base de datos
comercial_pycreada y con datos cargados en sus tablas. - Usuario y contraseña de MySQL con permisos de lectura (SELECT).
- Conector oficial Oracle MySQL Connector/NET instalado en el equipo.
03 · Instalar el conector de MySQL (Connector/NET)
Power BI incluye Base de datos MySQL entre sus orígenes nativos. Para habilitar la comunicación de bajo nivel, se requiere el paquete oficial de Oracle.
- Descargar e instalar el paquete MSI de MySQL Connector/NET.
- Cerrar completamente Power BI Desktop si estaba abierto.
- Volver a abrir Power BI Desktop para que reconozca los ensamblados del proveedor.
04 · Paso 1 — Obtener datos desde MySQL
Obtener datos
05 · Paso 2 — Indicar Servidor y Base de Datos
Ingresa los parámetros de conexión correspondientes a tu entorno:
| Parámetro | Valor Local (XAMPP) | Servidor Remoto |
|---|---|---|
| Servidor | localhost o 127.0.0.1:3306 | IP_SERVIDOR:PUERTO |
| Base de datos | comercial_py | comercial_py |
| Modo de conectividad | Importar (Recomendado) | DirectQuery (Opcional) |
Base de datos MySQL
06 · Paso 3 — Autenticación y Credenciales
Power BI solicitará el método de autenticación. Selecciona la pestaña Base de datos e ingresa tus credenciales de MySQL:
root (por defecto en XAMPP) o tu usuario creado con permisos.
En blanco (por defecto en XAMPP) o la clave configurada en el servidor.
Seleccionar el nivel del servidor (ej. localhost:3306) y hacer clic en Conectar.
07 · Paso 4 — Selección de Tablas en el Navegador
El Navegador listará todas las tablas disponibles en el esquema comercial_py:
| Tabla | Rol en el Modelo | Campos Principales |
|---|---|---|
| clientes | Dimensión de Clientes | id_cliente, nombre, apellido, ciudad, email |
| productos | Dimensión de Productos | id_producto, nombre, categoria, precio, stock |
| ventas | Tabla de Hechos (Cabecera) | id_venta, id_cliente, fecha, total |
| detalle_venta | Tabla de Hechos (Líneas) | id_detalle, id_venta, id_producto, cantidad, precio |
08 · Paso 5 — Transformación y Limpieza con Power Query
Antes del modelado, revisamos y optimizamos las consultas importadas de MySQL:
- Tipos de Datos: Asegurar que
fechasea tipo Fecha/Hora,precioytotalsean Número decimal fijo (Moneda), ycantidadsea Número entero. - Columna Cliente Completo: Crear una columna personalizada o combinada
[nombre] & " " & [apellido]. - Eliminar columnas innecesarias: Quitar campos de auditoría técnica que no aporten valor analítico.
- Cerrar y aplicar: Hacer clic en Cerrar y aplicar para cargar los datos en el modelo tabular VertiPaq.
09 · Paso 6 — Creación del Modelo Relacional
En la Vista de Modelo de Power BI, verifica y configura las relaciones 1 a N entre las tablas:
┌──────────────┐ ┌──────────────┐
│ CLIENTES │ │ PRODUCTOS │
│ (id_cliente) │ │(id_producto) │
└──────┬───────┘ └──────┬───────┘
│ 1 │ 1
│ │
│ * │ *
┌──────┴───────┐ ┌──────┴───────┐
│ VENTAS │ 1 * │DETALLE_VENTA │
│ (id_venta) ├──────────────────┤ (id_detalle) │
└──────────────┘ └──────────────┘
Medidas DAX Fundamentales
Total Ventas =
SUM(ventas[total])
Cantidad Transacciones =
COUNTROWS(ventas)
Unidades Vendidas =
SUM(detalle_venta[cantidad])
Ticket Promedio =
DIVIDE([Total Ventas], [Cantidad Transacciones], 0)
Margen Estimado =
SUMX(
detalle_venta,
detalle_venta[cantidad] * (detalle_venta[precio] * 0.25)
)
10 · Paso 7 — Construcción del Dashboard en Power BI
Diseñamos los objetos visuales para componer un reporte ejecutivo completo:
Total Ventas (₲), Cantidad de Facturas, Unidades y Ticket Promedio.
Ranking de Ventas por Categoría y Top Productos más vendidos.
Evolución de ventas en el tiempo (por Día o Mes).
Filtros interactivos por Ciudad de cliente, Categoría y Rango de Fechas.
Matriz de ventas con cliente, fecha, producto, cantidad e importe.
Gráfico de columnas con existencias actuales vs stock mínimo.
11 · Ejercicio Práctico — Caso Comercial PY
- Verificar datos en HeidiSQL ejecutando un
SELECT * FROM ventas;. - Conectar Power BI Desktop a
localhost:3306 / comercial_py. - Cargar las 4 tablas e implementar las medidas DAX solicitadas.
- Construir la página Resumen Ejecutivo con KPIs y gráficos de distribución.
- Construir la página Detalle Operativo con matriz de transacciones y filtros por cliente y ciudad.
12 · ¿Qué pasa cuando cambia MySQL? (Actualización / Refresh)
Cuando el sistema transaccional registra una nueva venta en MySQL mediante un INSERT:
INSERT INTO ventas (id_cliente, fecha, total) VALUES (2, NOW(), 3250000);
13 · Del PC Local a Power BI Service (On-premises Data Gateway)
Para publicar el informe en la nube (app.powerbi.com) y programar actualizaciones automáticas sin intervención manual:
MYSQL LOCAL (XAMPP / Servidor On-Premise)
│
▼
ON-PREMISES DATA GATEWAY (Modo Estándar)
│ (Túnel HTTPS Seguro Saliente)
▼
POWER BI SERVICE (Nube Microsoft 365)
│
▼
ACTUALIZACIÓN PROGRAMADA (Ej. Diario a las 08:00 hs)
│
▼
DASHBOARD WEB / MOBILE PARA LA GERENCIA
- Instalar On-premises data gateway (Modo Estándar) en la máquina donde reside MySQL o en la red local.
- Instalar MySQL Connector/NET en la misma máquina donde corre el Gateway.
- Configurar el origen de datos en Administrar puertas de enlace asegurando coincidencia exacta de nombre de servidor y base.
14 · Solución de Problemas Frecuentes (Troubleshooting)
| Error / Síntoma | Causa Probable | Solución Recomendada |
|---|---|---|
| No aparece el conector de MySQL | Versión antigua de Power BI Desktop. | Actualizar Power BI Desktop a la última versión disponible desde la Microsoft Store o sitio oficial. |
| Error de proveedor / Ensamblado no encontrado | Falta instalar Oracle MySQL Connector/NET. | Descargar e instalar MySQL Connector/NET MSI, reiniciar Power BI Desktop. |
| No conecta a localhost (Error de conexión) | MySQL no está iniciado o puerto bloqueado. | Verificar XAMPP (MySQL en verde) y que no haya firewalls bloqueando el puerto 3306. |
| Access denied for user 'root'@'localhost' | Usuario o contraseña incorrectos. | Comprobar credenciales de acceso probando primero la conexión en HeidiSQL. |
| Error al actualizar en Power BI Service | Falta Gateway o desajuste de credenciales. | Configurar Gateway estándar con Connector/NET y validar credenciales en la nube. |
15 · Criterios de Evaluación del Módulo
Configuración correcta y conexión exitosa entre MySQL y Power BI Desktop.
Definición de claves, relaciones 1:N y tipos de datos limpios en Power Query.
Construcción de medidas analíticas, tarjetas KPI, gráficos interactivos y segmentadores.
Capacidad de explicar el flujo de actualización y responder preguntas gerenciales con los datos.
PROYECTOS PRÁCTICOS
10 Ejercicios de MySQL + Power BI
Crear una base de datos, trabajarla con HeidiSQL, conectarla a Power BI y construir un dashboard para cada escenario empresarial.
Ruta de trabajo
Crear base, tablas, claves y relaciones.
Cargar, revisar y consultar datos.
Transformar, modelar, calcular y visualizar.
Tienda informática
Base de datos: ventas_informatica
1. Crear la base de datos
CREATE DATABASE ventas_informatica; USE ventas_informatica; CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100) NOT NULL, ciudad VARCHAR(80) ); CREATE TABLE productos ( id_producto INT AUTO_INCREMENT PRIMARY KEY, producto VARCHAR(120) NOT NULL, categoria VARCHAR(80), precio DECIMAL(12,2), stock INT ); CREATE TABLE ventas ( id_venta INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, id_producto INT, fecha DATE, cantidad INT, total DECIMAL(12,2), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente), FOREIGN KEY (id_producto) REFERENCES productos(id_producto) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
ventas_informatica. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Total de ventas
- Unidades vendidas
- Ventas por categoría
- Ventas por ciudad
- Top 5 productos
- KPI
- Barras
- Línea temporal
- Segmentadores
- Tabla detallada
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Distribuidora — inventario
Base de datos: inventario_distribuidora
1. Crear la base de datos
CREATE DATABASE inventario_distribuidora; USE inventario_distribuidora; CREATE TABLE categorias ( id_categoria INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(80) NOT NULL ); CREATE TABLE productos ( id_producto INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120) NOT NULL, id_categoria INT, costo DECIMAL(12,2), precio DECIMAL(12,2), stock INT, stock_minimo INT, FOREIGN KEY (id_categoria) REFERENCES categorias(id_categoria) ); CREATE TABLE movimientos ( id_movimiento INT AUTO_INCREMENT PRIMARY KEY, id_producto INT, fecha DATE, tipo VARCHAR(20), cantidad INT, FOREIGN KEY (id_producto) REFERENCES productos(id_producto) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
inventario_distribuidora. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Valor del stock
- Productos con stock bajo
- Entradas vs salidas
- Stock por categoría
- Productos sin movimiento
- KPI
- Formato condicional
- Columnas
- Barras
- Segmentador
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Restaurante — pedidos
Base de datos: restaurante
1. Crear la base de datos
CREATE DATABASE restaurante; USE restaurante; CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120) ); CREATE TABLE platos ( id_plato INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), categoria VARCHAR(80), precio DECIMAL(10,2) ); CREATE TABLE pedidos ( id_pedido INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, fecha DATETIME, forma_pago VARCHAR(40), total DECIMAL(10,2), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ); CREATE TABLE detalle_pedido ( id_detalle INT AUTO_INCREMENT PRIMARY KEY, id_pedido INT, id_plato INT, cantidad INT, subtotal DECIMAL(10,2), FOREIGN KEY (id_pedido) REFERENCES pedidos(id_pedido), FOREIGN KEY (id_plato) REFERENCES platos(id_plato) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
restaurante. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Facturación total
- Pedidos
- Ticket promedio
- Platos más vendidos
- Ventas por forma de pago
- Tarjetas
- Línea
- Top 10
- Donut
- Filtro de fecha
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Taller mecánico
Base de datos: taller_mecanico
1. Crear la base de datos
CREATE DATABASE taller_mecanico; USE taller_mecanico; CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100), telefono VARCHAR(30) ); CREATE TABLE vehiculos ( id_vehiculo INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, marca VARCHAR(60), modelo VARCHAR(60), anio INT, FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ); CREATE TABLE servicios ( id_servicio INT AUTO_INCREMENT PRIMARY KEY, descripcion VARCHAR(150), precio DECIMAL(12,2) ); CREATE TABLE ordenes ( id_orden INT AUTO_INCREMENT PRIMARY KEY, id_vehiculo INT, id_servicio INT, fecha DATE, estado VARCHAR(30), total DECIMAL(12,2), FOREIGN KEY (id_vehiculo) REFERENCES vehiculos(id_vehiculo), FOREIGN KEY (id_servicio) REFERENCES servicios(id_servicio) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
taller_mecanico. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Ingresos
- Órdenes abiertas
- Órdenes terminadas
- Servicios más solicitados
- Ingresos mensuales
- KPI
- Embudo
- Barras
- Línea
- Tabla
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Clínica — turnos
Base de datos: clinica_turnos
1. Crear la base de datos
CREATE DATABASE clinica_turnos; USE clinica_turnos; CREATE TABLE pacientes ( id_paciente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), ciudad VARCHAR(80) ); CREATE TABLE profesionales ( id_profesional INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), especialidad VARCHAR(100) ); CREATE TABLE turnos ( id_turno INT AUTO_INCREMENT PRIMARY KEY, id_paciente INT, id_profesional INT, fecha DATE, estado VARCHAR(30), importe DECIMAL(10,2), FOREIGN KEY (id_paciente) REFERENCES pacientes(id_paciente), FOREIGN KEY (id_profesional) REFERENCES profesionales(id_profesional) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
clinica_turnos. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Turnos totales
- Turnos atendidos
- Cancelaciones
- Ingresos por especialidad
- Profesionales con más turnos
- KPI
- Donut
- Barras
- Ranking
- Línea
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Hotel — reservas
Base de datos: hotel_reservas
1. Crear la base de datos
CREATE DATABASE hotel_reservas; USE hotel_reservas; CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), pais VARCHAR(80) ); CREATE TABLE habitaciones ( id_habitacion INT AUTO_INCREMENT PRIMARY KEY, numero VARCHAR(10), tipo VARCHAR(60), tarifa DECIMAL(10,2) ); CREATE TABLE reservas ( id_reserva INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, id_habitacion INT, entrada DATE, salida DATE, estado VARCHAR(30), total DECIMAL(12,2), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente), FOREIGN KEY (id_habitacion) REFERENCES habitaciones(id_habitacion) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
hotel_reservas. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Ingresos
- Habitaciones ocupadas
- Noches vendidas
- Ocupación por tipo
- Ingresos mensuales
- KPI
- Barras
- Línea
- Matriz
- Segmentador
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Logística — entregas
Base de datos: logistica_entregas
1. Crear la base de datos
CREATE DATABASE logistica_entregas; USE logistica_entregas; CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), ciudad VARCHAR(80) ); CREATE TABLE envios ( id_envio INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, fecha DATE, origen VARCHAR(80), destino VARCHAR(80), estado VARCHAR(30), costo DECIMAL(12,2), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ); CREATE TABLE repartidores ( id_repartidor INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120) ); CREATE TABLE entregas ( id_entrega INT AUTO_INCREMENT PRIMARY KEY, id_envio INT, id_repartidor INT, fecha_entrega DATE, estado VARCHAR(30), FOREIGN KEY (id_envio) REFERENCES envios(id_envio), FOREIGN KEY (id_repartidor) REFERENCES repartidores(id_repartidor) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
logistica_entregas. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Cantidad de envíos
- Costo total
- Entregas exitosas
- Envíos por destino
- Rendimiento por repartidor
- KPI
- Barras
- Donut
- Ranking
- Línea
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Recursos humanos
Base de datos: rrhh_empresa
1. Crear la base de datos
CREATE DATABASE rrhh_empresa; USE rrhh_empresa; CREATE TABLE departamentos ( id_departamento INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100) ); CREATE TABLE empleados ( id_empleado INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), id_departamento INT, cargo VARCHAR(100), salario DECIMAL(12,2), fecha_ingreso DATE, estado VARCHAR(30), FOREIGN KEY (id_departamento) REFERENCES departamentos(id_departamento) ); CREATE TABLE asistencias ( id_asistencia INT AUTO_INCREMENT PRIMARY KEY, id_empleado INT, fecha DATE, estado VARCHAR(30), FOREIGN KEY (id_empleado) REFERENCES empleados(id_empleado) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
rrhh_empresa. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Empleados
- Masa salarial
- Empleados por departamento
- Ausencias
- Antigüedad promedio
- KPI
- Barras
- Matriz
- Línea
- Segmentador
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Academia — cursos
Base de datos: academia_cursos
1. Crear la base de datos
CREATE DATABASE academia_cursos; USE academia_cursos; CREATE TABLE alumnos ( id_alumno INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), ciudad VARCHAR(80) ); CREATE TABLE cursos ( id_curso INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), categoria VARCHAR(80), precio DECIMAL(10,2) ); CREATE TABLE matriculas ( id_matricula INT AUTO_INCREMENT PRIMARY KEY, id_alumno INT, id_curso INT, fecha DATE, estado VARCHAR(30), importe DECIMAL(10,2), FOREIGN KEY (id_alumno) REFERENCES alumnos(id_alumno), FOREIGN KEY (id_curso) REFERENCES cursos(id_curso) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
academia_cursos. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Ingresos
- Alumnos
- Cursos más vendidos
- Alumnos por ciudad
- Matrículas por mes
- KPI
- Barras
- Segmentador
- Línea
- Donut
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard
Comercio 360° — proyecto integrador
Base de datos: comercio_360
1. Crear la base de datos
CREATE DATABASE comercio_360; USE comercio_360; CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), ciudad VARCHAR(80) ); CREATE TABLE categorias ( id_categoria INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(80) ); CREATE TABLE productos ( id_producto INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(120), id_categoria INT, precio DECIMAL(12,2), costo DECIMAL(12,2), stock INT, FOREIGN KEY (id_categoria) REFERENCES categorias(id_categoria) ); CREATE TABLE ventas ( id_venta INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, fecha DATE, canal VARCHAR(40), total DECIMAL(12,2), FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ); CREATE TABLE detalle_venta ( id_detalle INT AUTO_INCREMENT PRIMARY KEY, id_venta INT, id_producto INT, cantidad INT, precio DECIMAL(12,2), FOREIGN KEY (id_venta) REFERENCES ventas(id_venta), FOREIGN KEY (id_producto) REFERENCES productos(id_producto) );
2. Cargar datos
Cargar como mínimo 20 registros en las tablas principales y suficientes movimientos para generar análisis. Utilizar nombres, ciudades y valores realistas de Paraguay.
3. Conectar con Power BI
- Power BI Desktop → Obtener datos → MySQL database.
- Servidor:
localhost:3306. - Seleccionar la base
comercio_360. - Ingresar las credenciales de MySQL.
- Seleccionar las tablas.
- Elegir Transformar datos y revisar Power Query.
- Cargar el modelo.
4. Medidas DAX
Total = SUM(Ventas[Total]) Cantidad = COUNTROWS(Ventas) Promedio = AVERAGE(Ventas[Total])
Adaptar nombres de tablas y columnas al ejercicio. En modelos con detalle de ventas, calcular los indicadores desde el nivel correcto para evitar duplicaciones.
5. Dashboard requerido
- Ventas totales
- Margen bruto
- Ticket promedio
- Ventas por canal
- Top productos
- Clientes principales
- Stock crítico
- Ventas mensuales
- KPI
- Barras
- Línea
- Donut
- Tabla
- Segmentadores
- Drill-through
- Filtro de fecha
- Segmentador principal
- Filtros cruzados
- Título del dashboard