Как посчитать WAU в SQL

Закрепи формулу WAU в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать WAU в Telegram

Зачем WAU

В соцсетях и приложениях с недельной сезонностью (бизнес-инструменты, фитнес-приложения) DAU слишком волатилен, а MAU слишком сглаживает. WAU — компромисс: видишь недельный тренд без шума выходных и без потери deta.

Что такое WAU

WAU (Weekly Active Users) — уникальные пользователи, совершившие минимум одно действие за неделю.

WAU = COUNT(DISTINCT user_id) where date ∈ неделя

Базовый расчёт

SELECT
    DATE_TRUNC('week', event_date) AS week,
    COUNT(DISTINCT user_id) AS wau
FROM events
WHERE event_date >= CURRENT_DATE - INTERVAL '12 weeks'
GROUP BY 1
ORDER BY 1;

DATE_TRUNC('week', ...) в Postgres начинает неделю с понедельника.

Calendar WAU vs Rolling 7-day

Calendar WAU

Активные за неделю (понедельник — воскресенье). Просто.

Rolling 7-day WAU

Активные за последние 7 дней. Гладкая кривая.

WITH dates AS (
    SELECT generate_series(CURRENT_DATE - INTERVAL '90 days', CURRENT_DATE, INTERVAL '1 day')::DATE AS day
)
SELECT
    d.day,
    COUNT(DISTINCT e.user_id) AS rolling_wau
FROM dates d
JOIN events e
  ON e.event_date > d.day - INTERVAL '7 days'
 AND e.event_date <= d.day
GROUP BY d.day
ORDER BY d.day;
Закрепи формулу WAU в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать WAU в Telegram

WAU по сегментам

SELECT
    DATE_TRUNC('week', e.event_date) AS week,
    u.platform,
    COUNT(DISTINCT e.user_id) AS wau
FROM events e
JOIN users u ON u.user_id = e.user_id
WHERE e.event_date >= CURRENT_DATE - INTERVAL '12 weeks'
GROUP BY 1, 2
ORDER BY 1, wau DESC;

Частые ошибки

Ошибка 1. Неполная неделя. Сегодня среда — неделя ещё не закончилась. Используйте week-to-date.

Ошибка 2. Понедельник vs воскресенье. В разных странах неделя начинается по-разному. Зафиксируйте.

Ошибка 3. Дубли user_id. DISTINCT не сработает на дублях с разными формами идентификатора. Нормализуйте.

Ошибка 4. Боты. Без фильтра — WAU завышен.

Ошибка 5. Timezone. DATE_TRUNC в UTC vs локальная зона — разные числа.

Связанные темы

FAQ

WAU или MAU?

WAU — для продуктов с weekly cadence. MAU — для retail / банков.

Calendar или rolling?

Rolling — лучше для трендов. Calendar — для отчётности.

WAU/MAU ratio?

Хорошие продукты: 0,5-0,7. Это значит, что лояльные юзеры заходят регулярно.

Какие изменения большие?

В стабильном продукте ±2-3% WoW WAU — норма. >5% — сигнал.

WAU упал — что делать?

Декомпозиция по новым / возвращающимся / churned. Найдите причину провала.