# Crear un dashboard de datos con IA: de Excel o SQL

URL: https://agentvera.dev/es/blog/build-data-dashboard-with-ai/ · Publicado: 2026-10-11

Crea un dashboard de datos con IA: convierte datos de Excel, CSV o SQL en un panel en vivo con pandas y Streamlit, conecta en solo lectura, verifica cifras y compártelo.

**En resumen:**

- Pide al agente un informe de los datos antes de cualquier gráfico, aprueba tú las reglas de limpieza y guarda los cálculos en funciones separadas probadas con pytest.
- Conéctate a la base de datos con un usuario solo de SELECT, guarda la cadena de conexión en .env y envía al modelo el esquema o filas de ejemplo falsas, no datos reales de clientes.
- Comprueba a mano al menos 3 cifras principales: un JOIN sobre líneas de pedido puede multiplicar en silencio los totales, y los rangos de fechas, las zonas horarias y los reembolsos suelen explicar las diferencias.

**Para crear un dashboard de datos con IA, enseña tus datos a un agente de código y pídele que escriba el código de análisis:** lee tus datos de Excel, CSV o SQL con pandas, los limpia y resume, y los convierte en un dashboard interactivo de Streamlit en unas horas. Si el dashboard es parte de un producto, haces lo mismo con Next.js y una biblioteca de gráficos. Lo que requiere tu atención no es el código; es si las cifras son correctas y si los datos siguen siendo privados.

Este artículo va paso a paso desde una hoja de cálculo de ventas hasta un dashboard que puedes compartir: herramientas, el primer prompt, conexión de solo lectura a una base de datos, comprobación de las matemáticas de la IA y despliegue.

## Qué vamos a construir

El objetivo es sustituir un informe de Excel que actualizas a mano cada semana por un dashboard que se actualiza solo. Un dashboard de ventas típico tiene: un total del periodo, el cambio respecto al periodo anterior, un gráfico de ingresos mensuales, los productos principales, un desglose por región o canal y un filtro de fechas.

Lo haremos al estilo [vibe coding](/es/glossary/vibe-coding/): el agente escribe el código, tú describes lo que quieres ver y compruebas el resultado. En el trabajo con datos este enfoque tiene una condición: necesitas conocer tus datos lo bastante bien como para cuestionar las cifras que produce.

## ¿Qué camino: Streamlit o Next.js?

**El camino rápido: Python, pandas y Streamlit.** Un archivo de Python se convierte en una interfaz web funcional. Los filtros, tablas, gráficos y tarjetas de métricas llevan unas pocas líneas cada uno. Si necesitas un dashboard interno para ti, tu jefe o un equipo pequeño, es la ruta más corta. pandas lee Excel, CSV y SQL igual de bien.

**El camino de producto: Next.js y una biblioteca de gráficos.** Si los clientes van a ver el dashboard y necesitas inicio de sesión, permisos de datos por usuario y un diseño que encaje con tu marca, una app basada en React es mejor opción. Recharts, Chart.js y ECharts son opciones habituales. Los datos se consultan en el servidor, en una ruta de API, y al navegador solo llega el resumen que el usuario necesita.

Si dudas, empieza con Streamlit. Pasar a un producto es mucho más fácil cuando sabes qué gráficos usa la gente de verdad.

## Paso 1: configuración

Basta un [agente de código](/es/glossary/coding-agent/) de terminal (Claude Code, Codex, Gemini CLI, la CLI de Cursor, etc.) y Python:

```bash
mkdir sales-dashboard && cd sales-dashboard
git init
python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install pandas openpyxl streamlit plotly
mkdir data && cp ~/Downloads/sales_2026.xlsx data/
echo "data/" >> .gitignore
echo ".env" >> .gitignore
```

Mantengo `data/` fuera de git desde el principio; los datos de clientes no tienen sitio en el repositorio.

## Paso 2: conoce primero los datos

El error más común es decirle al agente «hazme un dashboard» de inmediato. Pídele que entienda primero los datos. Este primer turno no dibuja nada; solo informa:

```text
Read data/sales_2026.xlsx with pandas and write me a data report:
- Sheet names, row and column counts per sheet
- Each column’s type, share of empty values and 5 sample values
- Format of date and money columns (any comma decimals or mixed formats?)
- Duplicate rows and likely key columns (such as order ID)
- Anything that looks inconsistent
Don’t change any file and don’t draw charts. Save the report as analysis/data_report.md.
```

Lee ese informe. Hallazgos como «37 filas de la columna Amount llegaron como texto» o «el mismo ID de pedido aparece dos veces» afectan a todas las cifras posteriores. Tú decides cuáles son errores y cuáles son reales (reembolsos, pedidos divididos); no dejes que el agente corrija los datos adivinando.

## Paso 3: el prompt del dashboard

Cuando los datos estén limpios, pide el dashboard. Escribe las preguntas que debe responder; el agente puede sugerir los tipos de gráfico:

```text
Write app.py with Streamlit. Data: data/sales_2026.xlsx, sheet "Sales".

Put cleaning in its own function (load_data), cached with st.cache_data.
Refunds (Amount < 0) count towards revenue and are also shown as a separate metric.

The dashboard should answer:
1. Total revenue, order count and average order value for the selected date range
   (each with change versus the same period last year)
2. Monthly revenue trend (line chart)
3. Top 10 products by revenue (horizontal bar)
4. Revenue by region (bar) with a region filter

Rules:
- All calculations in metrics.py as pure functions.
- Write pytest tests for metrics.py using a small sample dataset with hand-calculated results.
- Format money with the right currency symbol and thousands separators.
When done, run the tests and tell me the streamlit run command.
```

Mantener los cálculos en un archivo aparte de funciones comprobables es lo más importante de este prompt. La interfaz es fácil de cambiar; una función de total incorrecta rompe todos los gráficos.

```bash
pytest -q
streamlit run app.py
```

Mira el dashboard en el navegador y luego pide pequeños cambios: «Las etiquetas de producto se cortan, hazlo horizontal». «Pon por defecto el filtro de fechas en este mes». Haz un commit tras cada cambio para poder dar marcha atrás.

## Paso 4: conéctate a la base de datos en solo lectura

Si los datos viven en la base de datos de tu app en lugar de en una hoja de cálculo, la regla clave es: **el usuario del dashboard solo puede leer.** Un usuario de PostgreSQL aparte:

```sql
CREATE ROLE dashboard_reader LOGIN PASSWORD 'a-strong-password-here';
GRANT CONNECT ON DATABASE app TO dashboard_reader;
GRANT USAGE ON SCHEMA public TO dashboard_reader;
GRANT SELECT ON orders, order_items, products TO dashboard_reader;
```

Pon la cadena de conexión en `.env` (`DATABASE_URL=...`) y dile al agente solo el nombre de la variable. Algunos puntos prácticos más:

- Concede acceso solo a las tablas que necesitas. Si la tabla de usuarios contiene correos y teléfonos y el dashboard no los necesita, no debería poder leerlos.
- Usa una réplica de lectura o una copia nocturna cuando puedas. Una consulta pesada que escriba el agente puede ralentizar el sistema en vivo.
- Fija un tiempo límite de consulta (`statement_timeout` en PostgreSQL) y limita el tamaño de los resultados.
- Pide al agente que mantenga el SQL en archivos `.sql` separados; así las consultas son más fáciles de leer y de ejecutar a mano.

## Paso 5: comprueba las cifras

Esta es la sección más importante. El fallo más peligroso de un dashboard no es que se caiga; es mostrar una cifra errónea en un gráfico convincente.

### Compara a mano los totales principales

Calcula 3 o 4 cifras clave de otra forma: una tabla dinámica en Excel o una consulta SQL sencilla que escribas tú. Los ingresos de marzo, por ejemplo:

```sql
SELECT SUM(total) FROM orders
WHERE created_at >= '2026-03-01' AND created_at < '2026-04-01'
  AND status <> 'cancelled';
```

Si el dashboard no coincide, no sigas hasta que puedas explicar la diferencia. La respuesta suele ser una de estas: ¿se incluyen las cancelaciones?, ¿dónde están los reembolsos?, ¿se incluyen los impuestos?, ¿qué zona horaria?

### El join erróneo silencioso

Este es el error de SQL que la IA comete con más frecuencia y el más difícil de detectar:

```sql
-- WRONG: each order is repeated once per line item
SELECT SUM(o.total)
FROM orders o
JOIN order_items i ON i.order_id = o.id;
```

Un pedido con tres artículos se convierte en tres filas y `o.total` se suma tres veces. La consulta se ejecuta bien, el resultado parece plausible y los ingresos quedan inflados. La solución es agregar al nivel correcto: o sumar solo sobre `orders`, o resumir primero los artículos por pedido y luego hacer el join. Para comprobarlo, pregunta al agente:

```text
For each JOIN in this query: is the row count after the join the same as the
row count of the main table before it? Show COUNT(*) and COUNT(DISTINCT o.id).
```

Si las dos cifras difieren, las filas se están multiplicando en algún punto.

### Otras trampas

- **Límites de fechas:** `BETWEEN '2026-03-01' AND '2026-03-31'` sobre una columna de marca de tiempo deja fuera casi todo el 31 de marzo. Usa un rango semiabierto.
- **Zonas horarias:** si la base de datos guarda UTC, los pedidos cercanos a medianoche caen en el día equivocado.
- **Promedios de promedios:** la media del valor medio de pedido de cada región no es el valor medio de pedido global.
- **Valores ausentes:** las filas con `NaN` desaparecen en silencio de algunas operaciones de pandas.

## Paso 6: comparte y despliega

- **Streamlit:** para uso interno, ejecútalo en un servidor o en un contenedor Docker detrás de la red de tu empresa o de una capa de inicio de sesión. Streamlit también tiene su propio servicio de alojamiento, pero no pongas un dashboard con datos de clientes en una URL pública; debes saber quién tiene acceso.
- **Next.js:** despliégalo en una plataforma como Vercel o en tu propio servidor. Comprueba la autenticación, y que cada usuario vea solo sus propios datos, en el servidor; filtrar solo en la interfaz no es seguridad.
- **Mantener los datos al día:** en los dashboards basados en hojas de cálculo, leer el archivo de una carpeta compartida o cargarlo en una base de datos con un pequeño script nocturno acaba con las actualizaciones manuales.

## Lo que la IA suele hacer mal

- **«Arreglar» datos adivinando:** rellenar huecos con cero, descartar fechas que no sabe interpretar. Haz que escriba explícitamente cada regla de limpieza y apruébalas.
- **Nombres de columna inventados:** sin ver el esquema inventa una columna como `customer_name`. Dale el esquema real.
- **Formatos de número:** leer `1.234,56` como 1,234. Pídele que muestre lado a lado los valores originales y los interpretados.
- **Graficarlo todo:** un dashboard de 15 gráficos es uno que nadie mira. Límitalo a las preguntas que importan.
- **«Lo verifiqué»:** un agente que prueba su propio código con su propia prueba puede cometer dos veces la misma suposición errónea. Comprueba tú mismo una cifra.

## Seguridad y privacidad

- **Los datos de conexión en `.env`**, con `.env` y `data/` fuera de git.
- **Nunca pegues una contraseña ni una cadena de conexión en el chat.** Da al agente el nombre de la variable.
- **No envíes datos reales de clientes al modelo.** El agente necesita el esquema y unas pocas filas de ejemplo para escribir código; anonimiza las muestras o genera otras falsas. El código procesa los datos en tu máquina, no el modelo. Tus obligaciones del RGPD (o de la KVKK) sobre datos personales no cambian.
- **Lee los comandos y el SQL que ejecuta el agente.** Ejecutar cualquier cosa con `DELETE`, `UPDATE` o `DROP` a través del usuario del dashboard debería ser imposible de todos modos; para eso está el usuario de solo lectura.
- **Sabe quién puede ver la URL del dashboard.** Compartir un enlace es compartir los datos.

## Hacerlo con AgentVera

Nada de lo anterior necesita una herramienta concreta. Yo hago este tipo de trabajo en [AgentVera](/es/download/) porque acorta algunos pasos con la base de datos:

- **Gestor de bases de datos.** El [gestor de bases de datos](/es/features/database-manager/) se conecta a PostgreSQL, MySQL/MariaDB y SQLite. Una conexión que marques como «read-only» también se abre en solo lectura en el lado del servidor. Puedes ejecutar tú mismo el SQL del agente en el editor SQL para comparar totales y usar EXPLAIN para detectar consultas pesadas.
- **Acceso controlado del agente.** Si activas el acceso de agentes para una conexión, los agentes compatibles con MCP ejecutan consultas mediante la herramienta agentvera-db; nunca ven la contraseña, el modo es de solo lectura por defecto y cada consulta se registra. El botón «AI» que convierte una petición en SQL envía nombres de tablas y columnas, no filas de las tablas.
- **DB Guard.** Si el agente escribe una migración de índice o vista para el dashboard, [DB Guard](/es/features/db-guard/) la analiza al final del turno y señala riesgos como construcciones de índices que bloquean o pérdida de datos.
- **Agentes en paralelo y vistas previas.** Claude Code puede escribir el SQL y las métricas en un panel mientras Codex trabaja en la interfaz en otro, cada uno en su propio [git worktree](/es/glossary/git-worktree/). Los [entornos de vista previa](/es/features/preview-environments/) inician el servidor de cada worktree en su propio puerto.
- **Revisión de diffs.** La [revisión de código](/es/features/code-review/) da una segunda mirada a las funciones de métricas antes de fusionar.

El gestor de bases de datos y el acceso de agentes están en los planes Pro y Team. Para saber más sobre cómo comprobar el código escrito por agentes, consulta [revisión de código con IA](/es/blog/ai-code-review/); para trabajar en paralelo, consulta [git worktrees para agentes en paralelo](/es/blog/git-worktree-parallel-agents/).

## Lista de comprobación rápida

- [ ] El agente escribió primero un informe de los datos y tú aprobaste las reglas de limpieza
- [ ] Los cálculos viven en funciones separadas y probadas
- [ ] Al menos 3 cifras principales comprobadas a mano de otra forma
- [ ] Recuento de filas comprobado en cada JOIN
- [ ] La conexión a la base de datos usa un usuario solo de SELECT
- [ ] `.env` y `data/` fuera de git, sin datos de clientes enviados al modelo
- [ ] Acceso al dashboard limitado a personas conocidas

## Conclusión

Crear un dashboard con IA acelera la programación pero no delega el pensamiento. El agente escribe código de pandas, SQL y Streamlit en minutos; decidir qué cifra es correcta y qué datos se pueden compartir sigue siendo cosa tuya. Elige un informe de Excel que actualices a mano esta semana, pide primero al agente un informe de los datos, construye el primer dashboard de Streamlit y comprueba tres cifras tú mismo.

## Preguntas frecuentes

**¿Necesito saber programar para crear un dashboard con IA?** No para empezar; un agente de código escribe por ti el código de pandas y Streamlit. Sí necesitas conocer tus datos lo bastante bien como para comprobar a mano unos cuantos totales.

**¿Debo usar Streamlit o Next.js para un dashboard?** Streamlit si quieres un dashboard interno rápido para ti o un equipo pequeño. Next.js con una biblioteca de gráficos si forma parte de un producto para clientes y necesita inicio de sesión, permisos y un diseño propio.

**¿Puedo fiarme de las cifras que calcula la IA?** No sin comprobarlas. Compara unas cuantas cifras principales, como los ingresos totales o el número de pedidos, con Excel o con una consulta SQL escrita por ti, y asegúrate de que los joins no multipliquen filas e inflen los totales.

**¿Es seguro conectar un dashboard a una base de datos de producción?** Mucho más si te conectas con un usuario de base de datos aparte que solo tenga permisos de SELECT. Cuando sea posible, usa una réplica de lectura o una copia nocturna para que las consultas pesadas no ralenticen el sistema en vivo.

**¿Está bien enviar datos de clientes a un modelo de IA?** Pegar datos reales de clientes en un chat es arriesgado y normalmente innecesario. Da al agente el esquema y filas de ejemplo anonimizadas; el código procesa los datos reales en tu propia máquina o servidor.

---

**Sobre AgentVera.** AgentVera es una app de escritorio para macOS, Windows y Linux, desarrollada por Solviera Teknoloji. Ejecuta 18 agentes de programación con IA (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) en paralelo, por proyecto, en terminales reales con las instalaciones y sesiones de CLI del propio usuario. El plan gratuito tiene agentes ilimitados. Descargar: https://agentvera.dev/es/download/ · Precios: https://agentvera.dev/es/pricing/
