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

Проверь себя · 1/3разбор после ответа
В таблице users поле phone бывает NULL и бывает пустой строкой. Какое утверждение верное?

Зачем WAU

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

Что такое 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 начинает неделю с понедельника.

Календарный WAU vs скользящий 7-дневный

Календарный WAU

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

Скользящий 7-дневный 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. Часовой пояс. DATE_TRUNC в UTC vs локальная зона — разные числа.

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

FAQ

WAU или MAU?

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

Календарный или скользящий?

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

WAU/MAU ratio?

У сильных продуктов WAU/MAU обычно держится в диапазоне 0,5–0,7. Это значит, что большая часть месячной аудитории заходит и в течение недели, то есть лояльные пользователи возвращаются регулярно.

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

В стабильном продукте недельные колебания WAU в пределах ±2–3% (WoW) — это норма. Скачок больше 5% — уже сигнал, что стоит разобраться в причине.

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

Разложите WAU на новых, вернувшихся и ушедших пользователей — так видно, за счёт какой группы просел показатель. Дальше остаётся найти причину провала именно в этой группе.