You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在关联GA4的Google BigQuery中统计页面浏览量与退出次数?

GA4 BigQuery 查询:统计页面浏览量与退出次数

问题描述

在关联GA4的Google BigQuery环境中,需要统计页面浏览量和退出次数(退出次数指会话最后一个事件发生在特定页面的次数,即会话结束于该页面路径的次数)。目前已实现页面浏览量统计,但无法完成退出次数统计,现有代码及数据Schema如下:

现有页面浏览量查询代码

SELECT
  event_params.value.string_value AS page_path,
  COUNT(*) AS page_views
FROM
  `MY_ga4_dataset.events_*`,
  UNNEST(event_params) AS event_params
WHERE
  _table_suffix BETWEEN '20230207' AND '20230207'
  AND event_name = 'page_view'
  AND event_params.key = 'page_location'
GROUP BY
  page_path
ORDER BY
  page_views DESC

GA4 BigQuery 数据Schema

fullnamemodetypedescription
event_dateNULLABLESTRING
event_timestampNULLABLEINTEGER
event_nameNULLABLESTRING
event_paramsREPEATEDRECORD
event_previous_timestampNULLABLEINTEGER
event_value_in_usdNULLABLEFLOAT
event_bundle_sequence_idNULLABLEINTEGER
event_server_timestamp_offsetNULLABLEINTEGER
user_idNULLABLESTRING
user_pseudo_idNULLABLESTRING
privacy_infoNULLABLERECORD
user_propertiesREPEATEDRECORD
user_first_touch_timestampNULLABLEINTEGER
user_ltvNULLABLERECORD
deviceNULLABLERECORD
geoNULLABLERECORD
app_infoNULLABLERECORD
traffic_sourceNULLABLERECORD
stream_idNULLABLESTRING
platformNULLABLESTRING
event_dimensionsNULLABLERECORD
ecommerceNULLABLERECORD
itemsREPEATEDRECORD
event_params.keyNULLABLESTRING
event_params.valueNULLABLERECORD
event_params.value.string_valueNULLABLESTRING
event_params.value.int_valueNULLABLEINTEGER
event_params.value.float_valueNULLABLEFLOAT
event_params.value.double_valueNULLABLEFLOAT
privacy_info.analytics_storageNULLABLESTRING
privacy_info.ads_storageNULLABLESTRING
privacy_info.uses_transient_tokenNULLABLESTRING
user_properties.keyNULLABLESTRING
user_properties.valueNULLABLERECORD
user_properties.value.string_valueNULLABLESTRING
user_properties.value.int_valueNULLABLEINTEGER
user_properties.value.float_valueNULLABLEFLOAT
user_properties.value.double_valueNULLABLEFLOAT
user_properties.value.set_timestamp_microsNULLABLEINTEGER
user_ltv.revenueNULLABLEFLOAT
user_ltv.currencyNULLABLESTRING
device.categoryNULLABLESTRING
device.mobile_brand_nameNULLABLESTRING
device.mobile_model_nameNULLABLESTRING
device.mobile_marketing_nameNULLABLESTRING
device.mobile_os_hardware_modelNULLABLESTRING
device.operating_systemNULLABLESTRING
device.operating_system_versionNULLABLESTRING
device.vendor_idNULLABLESTRING
device.advertising_idNULLABLESTRING
device.languageNULLABLESTRING
device.is_limited_ad_trackingNULLABLESTRING
device.time_zone_offset_secondsNULLABLEINTEGER
device.browserNULLABLESTRING
device.browser_versionNULLABLESTRING
device.web_infoNULLABLERECORD
device.web_info.browserNULLABLESTRING
device.web_info.browser_versionNULLABLESTRING
device.web_info.hostnameNULLABLESTRING
geo.continentNULLABLESTRING
geo.countryNULLABLESTRING
geo.regionNULLABLESTRING
geo.cityNULLABLESTRING
geo.sub_continentNULLABLESTRING
geo.metroNULLABLESTRING
app_info.idNULLABLESTRING
app_info.versionNULLABLESTRING
app_info.install_storeNULLABLESTRING
app_info.firebase_app_idNULLABLESTRING
app_info.install_sourceNULLABLESTRING
traffic_source.nameNULLABLESTRING
traffic_source.mediumNULLABLESTRING
traffic_source.sourceNULLABLESTRING
event_dimensions.hostnameNULLABLESTRING
ecommerce.total_item_quantityNULLABLEINTEGER
ecommerce.purchase_revenue_in_usdNULLABLEFLOAT
ecommerce.purchase_revenueNULLABLEFLOAT
ecommerce.refund_value_in_usdNULLABLEFLOAT
ecommerce.refund_valueNULLABLEFLOAT
ecommerce.shipping_value_in_usdNULLABLEFLOAT
ecommerce.shipping_valueNULLABLEFLOAT
ecommerce.tax_value_in_usdNULLABLEFLOAT
ecommerce.tax_valueNULLABLEFLOAT
ecommerce.unique_itemsNULLABLEINTEGER
ecommerce.transaction_idNULLABLESTRING
items.item_idNULLABLESTRING
items.item_nameNULLABLESTRING
items.item_brandNULLABLESTRING
items.item_variantNULLABLESTRING
items.item_categoryNULLABLESTRING
items.item_category2NULLABLESTRING
items.item_category3NULLABLESTRING
items.item_category4NULLABLESTRING
items.item_category5NULLABLESTRING
items.price_in_usdNULLABLEFLOAT
items.priceNULLABLEFLOAT
items.quantityNULLABLEINTEGER
items.item_revenue_in_usdNULLABLEFLOAT
items.item_revenueNULLABLEFLOAT
items.item_refund_in_usdNULLABLEFLOAT
items.item_refundNULLABLEFLOAT
items.couponNULLABLESTRING
items.affiliationNULLABLESTRING
items.location_idNULLABLESTRING
items.item_list_idNULLABLESTRING
items.item_list_nameNULLABLESTRING
items.item_list_indexNULLABLESTRING
items.promotion_idNULLABLESTRING
items.promotion_nameNULLABLESTRING
items.creative_nameNULLABLESTRING
items.creative_slotNULLABLESTRING

解决方案

要统计退出次数,核心是先识别每个会话的最后一个事件,再判断该事件是否为page_view并关联对应的页面路径。以下是合并页面浏览量和退出次数的完整查询:

WITH session_last_events AS (
  -- 获取每个会话的最后一个事件时间戳
  SELECT
    user_pseudo_id,
    (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
    MAX(event_timestamp) AS last_event_timestamp
  FROM
    `MY_ga4_dataset.events_*`
  WHERE
    _table_suffix BETWEEN '20230207' AND '20230207'
  GROUP BY
    user_pseudo_id, session_id
),
exit_pages AS (
  -- 匹配会话最后事件对应的页面路径(仅统计最后事件为page_view的情况)
  SELECT
    ep.value.string_value AS page_path,
    COUNT(*) AS exits
  FROM
    `MY_ga4_dataset.events_*` e
  JOIN
    session_last_events sle
    ON e.user_pseudo_id = sle.user_pseudo_id
    AND (SELECT value.int_value FROM UNNEST(e.event_params) WHERE key = 'ga_session_id') = sle.session_id
    AND e.event_timestamp = sle.last_event_timestamp
  LEFT JOIN
    UNNEST(e.event_params) ep
    ON ep.key = 'page_location'
  WHERE
    _table_suffix BETWEEN '20230207' AND '20230207'
    AND e.event_name = 'page_view'
  GROUP BY
    page_path
),
page_views AS (
  -- 复用原有页面浏览量统计逻辑
  SELECT
    event_params.value.string_value AS page_path,
    COUNT(*) AS page_views
  FROM
    `MY_ga4_dataset.events_*`,
    UNNEST(event_params) AS event_params
  WHERE
    _table_suffix BETWEEN '20230207' AND '20230207'
    AND event_name = 'page_view'
    AND event_params.key = 'page_location'
  GROUP BY
    page_path
)
-- 合并浏览量与退出次数,确保所有页面都能展示数据
SELECT
  COALESCE(p.page_path, e.page_path) AS page_path,
  COALESCE(p.page_views, 0) AS page_views,
  COALESCE(e.exits, 0) AS exits
FROM
  page_views p
FULL OUTER JOIN
  exit_pages e
  ON p.page_path = e.page_path
ORDER BY
  page_views DESC

逻辑说明

  1. session_last_events:通过user_pseudo_id(用户标识)和ga_session_id(GA4会话ID)分组,提取每个会话的最后事件时间戳。
  2. exit_pages:将原始事件表与会话最后事件表关联,筛选出会话最后一个事件是page_view的记录,统计每个页面的退出次数。
  3. page_views:直接复用你原有的页面浏览量统计逻辑。
  4. 最后通过全外连接合并两个结果集,确保所有页面都能展示浏览量和退出次数(无对应数据时显示0)。

注意事项

  • 确认ga_session_id参数存在:GA4默认会在事件中携带该参数,若未找到需检查事件采集配置。
  • 统一时间范围:所有CTE中的_table_suffix过滤条件需保持一致,避免数据不匹配。

内容的提问来源于stack exchange,提问作者John Owen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:20:20