GA与BigQuery加入购物车数据匹配问题:计数不符排查
我帮你梳理下这个数据差异的核心原因,以及对应的修正方法:
核心差异原因
1. 页面过滤维度不匹配
你在BigQuery里用了hits_product.productlistname = 'my_page_url'作为过滤条件,但GA界面里“特定页面”的加购统计,本质是加购动作发生的页面(也就是用户点击加购按钮时所在的页面URL),对应BigQuery里的hits.page.pagePath字段,而不是商品的productlistname。
productlistname是GA中用来标记商品所在的产品列表名称(比如“首页推荐商品”“分类页爆款”),很多时候它和页面URL并不一致。如果你的加购动作来自该页面,但商品的productlistname不是这个URL,那这些数据就会被你的查询过滤掉,导致计数偏少。
2. UNNEST嵌套导致的数据丢失
你的查询同时UNNEST(hits)和UNNEST(hits.product),但如果某个加购动作(action_type=3)对应的hit里没有product数据(比如数据采集异常、加购的是无SKU的虚拟商品等),这个hit会被UNNEST(hits.product)完全排除,不会进入统计。而GA界面通常会统计这类有明确加购动作但无商品信息的记录,所以结果会比你的查询多。
另外你提到“移除页面过滤后全天数据匹配”,这是因为全天范围内,大部分加购动作的productlistname刚好和统计维度匹配,或者无product的加购占比极低,整体差异被抵消了,但特定页面下这个差异就凸显出来了。
修正后的查询
根据你要统计的维度,分两种情况给出查询:
情况1:统计加购动作次数(和GA界面“加入购物车操作”的定义一致,即点击一次加购按钮算一次,不管一次加购几个商品)
SELECT date, COUNT(DISTINCT CONCAT(fullvisitorid, CAST(visitid AS string), CAST(hits.hitNumber AS string))) AS total_add_actions FROM `project.dataset.ga_sessions_20191208` AS t, UNNEST(hits) AS hits WHERE hits.page.pagePath = 'my_page_url' -- 改为动作发生的页面URL AND hits.eCommerceAction.action_type = '3' GROUP BY date
情况2:统计商品被加购的次数(一次加购多个商品算多次,比如加购3个商品计为3次)
SELECT date, SUM(CASE WHEN hits.eCommerceAction.action_type = '3' THEN 1 ELSE 0 END) AS total_add_product_count FROM `project.dataset.ga_sessions_20191208` AS t, UNNEST(hits) AS hits, UNNEST(hits.product) AS hits_product WHERE hits.page.pagePath = 'my_page_url' -- 改为动作发生的页面URL AND hits.eCommerceAction.action_type = '3' GROUP BY date
你可以先确认GA界面的“1,669次”是动作次数还是商品加购次数,然后对应使用上面的查询,应该就能和GA的结果匹配了。
内容的提问来源于stack exchange,提问作者Ben P

