Короткий ответ
Сначала сравниваю определения метрики (что считается «пользователем» и за какой период) в дашборде и в запросе к логу, затем проверяю фильтры, дедупликацию по user_id и часовой пояс агрегации.
Как это работает подробнее
расхождение в 2 раза обычно означает не статистическую погрешность, а разные определения или баг в одном из пайплайнов: разные источники данных, разный часовой пояс, отсутствие DISTINCT, включение тестовых/ботовых пользователей.
Пример кода
Пример SQL
-- типичная ошибка: посчитали события, а не уникальных пользователей
SELECT count(*) FROM events WHERE event_date = '2026-10-01';
-- корректный расчёт уникальных пользователей
SELECT count(DISTINCT user_id) FROM events WHERE event_date = '2026-10-01';Что использовать на практике
- Порядок действий. пошагово: 1) сверяю формулу метрики на дашборде (документация/код виджета); 2) проверяю, что в своём SQL-запросе использую DISTINCT user_id, а не count(*) по событиям; 3) проверяю часовой пояс границ дня; 4) проверяю фильтры (боты, внутренние IP, тестовая среда); 5) проверяю, не задвоение ли из-за JOIN с таблицей с несколькими строками на пользователя.
Подводные камни
- Частые ошибки. сразу считать, что «дашборд врёт» или «лог неполный», не проверив собственный запрос; забыть про DISTINCT и посчитать события вместо пользователей; сравнивать данные за разные временные окна из-за разных часовых поясов.