Дашборд данных с ИИ: из Excel или SQL в Streamlit

Как создать дашборд данных с ИИ: из Excel, CSV или SQL в живой дашборд на pandas и Streamlit, с доступом только на чтение, проверкой цифр и безопасной публикацией.

Solviera Teknoloji 8 мин чтения

Чтобы создать дашборд данных с ИИ, покажите свои данные кодинг-агенту и попросите написать код анализа: он прочитает ваши данные Excel, CSV или SQL через pandas, очистит и сведёт их и за несколько часов превратит в интерактивный дашборд на Streamlit. Если дашборд часть продукта, то же самое делается с Next.js и библиотекой графиков. Внимания требует не код, а то, верны ли цифры и остаются ли данные закрытыми.

Статья идёт шаг за шагом от таблицы продаж до дашборда, которым можно поделиться: инструменты, первый промпт, подключение к базе только на чтение, проверка математики ИИ и развёртывание.

Что мы строим

Цель — заменить Excel-отчёт, который вы каждую неделю обновляете вручную, дашбордом, который обновляется сам. Типичный дашборд продаж содержит: итог за период, изменение по сравнению с предыдущим периодом, график выручки по месяцам, лучшие товары, разбивку по регионам или каналам и фильтр по датам.

Мы сделаем это в духе vibe coding: код пишет агент, а вы описываете, что хотите увидеть, и проверяете результат. В работе с данными у такого подхода одно условие: вы должны знать данные достаточно хорошо, чтобы подвергать сомнению получающиеся цифры.

Какой путь: Streamlit или Next.js?

Быстрый путь: Python, pandas и Streamlit. Один файл Python превращается в рабочий веб-интерфейс. Фильтры, таблицы, графики и карточки метрик занимают по нескольку строк. Если нужен внутренний дашборд для себя, руководителя или небольшой команды, это самый короткий маршрут. pandas одинаково хорошо читает Excel, CSV и SQL.

Путь продукта: Next.js и библиотека графиков. Если дашборд увидят клиенты и вам нужны вход пользователей, права доступа к данным по пользователям и дизайн под ваш бренд, лучше подойдёт приложение на React. Частый выбор: Recharts, Chart.js и ECharts. Данные запрашиваются на сервере, в маршруте API, а в браузер попадает только сводка, нужная пользователю.

Если не уверены, начните со Streamlit. Перейти к продукту гораздо проще, когда вы знаете, какими графиками люди действительно пользуются.

Шаг 1: подготовка

Достаточно терминального кодинг-агента (Claude Code, Codex, Gemini CLI, CLI Cursor и т. д.) и Python:

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

Я с самого начала держу data/ вне git; данным клиентов в репозитории делать нечего.

Шаг 2: сначала изучите данные

Самая частая ошибка — сразу сказать агенту «сделай мне дашборд». Сначала попросите его понять данные. Этот первый ход ничего не рисует, а только докладывает:

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.

Прочитайте этот отчёт. Находки вроде «37 строк в столбце Amount пришли как текст» или «один и тот же ID заказа встречается дважды» влияют на все последующие цифры. Что считать ошибкой, а что настоящим (возвраты, разделённые заказы), решаете вы; не позволяйте агенту исправлять данные наугад.

Шаг 3: промпт для дашборда

Когда данные чистые, просите дашборд. Запишите вопросы, на которые он должен отвечать; типы графиков может предложить агент:

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.

Самая важная часть этого промпта — расчёты в отдельном файле с тестируемыми функциями. Интерфейс легко менять, а неверная функция итога ломает каждый график.

pytest -q
streamlit run app.py

Посмотрите на дашборд в браузере, потом просите небольшие изменения: «Подписи товаров обрезаются, сделай горизонтально». «Поставь фильтр дат по умолчанию на текущий месяц». Делайте коммит после каждого изменения, чтобы можно было вернуться.

Шаг 4: подключение к базе только на чтение

Если данные хранятся в базе вашего приложения, а не в таблице, главное правило: пользователь дашборда может только читать. Отдельный пользователь PostgreSQL:

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;

Положите строку подключения в .env (DATABASE_URL=...) и говорите агенту только имя переменной. Ещё несколько практических моментов:

  • Давайте доступ только к нужным таблицам. Если в таблице пользователей хранятся адреса почты и телефоны, а дашборду они не нужны, он не должен их читать.
  • Где можно, используйте реплику для чтения или ночную копию. Тяжёлый запрос, который напишет агент, может замедлить рабочую систему.
  • Задайте тайм-аут запроса (statement_timeout в PostgreSQL) и ограничьте размер результатов.
  • Попросите агента держать SQL в отдельных файлах .sql; так запросы легче читать и запускать вручную.

Шаг 5: проверьте цифры

Это самый важный раздел. Самая опасная неисправность дашборда — не падение, а неверная цифра в убедительном графике.

Сверьте главные итоги вручную

Посчитайте 3–4 ключевые цифры другим способом: сводной таблицей в Excel или простым SQL-запросом, который вы напишете сами. Например, выручка за март:

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

Если дашборд не совпадает, не идите дальше, пока не сможете объяснить разницу. Обычно причина одна из этих: учтены ли отмены, где возвраты, включён ли налог, какой часовой пояс?

Тихий неверный JOIN

Это 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;

Заказ с тремя позициями превращается в три строки, и o.total складывается трижды. Запрос выполняется без ошибок, результат выглядит правдоподобно, а выручка завышена. Решение — агрегировать на правильном уровне: либо суммировать только по orders, либо сначала свести позиции по заказам, а потом соединять. Для проверки спросите агента:

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).

Если два числа различаются, где-то строки умножаются.

Другие ловушки

  • Границы дат: BETWEEN '2026-03-01' AND '2026-03-31' по столбцу с временной меткой пропускает почти весь день 31 марта. Используйте полуоткрытый диапазон.
  • Часовые пояса: если база хранит UTC, заказы около полуночи попадают не в тот день.
  • Средние средних: среднее значение средних чеков по регионам — это не общий средний чек.
  • Пропущенные значения: строки с NaN молча выпадают из некоторых операций pandas.

Шаг 6: публикация и развёртывание

  • Streamlit: для внутреннего использования запустите его на сервере или в контейнере Docker за сетью компании или слоем входа. У Streamlit есть и собственный хостинг, но не размещайте дашборд с данными клиентов по общедоступному URL; вы должны знать, у кого есть доступ.
  • Next.js: разверните на платформе вроде Vercel или на собственном сервере. Проверьте аутентификацию и то, что каждый пользователь видит только свои данные, на сервере; фильтрация только в интерфейсе безопасностью не является.
  • Свежие данные: для дашбордов на таблицах чтение файла из общей папки или загрузка в базу небольшим ночным скриптом избавляют от ручных обновлений.

В чём ИИ обычно ошибается

  • «Исправляет» данные наугад: заполняет пустоты нулём, отбрасывает даты, которые не может разобрать. Пусть явно выпишет каждое правило очистки, а вы их утвердите.
  • Выдуманные названия столбцов: не видя схемы, он придумывает столбец вроде customer_name. Дайте ему настоящую схему.
  • Форматы чисел: читает 1.234,56 как 1.234. Попросите показать необработанные и разобранные значения рядом.
  • Графики на всё: дашборд из 15 графиков никто не смотрит. Ограничьтесь вопросами, которые важны.
  • «Я проверил»: агент, тестирующий свой код своим тестом, может дважды сделать одно и то же неверное допущение. Проверьте одну цифру сами.

Безопасность и конфиденциальность

  • Данные подключения в .env, а .env и data/ вне git.
  • Никогда не вставляйте пароль или строку подключения в чат. Давайте агенту имя переменной.
  • Не отправляйте модели настоящие данные клиентов. Чтобы писать код, агенту нужны схема и несколько примеров строк; анонимизируйте примеры или сгенерируйте фиктивные. Данные обрабатывает код на вашей машине, а не модель. Ваши обязательства по GDPR (или KVKK) в отношении персональных данных не меняются.
  • Читайте команды и SQL, которые запускает агент. Выполнение чего-либо с DELETE, UPDATE или DROP через пользователя дашборда в любом случае должно быть невозможно; для этого и нужен пользователь только для чтения.
  • Знайте, кто видит URL дашборда. Поделиться ссылкой — значит поделиться данными.

Как это делается в AgentVera

Ничего из этого не требует конкретного инструмента. Я работаю так в AgentVera, потому что он сокращает несколько шагов с базой данных:

  • Менеджер баз данных. Менеджер баз данных подключается к PostgreSQL, MySQL/MariaDB и SQLite. Подключение, которое вы отметили «только чтение», открывается в режиме чтения и на стороне сервера. SQL агента можно выполнять самому в SQL-редакторе, чтобы сверять итоги, а EXPLAIN помогает заметить тяжёлые запросы.
  • Контролируемый доступ агента. Если включить доступ агента для подключения, агенты с поддержкой MCP выполняют запросы через инструмент agentvera-db; пароль они не видят, режим по умолчанию только чтение, а каждый запрос записывается в лог. Кнопка «AI», которая превращает запрос в SQL, отправляет названия таблиц и столбцов, а не строки таблиц.
  • DB Guard. Если агент пишет для дашборда миграцию индекса или представления, DB Guard проверяет её в конце хода и отмечает риски, такие как блокирующая сборка индекса или потеря данных.
  • Параллельные агенты и превью. Claude Code может писать SQL и метрики в одной панели, пока Codex работает над интерфейсом в другой, каждый в своём git worktree. Окружения предпросмотра запускают сервер каждого worktree на отдельном порту.
  • Просмотр diff. Ревью кода даёт функциям метрик второй взгляд перед слиянием.

Менеджер баз данных и доступ агента входят в тарифы Pro и Team. Подробнее о проверке кода, написанного агентами, читайте в статье ревью кода с ИИ, а о параллельной работе — в статье git worktree для параллельных агентов.

Краткий чек-лист

  • Агент сначала написал отчёт о данных, и вы утвердили правила очистки
  • Расчёты лежат в отдельных протестированных функциях
  • Минимум 3 главные цифры проверены вручную другим способом
  • Число строк проверено для каждого JOIN
  • Подключение к базе использует пользователя только с правом SELECT
  • .env и data/ вне git, данные клиентов модели не отправляются
  • Доступ к дашборду ограничен известными людьми

Подводим итоги

Создание дашборда с ИИ ускоряет программирование, но не снимает необходимость думать. Агент пишет код на pandas, SQL и Streamlit за минуты; решать, какая цифра верна и какими данными можно делиться, по-прежнему вам. Возьмите Excel-отчёт, который вы обновляете вручную на этой неделе, сначала попросите у агента отчёт о данных, соберите первый дашборд на Streamlit и сами проверьте три цифры.

Вопросы

Нужно ли уметь программировать, чтобы создать дашборд с ИИ?

Чтобы начать, нет; код на pandas и Streamlit пишет кодинг-агент. Но данные вы должны знать достаточно хорошо, чтобы вручную проверить несколько итогов.

Что выбрать для дашборда: Streamlit или Next.js?

Streamlit, если нужен быстрый внутренний дашборд для себя или небольшой команды. Next.js с библиотекой графиков, если дашборд часть продукта для клиентов и ему нужны вход, права доступа и собственный дизайн.

Можно ли доверять цифрам, которые считает ИИ?

Не проверяя, нельзя. Сравните несколько главных показателей, например общую выручку или число заказов, с Excel или SQL-запросом, который вы написали сами, и убедитесь, что JOIN не умножают строки и не раздувают итоги.

Безопасно ли подключать дашборд к боевой базе данных?

Гораздо безопаснее, если подключаться отдельным пользователем базы только с правом SELECT. По возможности используйте реплику для чтения или ночную копию, чтобы тяжёлые запросы не замедляли рабочую систему.

Можно ли отправлять данные клиентов в модель ИИ?

Вставлять в чат настоящие данные клиентов рискованно и обычно не нужно. Дайте агенту схему и анонимизированные примеры строк; настоящие данные обрабатывает код на вашей машине или сервере.

Соберите своих агентов за одним столом.

Скачайте AgentVera бесплатно; ваши установленные CLI уже готовы к работе.

Другие статьи