Согласно документам Firebase Analytics (https://support.google.com/firebase/answer/6317517#active-users), активное количество пользователей - это количество уникальных пользователей, которые начали сеансы в определенный день. Также согласно документации, каждый раз, когда сеанс запускается, отправляется событие с именем session_start
. Я пытаюсь получить эту метрику с помощью экспорта BigQuery, но мой запрос дает разные результаты (15636 в BigQuery, 14908 в аналитике FB)
Я также пробовал конвертировать в разные часовые пояса, чтобы увидеть, может ли это быть проблемой, но независимо от того, какой часовой пояс я пробую, я никогда не получаю одинаковых (или похожих) результатов.
Какой запрос мне следует выполнить, чтобы получить те же результаты, что и на панели управления Firebase Analytics для активных пользователей?
Мой запрос
SELECT EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id)
FROM table_date_range([XXXXX.app_events_], timestamp('2016-11-26'), timestamp('2016-11-29'))
WHERE DATE(event_dim.timestamp_micros) = '2016-11-27'
AND event_dim.name ='session_start'
Спасибо
Обновить
После ответа @djabi я изменил свой запрос на использование user_engagement
, а не session_start
, и теперь он работает намного лучше. Тем не менее, некоторые незначительные отличия (они варьируются от менее десяти до менее 50 из 16K, в зависимости от даты).
Я еще раз попытался использовать разные часовые пояса, поигравшись с DATE(date_add(event_dim.timestamp_micros,1,'hour'))
, но так и не получил точного числа, которое я получил на панели управления Firebase Analytics.
Новые числа достаточно хороши, чтобы считаться статистически приемлемыми, но вам интересно, есть ли у кого-нибудь предложения по улучшению запроса и получению точных результатов?
Текущий запрос:
SELECT
COUNT(*) AS active_users
FROM (
SELECT
COALESCE(user_dim.user_id, user_dim.app_info.app_instance_id) AS user_id
FROM
TABLE_DATE_RANGE([XXXXX.app_events_], TIMESTAMP('2016-11-24'), TIMESTAMP('2016-11-29'))
WHERE
DATE(event_dim.timestamp_micros) = '2016-11-25'
AND event_dim.name ='user_engagement'
GROUP BY
user_id )
Примечание: на данный момент мы не отправляем user_id, поэтому COALESCE
всегда будет возвращать app_instance_id
, на случай, если кто-то собирался предположить, что это может быть проблемой.