【问题标题】:How to get traffic source data of 'current session' in GA4 - bigquery export?如何在 GA4 - bigquery 导出中获取“当前会话”的流量源数据?
【发布时间】:2022-06-17 05:37:19
【问题描述】:

我一个月前将我的 GA4 帐户与 BigQuery 项目相关联。

借助原始数据,我想获得各种数据和见解,包括 GA 当前提供的许多功能。其中之一是转换路径。我想查看我的用户使用转换路径从哪些媒体/来源中获得。为此,流量来源或媒介/活动/来源值是必要的。尽管如此,Google Bigquery Export 模式的帮助页面显示流量来源是“首先获得用户的流量来源的名称”。 https://support.google.com/firebase/answer/7029846?hl=en

因此,对于每个用户来说,流量来源似乎总是相同的,我无法跟踪进行转化的媒介/来源用户的路径。我也尝试在大查询模式的 event_param 列中提取 page_location 的 utm 代码,但似乎不正确。

例如,第一张图片是 GA4 转化路径中最后一个媒体的值计数。 第二个是我从 BigQuery 数据的 page_location/page_referrer 中提取的最后一个媒体的值计数。周期相同,因此转换的总数相同。不过媒介的数量不同。

value counts of the last medium in conversion path of GA4

Value counts of last medium that I extracted from page_location/page_referrer of the BigQuery data

我的问题是如何在 BigQuery 的原始数据中获取每个会话的流量来源?

任何想法或线索将不胜感激。 非常感谢。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    来自 GA4 导出的数据是基于事件的,而不是基于会话的,所以听起来您想做的是将事件数据汇总到会话内容中。

    这个查询会这样做:

    SELECT
        user_pseudo_id,
        TIMESTAMP_MICROS(event_timestamp) AS session_start_ts,
        CAST(LEAD(TIMESTAMP_MICROS(event_timestamp),1) OVER (PARTITION BY CONCAT(user_pseudo_id)
          ORDER BY
            event_timestamp) AS timestamp) AS session_end_ts,
        (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
        (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_number') AS session_number,
        (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') AS referrer,
        (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS landing_page_path,
        (SELECT value.string_value FROM UNNEST(event_params) WHERE event_name = 'page_view' AND key = 'page_title') AS landing_page_title,
        traffic_source.name,
        traffic_source.medium,
        traffic_source.source,
        CASE
        WHEN device.category = "desktop" THEN "desktop"
        WHEN device.category = "tablet" AND app_info.id IS NULL THEN "tablet-web"
        WHEN device.category = "mobile" AND app_info.id IS NULL THEN "mobile-web"
        WHEN device.category = "tablet" AND app_info.id IS NOT NULL THEN "tablet-app"
        WHEN device.category = "mobile" AND app_info.id IS NOT NULL THEN "mobile-app"
        END AS device,
        device.mobile_brand_name,
        device.mobile_model_name,
        device.mobile_marketing_name,
        device.mobile_os_hardware_model,
        device.operating_system,
        device.operating_system_version,
        device.vendor_id,
        device.advertising_id,
        device.language,
        device.is_limited_ad_tracking,
        device.time_zone_offset_seconds,
        device.browser,
        device.browser_version,
        device.web_info.browser,
        device.web_info.browser_version,
        device.web_info.hostname
      FROM
        `[my_project].analytics_[my_id].events*` s -- modify to your project
      WHERE
        event_name = 'session_start'
        order by 1,2
        
        LIMIT 500
    

    此代码的全部功劳归于 Rittman Analytics 上的以下文章,我认为这对您开始将 GA4 导出到 BigQuery 时非常有益: https://rittmananalytics.com/blog/2021/7/25/event-based-analytics-and-bigquery-export-comes-to-google-analytics-4-how-does-it-worknbsp-and-whats-thenbspcatch

    【讨论】:

    • 嗨,本!感谢您的回复。我已经将事件汇总为会话,但我想要做的是获取会话(或至少事件)的流量来源。如果 GA4 是基于事件的,我想获取名称为 session_start 的事件的流量来源,以便我可以按会话进行合并。
    • 嘿@JihyunKim - 这个查询专门针对session_start 事件,它没有给你你期望看到的东西吗?
    • 嗨@Ben!当事件名称为 session_start 时,此查询准确返回流量来源/媒体/名称,非常感谢。但问题是 BigQuery Schema 的 traffic_souce 列是第一个获取用户的流量源的名称。,所以它是指第一个流量,而不是会话流量。这就是我迷路的地方..
    • 嘿@JihyunKim - 抱歉,我不确定我是否理解,流量来源和媒体在会话期间不会改变,它们只与会话的获取方式有关,所以在开始时查看它们session 应该在整个 session 中代表他们。
    • @JihyunKim 的意思是traffic_source 显示用户有史以来第一次 次访问网站的指标。例如。如果一周前用户通过 google 并在几天后通过 facebook 访问该网站,traffic_source 仍将显示 facebook
    【解决方案2】:

    如果你还在寻找答案,我是这样做的:

    select
    event_date,
    user_pseudo_id,
    
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') as page_referrer,
    
    
        CONCAT(user_pseudo_id,(select value.int_value from unnest(event_params) where key = 'ga_session_id')) as session_id,
        CASE
        WHEN ( SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') IS NULL THEN '(direct)'
        ELSE ((select value.string_value from unnest(event_params) where key = 'medium' )) 
        END as session_medium,
        CASE
        WHEN ( SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') IS NULL THEN '(none)'
        ELSE ((select value.string_value from unnest(event_params) where key = 'source')) 
        END as session_source,
        CASE
        WHEN ( SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') IS NULL THEN '(none)'
        ELSE ((select value.string_value from unnest(event_params) where key = 'campaign')) 
        END as session_campaign,
        CASE
        WHEN ( SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'content') IS NULL THEN '(none)'
        ELSE((select value.string_value from unnest(event_params) where key = 'content')) 
        END as session_content,
        
       
    from
    `ga4.analytics_308612563.events_*`
    where event_name = "page_view"
    and (select value.int_value from unnest(event_params) where key = 'entrances' ) = 1
    

    因此,基本上您是通过过滤入口 = 1 来查找第一个页面视图。对于我的用例,我将此查询用作 CTE,然后为我正在寻找的其他事件执行另一个 CTE。然后根据 user_pseudo_id 和 ga_session_id 在会话 id 上加入两个临时表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-21
      • 2023-01-31
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      相关资源
      最近更新 更多