Расхождения в показателях активных пользователей между панелью управления Firebase Analytics и экспортом BigQuery

Согласно документам 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, на случай, если кто-то собирался предположить, что это может быть проблемой.


person Javier Ramirez    schedule 28.11.2016    source источник


Ответы (3)


Вам нужно подождать полных 3 дня для загрузки данных с офлайн-устройств. Ваш запрос правильно фильтрует события на основе метки времени события, и вы извлекаете данные за 3 дня, но это всего лишь полтора дня с сегодняшнего дня, и этого достаточно для загрузки всех данных. Попробуйте включить 3 дня со вчерашнего дня.

Также попробуйте использовать событие user_engagement вместо session_start. Я считаю, что количество активных пользователей основано на user_engagement, а не на событиях session_start.

Кроме того, отчеты FB требуют времени для обработки, поэтому вы можете проверить отчеты FB на следующий день.

Отчеты FB создаются для часового пояса учетной записи, а события имеют отметку времени в формате UTC, поэтому день в отчетах FB отличается от календарного дня UTC. Вы также хотите контролировать это несоответствие, чтобы получить совпадающие числа.

person djabi    schedule 29.11.2016
comment
Это блестяще. Спасибо! При изменении session_start на user_engagement числа все еще неточные, но намного ближе. Я пробовал возиться с часовым поясом, но лучшие результаты - это когда я его не меняю, поэтому я предполагаю, что часовой пояс на самом деле UTC (это имеет смысл, поскольку мой клиент находится в Лондоне). Оставьте этот вопрос открытым еще на пару дней на случай, если появится дополнительная информация, но я приму ваш ответ как правильный, если никто больше не предложит - person Javier Ramirez; 30.11.2016
comment
Мне никогда не приходило в голову попробовать вовлечение пользователей, поскольку в документации указано количество уникальных пользователей, инициировавших сеансы. Но эмпирически кажется, что вы правы, а документы - нет (поскольку можно увидеть взаимодействие пользователя без запуска сеанса, согласно этот другой вопрос) - person Javier Ramirez; 30.11.2016
comment
Документация неверна. Скоро это будет исправлено. Спасибо, что задали вопрос, это помогло мне узнать, что наша документация не работает. Ваше здоровье. - person djabi; 01.12.2016

Сеансы по умолчанию измеряются после 10 секунд активности пользователя в соответствующем приложении, которое вы можете изменить. Попробуйте изменить счетчик времени начала сеанса на наименьшее возможное, и тогда вы можете получить число, более близкое к ожидаемому.

person Anupam Aacharya    schedule 12.10.2017

Для статистики Android я использовал:

user_dim.device_info.resettable_device_id

вместо того

user_dim.app_info.app_instance_id

и это дало лучшие результаты.

person Alex Radzishevsky    schedule 12.01.2017