Короткий ответ
Нужно сверить определения метрики шаг за шагом — период и таймзону, знаменатель (все визиты или только уникальные пользователи) и числитель (все покупки или только завершённые/неотменённые), а также проверить, не считает ли дашборд по кэшированной/агрегированной витрине с другой логикой дедупликации.
Как это работает подробнее
Конверсия = числитель/знаменатель, и расхождение почти всегда означает, что числитель или знаменатель (или оба) считаются по-разному: дашборд может считать конверсию по сессиям, а ручной запрос — по уникальным пользователям, что даёт разные цифры при повторных визитах.
Пример кода
example.sql
-- Проверка гипотезы "дашборд считает по сессиям, а не по пользователям"
SELECT
COUNT(DISTINCT session_id) FILTER (WHERE purchased) * 1.0
/ COUNT(DISTINCT session_id) AS conv_by_session,
COUNT(DISTINCT user_id) FILTER (WHERE purchased) * 1.0
/ COUNT(DISTINCT user_id) AS conv_by_user
FROM sessions;Что использовать на практике
- На практике. Эффективный порядок проверки — (1) запросить у владельца дашборда точную формулу метрики и фильтры, (2) воспроизвести эту же формулу вручную на сырых данных и сравнить с цифрой дашборда, (3) если совпало — значит исходное ручное определение отличалось, если не совпало — искать проблему в пайплайне дашборда (устаревшая витрина, фильтр по тестовым пользователям).
- Проверка. если conv_by_session ≈ 3.2%, а conv_by_user ≈ 2.7%, гипотеза подтверждена, и дальше нужно согласовать с бизнесом, какое определение канонично.
Подводные камни
- Частые ошибки. Сразу чинят «неправильную» цифру без выяснения, какое определение метрики на самом деле верное с точки зрения бизнеса; две цифры могут быть обе технически корректны, но отвечать на разные вопросы (конверсия визитов vs конверсия пользователей).