GH GambleHub

Агрегація та консолідовані звіти

Агрегація та консолідовані звіти

Агрегація - це перетворення детальних записів у зведені показники за потрібними розрізами і періодами. Консолідація - об'єднання агрегатів з різних джерел/юридичних осіб/продуктів в єдиний звіт з коригуваннями (валюта, політика обліку, елімінації). Нижче - системний підхід: від проектування вітрин до експлуатації звітності.

1) Завдання та види консолідації

Операційна/продуктова: DAU/WAU/MAU, конверсії, виручка по країнах/каналах/платформах.
Фінансова (упр. і регуляторна): P&L, Cash Flow, Balance Sheet, GGR/Net Gaming Revenue, податки, звіти по юрособах.
Ризик/комплаєнс: антифрод, RG-індикатори, SLA/доступність, дрейф даних/моделей.
Стратегічна: зведені KPI по холдингу, портфелю брендів, регіонах.

2) Архітектура шару агрегацій

Шари даних: 'raw'→'staging'→'core'( факти/вимірювання) →'marts'( агрегати під звіти).
Семантичний шар: визначення метрик, календар, валюти, роллап-правила.
Зерно і time-grain: 'event','user _ day','txn','brand _ country _ day'→ подальші ролапи до тижня/місяця/кварталу.
Ідентичності: стабільні ключі (user/brand/legal_entity), таблиці відповідностей (mapping).

3) Ролапи та ієрархії

Ієрархії вимірювань: «Гра → Категорія → Провайдер», «Канал → Кампанія → Креатив», «Місто → Регіон → Країна → Кластер».
Правила підсумовування: адитивні (сума), напівадитивні (snapshot - середнє/останнє на період), неадитивні (коефіцієнти/відсотки).
Дедуплікація: унікальні користувачі та події по зерну; уникайте подвійного обліку при злитті джерел.

4) Мультивалюта, таймзони, календар

Час: зберігайте'event _ time _ utc'і локальні зрізи; календар свят/раб-днів.
Валюта: зберігайте «сиру» суму +'base _ ccy'за курсом на дату операції (або середній курс періоду із застереженням).
Нормалізація: показуйте явні одиниці/валюту/дату курсу.

Псевдо-SQL (конверсія і ролап):
sql
WITH fx AS (
SELECT date, from_ccy, to_ccy, rate
FROM dim_fx_rates
WHERE to_ccy = 'EUR'
),
tx AS (
SELECT t. txn_id, t. amount, t. ccy, t. brand, t. country, t. event_date
FROM fact_tx
)
SELECT brand, country, DATE_TRUNC('month', event_date) AS month,
SUM(amount COALESCE(fx. rate, 1)) AS revenue_eur
FROM tx
LEFT JOIN fx
ON fx. date = tx. event_date AND fx. from_ccy = tx. ccy
GROUP BY 1,2,3;

5) Консолідація за джерелами/юрособами

Mapping планів рахунків: єдиний CoA (Chart of Accounts) + меппінг з локальних планів.
Політики обліку: IFRS/GAAP/податкові правила → шар трансформацій (наприклад, виручка брутто/нетто, визнання бонусів/комісій).
Елімінації внутрішньогрупових обертів: виключення транзакцій між юрособами холдингу.
Методи консолідації: повна, пайова (proportionate), облік за пайовою участю (equity method).
Міноритарії: виділення частки неконтрольованих акціонерів (NCI).

Псевдо-SQL (елімінація внутрішньогрупових):
sql
WITH interco AS (
SELECT a. txn_id
FROM fact_tx a
JOIN dim_counterparty b ON a. counterparty_id = b. id
WHERE a. legal_entity IN (SELECT id FROM dim_legal WHERE group_id = 1)
AND b. legal_entity IN (SELECT id FROM dim_legal WHERE group_id = 1)
)
SELECT
FROM agg_pl_month
WHERE txn_id NOT IN (SELECT txn_id FROM interco);

6) Якість і звірки (reconciliation)

Звірки за джерелами: сума за джерелом = сума у вітрині (з допуском за курсом/часом).
Інваріанти: 'DAU ≤ MAU', сума по днях = місячний підсумок (для адитивних метрик).
Контроль повноти: частка NULL, частка дублікатів, відставання по свіжості.
Звіт про розбіжності: список невідповідностей і кроки усунення.

7) Продуктивність і SLO

SLO свіжості: оперативні агрегати - лаг ≤ 15 хв; денні - до 06:00 локального часу; місячні - до T + 1/T + 3.
Оптимізація: пред-агрегації, інкрементальні перерахунки, партіонування (за датою/брендом/країною), кеш для популярних зрізів.
Обмеження UI: ≤ 12 категорій на графік; пагінація таблиць; lazy-load.

8) Управління визначеннями та версіями

Словник метрик: код, визначення, формула, джерело, одиниці, власники, guardrails.
Версіонування: `METRIC_vN`; будь-які правки → нова версія + backfill і changelog.
Семантичний шар: одне джерело істини для BI/експериментів/відвантажень.

9) Безпека та доступ

RLS/CLS: доступ за ролями (країна/бренд/юрособа), маскування PII.
Аудит: хто і який звіт вивантажував; контроль експорту (терміни, токени).
Мінімізація: видавати агрегати, а не сирі PII-дані.

10) Типові агрегати та візуалізації

Продукт: воронки (step-bars), когорти (heatmap), утримання D7/D30, ARPU/ARPPU, GGR/Net.
Фінанси: P&L по ієрархії, водоспад (bridge) факторів, структура виручки по регіонах, динаміка G&A.
Операції/ML: SLA, latency p95/p99, PR-AUC/Recall@FPR≤x%, PSI-heatmap дрейфа.

11) Паспорт консолідованого звіту (шаблон)

Код/версія: `CONSOL_PNL_v3`

Призначення: управлінський P&L по групі брендів, мультивалюта → базова валюта EUR

Покриття: всі юрособи групи; метод - повна консолідація; NCI - виділяється

Джерело/шар: 'mart _ fin _ pnl _ v3'( засновано на'fact _ tx _ v2','dim _ legal','dim _ fx _ rates')

Гранулярність: місяць (ролап з дня)

Елімінації: 'intercompany = true'- виключені внутрішньогрупові оберти

SLO: T+1 06:00 лок.; доступність ≥ 99. 9%

Звірки: звіт бухгалтерії'BK _ PNL _ T + 1', розбіжність ≤ 0. 3%

Власники: Finance Analytics, Data Platform

Guardrails: FX-таблиця не старше 24 год; coverage транзакцій ≥ 99. 5%

12) Часті помилки і як їх уникати

Тихі зміни формул: завжди через версії і changelog.
Подвійний облік: дублі джерел/джойнів - контролюйте ключі та зерно.
Змішування часових зон: централізований календар і UTC-зберігання.
Неправильні відсотки: агрегуйте чисельник/знаменник, а не «середнє середніх».
«Сирі» курси: явна дата/джерело FX, консистентна політика округлень.
Відсутність елімінацій: міжкомпанійні обороти спотворюють звіти.
Непрозора свіжість: завжди показуйте «оновлено N хвилин тому».

13) Псевдо-SQL: інкрементальний місячний агрегат

sql
-- Recalculate only affected days/months
WITH changed_days AS (
SELECT DISTINCT DATE(event_time_utc) AS d
FROM fact_tx_delta -- new/modified per day
),
daily AS (
SELECT
DATE(event_time_utc) AS d,
brand, country,
SUM(net_revenue_eur) AS net_eur
FROM fact_tx
WHERE DATE(event_time_utc) IN (SELECT d FROM changed_days)
GROUP BY 1,2,3
)
MERGE INTO agg_month_brand_country m
USING (
SELECT DATE_TRUNC('month', d) AS month, brand, country, SUM(net_eur) AS net_eur
FROM daily
GROUP BY 1,2,3
) s
ON (m. month = s. month AND m. brand = s. brand AND m. country = s. country)
WHEN MATCHED THEN UPDATE SET m. net_eur = s. net_eur, m. updated_at = NOW()
WHEN NOT MATCHED THEN INSERT (month, brand, country, net_eur, updated_at)
VALUES (s. month, s. brand, s. country, s. net_eur, NOW());

14) Процеси та експлуатація

1. Дизайн: цілі/аудиторії, метрики, ієрархії, валюта/таймзони.
2. Дані: контракти джерел, схеми, тести якості.
3. Побудова вітрин: семантичні об'єкти, ролап-правила, елімінації.
4. Звірки: автоматичні звіти розбіжностей, тікети на виправлення.
5. Реліз: версія, документація, навчання користувачів.
6. Моніторинг: свіжість, completeness, дублікати, час відгуку, інциденти.
7. Ревізія: квартальна перевірка визначень, меппінгів, FX-політики.

15) Чек-лист перед випуском консолідованого звіту

  • Визначення метрик та ієрархій задокументовані в семантичному шарі
  • Налаштовані конверсія валют і таймзони; показані одиниці та дата курсу
  • Реалізовані елімінації внутрішньогрупових оборотів/NCI (якщо застосовується)
  • Інваріанти та звірки з референс-джерелами проходять у допусках
  • Інкрементальні перерахунки та партіонування включені
  • SLO свіжості/доступності задані; статуси оновлення відображаються
  • RLS/CLS і маскування PII налаштовані; аудит експорту включено
  • Версія/changelog і власники вказані; є runbook інцидентів

Підсумок

Агрегація і консолідація - це не просто «GROUP BY», а цілісна система: узгоджені визначення, коректні ролапи, мультивалюта і календар, елімінації і звірки, спостережуваність і SLO. Слідуючи описаній архітектурі, ви перетворюєте різнорідні дані в надійні склепіння для управління продуктом, фінансами і ризиками.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Telegram
@Gamble_GC
Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.