Firebase BigQuery Export Campaign Performance

Viewed 359

I'm having a hard time replicating the metrics found when accessing in the Analytics console. Particularly user and session metrics when split by campaign details (extracted from 'campaign_details' event and attributed on a last interaction basis over 90 days). If I query the data without considering campaign_details my values are as in the console. I'd be interested to know if anyone has worked with this previously and managed to get the data as in the console or if it's even possible to expect parity?

    with initial_prep as (
      SELECT
        (select max(value.string_value) from unnest(user_properties) where key='store') store,
        device.operating_system as operating_system,
        event_date,
        user_pseudo_id,
        event_timestamp,
        TIMESTAMP_MICROS(event_timestamp) AS ts,
        LAG(TIMESTAMP_MICROS(event_timestamp)) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp) AS prev_evt_ts,
        IF(event_name = "session_start", 1, 0) AS is_session_start_event,
        IF(event_name = "first_open", 1, 0) AS is_first_visit_event,
        IF(event_name = "screen_view", 1, 0) AS is_screen_view,
        IF(event_name = "purchase",1,0) as is_purchase,
        ecommerce.purchase_revenue as value,
        ecommerce.shipping_value as shipping,
        ecommerce.total_item_quantity as quantity,

      FROM
  `[PROJECT DETAILS REDACTED].events_20*`
  WHERE
  parse_date('%y%m%d', _table_suffix) between DATE_sub(current_date(), interval 1 day) and  DATE_sub(current_date(), interval 1 day)   
  and 
device.operating_system = 'IOS'
 ), user_sources as (
select
        user_pseudo_id,
        TIMESTAMP_MICROS(event_timestamp) AS ts,
(select max(value.string_value) from unnest(event_params) where key='source' and event_name in( 'campaign_details')) source,
(select max(value.string_value) from unnest(event_params) where key='campaign' and event_name in( 'campaign_details')) campaign
from 
`[PROJECT DETAILS REDACTED].events_20*`
WHERE
   parse_date('%y%m%d', _table_suffix) between DATE_sub(current_date(), interval 90 day) and  DATE_sub(current_date(), interval 1 day)   
and 
event_name in ('campaign_details')
)

   , session_id_created as (
    SELECT
    *,
    SUM(is_session_start_event) OVER (PARTITION BY user_pseudo_id ORDER BY ts) AS session_id
  FROM initial_prep
  ) 
  , session_details as (
  SELECT
  si.user_pseudo_id,
  store, 
  operating_system,
  event_date,
  event_timestamp,
  session_id,
  MAX(is_session_start_event) OVER (PARTITION BY si.user_pseudo_id, session_id) AS has_session_start_event,
  is_session_start_event,
  MAX(is_first_visit_event) OVER (PARTITION BY si.user_pseudo_id, session_id) AS has_first_visit_event,
  is_first_visit_event,
  is_screen_view,
  MAX(event_timestamp) OVER (PARTITION BY si.user_pseudo_id, session_id) AS max_timestamp,
  MIN(event_timestamp) OVER (PARTITION BY si.user_pseudo_id, session_id) AS min_timestamp,
  is_purchase,
  value,
  shipping,
  quantity,
  us.source,
  us.campaign,
  row_number() over (partition by si.user_pseudo_id, event_timestamp order by us.ts desc) rank,
  us.ts time_campaign
  from session_id_created si
  left join user_sources us on us.user_pseudo_id = si.user_pseudo_id and si.ts  >= us.ts  -->= timestamp_sub(us.ts,interval 3600000 MICROSECOND)
 )
  , session_fin as (
  select user_pseudo_id,
  store, 
  operating_system,
  source,
  campaign,
  event_date,
  session_id,
  has_session_start_event,
  has_first_visit_event,
  max_timestamp,
  min_timestamp,
  sum(is_session_start_event) sessions_alt,
  sum(is_screen_view) screen_views,
  sum(value) revenue,
  sum(is_purchase) transactions,
  sum(shipping) shipping,
  sum(quantity) item_quantity
  from session_details
  where rank =1
  group by 
  user_pseudo_id,
  store, 
  event_date,
  operating_system,
  session_id,
  source,
  campaign,
  has_session_start_event,
  has_first_visit_event,
  max_timestamp,
  min_timestamp
  )
 
  select store
  , operating_system
   , source
  , campaign
  , event_date applicabledate
  , sum(sessions_alt) sessions
  , sum(transactions) transactions
  , sum(revenue) local_revenue
  , sum(shipping) local_shipping
  , sum(item_quantity) item_quantity
  , avg(max_timestamp/100000 - min_timestamp/100000)  avgsessionduration
  , count(distinct user_pseudo_id) users
  , count(distinct case when has_first_visit_event = 1 then user_pseudo_id end) new_users
  , sum(screen_views) screenviews
  from session_fin
  group by store, event_date, operating_system
  , source
  , campaign
  order by users desc
/**/
0 Answers
Related