应用电子商务操作过滤器时,Big Query 和 Google Analytics UI 不匹配

Posted

技术标签:

【中文标题】应用电子商务操作过滤器时,Big Query 和 Google Analytics UI 不匹配【英文标题】:Big Query and Google Analytics UI do not match when ecommerce action filter applied 【发布时间】:2018-01-26 00:01:43 【问题描述】:

我们正在验证 Big Query 中的查询,但无法获得与谷歌分析 UI 匹配的结果。可以在here 找到类似的问题,但在我们的案例中,仅当我们对 ecommerce_action.action_type 应用特定过滤器时才会出现不匹配。

这里是查询:

SELECT COUNT(distinct fullVisitorId+cast(visitid as string)) AS sessions
FROM (
  SELECT
    device.browserVersion,
    geoNetwork.networkLocation,
    geoNetwork.networkDomain,
    geoNetwork.city,
    geoNetwork.country,
    geoNetwork.continent,
    geoNetwork.region,
    device.browserSize,
    visitNumber,
    trafficSource.source,
    trafficSource.medium,
    fullvisitorId,
    visitId,
    device.screenResolution,
    device.flashVersion,
    device.operatingSystem,
    device.browser,
    totals.pageviews,
    channelGrouping,
    totals.transactionRevenue,
    totals.timeOnSite,
    totals.newVisits,
    totals.visits,
    date,
    hits.eCommerceAction.action_type
  FROM
    (select * 
     from TABLE_DATE_RANGE([zzzzzzzzz.ga_sessions_], 
    <range>) ))t
WHERE
 hits.eCommerceAction.action_type = '2' and <stuff to remove bots>
  )

从使用内置购物行为报告的 UI 中,我们得到 3.836M 的带有产品详细信息视图的唯一会话,而使用上述查询的 Big Query 中的唯一会话为 3.684 万。

几个问题: 1) 我们的印象是购物行为报告“带有产品视图的会话”细分基于 ecommerce_action.actiontype 过滤器。真的吗? 2) 是否有 UI 可能从中提取的 .totals 预聚合表?

【问题讨论】:

请注意,COUNT(DISTINCT ...) 是使用旧版 SQL 时的近似值。请改用标准 SQL(首选)或将 EXACT_COUNT_DISTINCT 与旧版 SQL 一起使用。 是的,我们发现在#measure 中指出 EXACT_COUNT_DISTINCT 后,我们的误差在 0.3% 以内。感谢您的确认! 在检索您不会使用的列时也要小心,这会使您的查询更加昂贵。我建议遵循 Elliott 的建议,标准 SQL 比传统 SQL 更强大。 @ElliottBrossard:提升回答? ;-) 添加了一些链接作为答案(不过,我不确定是否还有其他原因造成了这种差异)。 【参考方案1】:

听起来问题是COUNT(DISTINCT ...) 是使用旧版 SQL 时的近似值,as noted in the migration guide,因此计数不准确。请改用 standard SQL(首选)或将 EXACT_COUNT_DISTINCT 用于旧版 SQL。

【讨论】:

【参考方案2】:

您在查询中包含产品列表视图。 正如https://support.google.com/analytics/answer/3437719 中所述,您需要确保没有产品具有isImpression = TRUE,因为这意味着它是一个产品列表视图。

此查询汇总了包含所有 isProduct 为 null 或 false 的 action_type='2' 的所有会话:

SELECT
  SUM(totals.visits) AS sessions
FROM
  `project.123456789.ga_sessions_20180101` AS t
WHERE
  (
  SELECT
    LOGICAL_OR(h.ecommerceaction.action_type='2')
  FROM
    t.hits AS h
  WHERE
    (SELECT LOGICAL_AND(isimpression IS NULL OR isimpression = FALSE) FROM h.product))

对于 legacySQL,您可以修改文档中的示例。

【讨论】:

这个答案最接近界面。我相信这是因为总计列是 UI 实际访问的预先计算的指标。我不明白为什么这些值与手动求和不同,但这是一个不同的问题。谢谢!【参考方案3】:

除了COUNT(DISTINCT ...) 是使用旧版 SQL 时的近似值这一事实之外,还可能存在只有非交互式点击的会话,这些会话在 Google Analytics(分析)用户界面中不会被计为会话,但它们会被计入COUNT(DISTINCT ...)EXACT_COUNT_DISTINCT(...) 因为在您的查询中它们计算访问 ID。

使用SUM(totals.visits),您应该得到与 UI 中相同的结果,因为 SUM 不考虑 totals.visits 的 NULL 值(对应于只有非交互式点击的会话)。

【讨论】:

以上是关于应用电子商务操作过滤器时,Big Query 和 Google Analytics UI 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Big Query 过滤自定义查询创建表的空行

如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?

应用程序制造商:在网格中显示 Big Query 数据

使用 Google Big Query 在 Google App 脚本上超过最大执行时间

在 Big Query 中创建表

将存储在 Google Cloud Storage 中的文件加载到 Big Query 时出错