BigQuery与GA4渠道分组数据差异问题求助
GA4与BigQuery渠道分组数据不一致问题排查方案
问题概述
会话和事件数据在GA4与BigQuery中完全一致,但渠道分类结果存在5%-30%的差异,使用GA4默认字段构建了以下CASE语句进行渠道分组,排查后仍未解决问题。
当前使用的渠道分组CASE语句
CASE WHEN (source IS NULL OR source = '(direct)' OR source = '') AND (medium IS NULL OR medium IN ('(not set)', '(none)', '')) THEN 'Direct' WHEN REGEXP_CONTAINS(name, 'cross-network') THEN 'Cross-network' WHEN (REGEXP_CONTAINS(source, 'alibaba|amazon|google shopping|shopify|etsy|ebay|stripe|walmart') OR REGEXP_CONTAINS(name, '^(.*(([^a-df-z]|^)shop|shopping).*)$')) AND REGEXP_CONTAINS(medium, '^(.*cp.*|ppc|retargeting|paid.*)$') THEN 'Paid Shopping' WHEN (REGEXP_CONTAINS(source, 'baidu|bing|duckduckgo|ecosia|google|yahoo|yandex') AND REGEXP_CONTAINS(medium, '^(.*cp.*|ppc|retargeting|paid.*)$')) OR gclid IS NOT NULL THEN 'Paid Search' WHEN REGEXP_CONTAINS(source, 'badoo|facebook|fb|instagram|linkedin|pinterest|tiktok|twitter|whatsapp') AND REGEXP_CONTAINS(medium, '^(.*cp.*|ppc|retargeting|paid.*)$') THEN 'Paid Social' WHEN REGEXP_CONTAINS(source, 'dailymotion|disneyplus|netflix|youtube|vimeo|twitch|vimeo|youtube') AND REGEXP_CONTAINS(medium, '^(.*cp.*|ppc|retargeting|paid.*)$') THEN 'Paid Video' WHEN medium IN ('display', 'banner', 'expandable', 'interstitial', 'cpm') THEN 'Display' WHEN REGEXP_CONTAINS(source, 'alibaba|amazon|google shopping|shopify|etsy|ebay|stripe|walmart') OR REGEXP_CONTAINS(name, '^(.*(([^a-df-z]|^)shop|shopping).*)$') THEN 'Organic Shopping' WHEN REGEXP_CONTAINS(source, 'badoo|facebook|fb|instagram|linkedin|pinterest|tiktok|twitter|whatsapp') OR medium IN ('social', 'social-network', 'social-media', 'sm', 'social network', 'social media') THEN 'Organic Social' WHEN REGEXP_CONTAINS(source, 'dailymotion|disneyplus|netflix|youtube|vimeo|twitch|vimeo|youtube') OR REGEXP_CONTAINS(medium, '^(.*video.*)$') THEN 'Organic Video' WHEN REGEXP_CONTAINS(source, 'baidu|bing|duckduckgo|ecosia|google|yahoo|yandex') OR medium = 'organic' THEN 'Organic Search' WHEN REGEXP_CONTAINS(medium, '^(.*cp.*|ppc|retargeting|paid.*)$') THEN 'Paid Other' WHEN REGEXP_CONTAINS(source, 'email|e-mail|e_mail|e mail') OR REGEXP_CONTAINS(medium, 'email|e-mail|e_mail|e mail') THEN 'Email' WHEN medium = 'affiliate' THEN 'Affiliates' WHEN medium = 'referral' THEN 'Referral' WHEN medium = 'audio' THEN 'Audio' WHEN medium = 'sms' THEN 'SMS' WHEN medium LIKE '%push%' OR REGEXP_CONTAINS(medium, 'mobile|notification') THEN 'Mobile Push Notifications' ELSE 'Unassigned' END
核心排查与修复方向
- 匹配顺序与GA4逻辑对齐:GA4渠道分组遵循「付费渠道优先于免费渠道」的优先级,当前CASE中
Paid Other排在所有有机渠道之后,会导致部分付费流量被误判为有机渠道。需将Paid Other移至所有Organic分组之前,且确保Cross-network、Paid类渠道的顺序与GA4内置逻辑一致。 - 正则表达式大小写匹配:GA4的渠道匹配不区分大小写,但BigQuery的
REGEXP_CONTAINS默认区分大小写。需在正则后添加'i'标志开启不区分大小写匹配,例如:REGEXP_CONTAINS(source, 'alibaba|amazon', 'i')。 - 会话级字段聚合:GA4的渠道分组基于会话首次触达的source/medium,而非事件级字段。需在BigQuery中按
user_pseudo_id和session_id分组,取会话的第一个事件的source/medium进行分类,避免用事件级数据直接聚合。 - Direct渠道逻辑校准:GA4中Direct的判定逻辑为「source为
(direct)且medium为(none)」,或source/medium均未设置。当前CASE的条件包含source = ''和medium = '',需确认GA4是否将这类情况归为Direct,若不一致需调整条件。 - gclid优先级调整:GA4中只要存在
gclid参数,无论source/medium是什么,都会优先归为Paid Search。当前CASE中gclid IS NOT NULL是作为Paid Search条件的OR分支,需将其单独提至Paid Search条件的最前面,确保优先级最高。 - Cross-network匹配逻辑:GA4的Cross-network是基于广告平台的自动标记(如Google Ads的跨网络广告),而非仅通过campaign name匹配。需确认
name字段是否为campaign_name,并补充GA4官方定义的Cross-network触发条件。
内容的提问来源于stack exchange,提问作者Mylan
相关产品推荐
相关产品推荐

