Продолжительность сеанса - большое расхождение между аналитикой Google и отчетами Firebase - PullRequest
0 голосов
/ 02 ноября 2019

В настоящее время мы переходим с Google Analytics (Mobile Data) на Firebase.

Данные в базе данных передаются в BigData, и мы используем следующий запрос для определения продолжительности сеанса.

Когда я запускаю отчет об этих сеансах, средняя продолжительность сеанса, сообщаемая через firebase, примерно в 4 раза меньше, чем средняя продолжительность сеанса, сообщаемая Google Analytics.

У меня одна и та же проблема на разных устройствах (android, ios), и я отправляю одни и те же настраиваемые события одновременно в Google Analytics и Firebase

, используя событие session_start или unnest user_propertiesи использовать непосредственно ga_session_number вместо этого дать те же результаты.

with timeline as
(
  select 
    geo.city as geo_city
    ,device.operating_system as device_category
    , user_pseudo_id
    , event_name
    , event_timestamp
    , lag(event_timestamp, 1) over (partition by user_pseudo_id order by event_timestamp) as prev_event_timestamp
  from 
    `projid.analytics_xxx.events_*`
) 
, session_timeline as 
(
  select
    event_name
    , geo_city
    , device_category
    , user_pseudo_id
    , event_timestamp
    , prev_event_timestamp
    , case 
        when 
           event_timestamp - prev_event_timestamp >= (30*60*1000*1000)
             or
           prev_event_timestamp is null 
          then 1
          else 0 
      end as is_new_session_flag 
  from 
    timeline
)
, marked_sessions as
(
  select 
    device_category
    , geo_city
    , user_pseudo_id
    , event_timestamp
    , prev_event_timestamp
    , sum(is_new_session_flag) over (partition by user_pseudo_id order by event_timestamp) AS user_session_id
    , min(prev_event_timestamp) over (partition by user_pseudo_id order by event_timestamp) AS first_prev_event_timestamp

  from session_timeline
)
, measured_sessions as
(
  select
    device_category
    , geo_city
    , user_pseudo_id
    , user_session_id
    , FORMAT_TIMESTAMP("%F", TIMESTAMP_MICROS(first_prev_event_timestamp)) as first_time_date
    , FORMAT_TIMESTAMP("%F", TIMESTAMP_MICROS(min(event_timestamp))) as date
    , round((max(event_timestamp) - min(event_timestamp))/ (1000 * 1000), 2) as session_duration_seconds
    , round((max(event_timestamp) - min(event_timestamp))/ (1000 * 1000 * 60), 2) as session_duration_minutes
    , round((max(event_timestamp) - min(event_timestamp))/ (1000 * 1000 * 60 * 60), 2) as session_duration_hours 
  from 
    marked_sessions
  group by
    user_pseudo_id
    , user_session_id
    , device_category
    , geo_city
    , first_prev_event_timestamp
  having 
    -- let's count only sessions longer than 10 seconds
    session_duration_seconds >= 10
)
select 
  *
from 
  measured_sessions
 order by date desc, user_pseudo_id desc, user_session_id desc

не только значительно отличается средняя продолжительность сеанса, но даже количество сеансов далеко от нормы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...