GuardLabs
Демо-стенд · SQL / BI

Від повільного запиту й цифр, яким не вірять — до вітрини даних і дашборда, який не бреше

Показуємо весь шлях на одному прикладі: звітний SQL-запит, що гальмував живий дашборд, зіркова схема з materialized views під нього, готовий BI-дашборд на 4 графіки — і окремо реальний випадок, коли цифри в двох звітах розійшлися, та як ми це ловимо.

Дані синтетичні, змодельовані під типовий інтернет-магазин середнього розміру (~2.4 млн рядків продажів за 18 місяців). Прийоми оптимізації в деталях не розкриваємо — це наше ноу-хау.
01 · Продуктивність

До / після на реальному звітному запиті

Запит для дашборда «виручка по каналах за період» з join'ами по 4 таблицях і корельованими підзапитами під фільтр повернень.

До
38.4 с
Після
0.9 с
×42
швидше
2.4 млн
рядків у fact_sales
0
таймаутів дашборда за тиждень

Що це дало замовнику

  • Дашборд у Tableau відкривався за >40 с і половина фільтрів давала таймаут — тепер відкриття <1 с, фільтри живі.
  • Звіт, який раніше рахували вночі окремим cron-скриптом «про запас», більше не потрібен — дані завжди свіжі.
  • Той самий запит тепер витримує паралельні звернення кількох аналітиків одночасно без деградації.
Конкретні прийоми (індекси, план виконання, зміна моделі даних) — комерційна таємниця нашого підходу. У демо показуємо результат, а не рецепт.
02 · Модель даних

Зіркова схема під дашборд

Таблиця фактів + виміри, зверху — прошаровані materialized views, з яких і читає BI-інструмент (Power BI / ClickHouse). Дашборд ніколи не читає сирі транзакційні таблиці напряму.

dim_date день · тиждень · квартал dim_product категорія · бренд · sku fact_sales qty · revenue · discount · cost ~2.4M рядків dim_customer сегмент · регіон · когорта dim_channel web · маркетплейс · роздріб mv_daily_sales оновл. щогодини mv_customer_ltv оновл. щоночі
Таблиця фактів Виміри (dimensions) Materialized views — з них читає дашборд
03 · Дашборд

Готовий дашборд на живих (синтетичних) цифрах

4 графіки + зведена таблиця, одна візуальна система замість набору випадкових картинок.

📊 Продажі — огляд · останні 12 тижнів
джерело: mv_daily_sales · синтетичні дані
Виручка (12 тиж.)
₴21.4M
▲ 8.3% WoW
Замовлень
48 260
▲ 4.1%
Середній чек
₴444
▲ 3.9%
Частка повернень
3.1%
▼ 0.4 п.п.
Динаміка виручки по тижнях ₴, млн
Виручка за каналом частка, %
Топ-10 товарів за виручкою ₴, тис.
Підсумок по регіонах 12 тижнів
04 · Звірка даних

Чому цифри в двох звітах розійшлись — і як ми це ловимо

Реальний тип розбіжності (числа — синтетичний приклад для демо): дашборд Tableau і фінансовий вивід за той самий місяць показали різну виручку.

Дашборд Tableau (червень)
₴1 842 600
Фінансовий вивід (червень)
₴1 791 050
Розбіжність ₴51 550 (2.8% від виручки місяця) — 41 замовлення потрапили не в той звітний день.
Крок перевіркиЗнайденоЗамовленьСума, ₴
1. Звірка сум по днях між джереламиРозбіжність саме на межі 31 травня / 1 червня
2. Порівняння часових поясів записуSQL-запит округлював час по UTC, фінансовий вивід — по Europe/Kyiv
3. Замовлення 31.05 21:00–23:59 Kyiv (UTC 18:00–20:59)Потрапили у звіт за 1 червня замість 31 травня4151 550
4. Виправлення межі дня в mv_daily_salesОбидва звіти зійшлись день у день00

Потрібно прискорити свої звіти чи звести цифри в дашборді?

Пришліть повільний запит або приклад розбіжності — скажемо, у чому справа, і покажемо план. Фікс-ціна, строк у днях.