BigQuery 超算交易

Posted

技术标签:

【中文标题】BigQuery 超算交易【英文标题】:BigQuery over-counting transactions 【发布时间】:2018-05-11 21:57:09 【问题描述】:

我正在尝试获取指标(会话、用户、新用户、进入、跳出)以及特定来源、广告类型和自定义维度的交易。返回的会话似乎是正确的,但事务是重复的。我不确定如何将点击级别的自定义维度与会话级别的指标混合使用。

任何想法如何更改查询,以免重复值?

#Standard-SQL
SELECT
  trafficSource.source AS source,
  trafficSource.adContent AS adContent,
  (CASE WHEN hcd.index = 10 THEN hcd.value END) Destination,
  COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING) )) Sessions,
  COUNT(totals.transactions) transactions
FROM `cc-bigquery-venture.534939.ga_sessions_*`,
UNNEST(hits) as hit,
UNNEST(hit.customdimensions) as hcd
WHERE
_TABLE_SUFFIX BETWEEN '20170101' AND '20170131'
GROUP BY
  source,
  adContent,
  Destination
HAVING 
  Destination IS NOT NULL
AND
  Destination !=''
AND 
  source = 'dfa' AND adContent = 'vacationcore'
ORDER BY
  Destination ASC

【问题讨论】:

【参考方案1】:

BigQuery 标准 SQL 如下

#StandardSQL
SELECT
  trafficSource.source AS source,
  trafficSource.adContent AS adContent,
  (
    SELECT ANY_VALUE(hcd.value) 
    FROM UNNEST(hits) AS hit,
      UNNEST(hit.customdimensions) AS hcd
    WHERE hcd.index = 10
  ) Destination,
  COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING) )) Sessions,
  SUM(totals.transactions) transactions
FROM `cc-bigquery-venture.534939.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN '20170101' AND '20170131'
GROUP BY source, adContent, Destination
HAVING Destination IS NOT NULL
AND Destination !=''
AND source = 'dfa' AND adContent = 'vacationcore'
ORDER BY Destination ASC

【讨论】:

@ElliottBrossard - 谢谢 Elliott!我认为我最初把它放在那里的原因 - 是在结果中显示 0(零)而不是 NULL - 对于给定组根本没有任何事务的情况。但最好不要在 SUM 内部,而是在外部 :o) 啊,明白了。无论如何,很好的答案:) OP 最大的收获应该是对数组的子选择,这可以在会话级别进行分析。

以上是关于BigQuery 超算交易的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:识别交易前的所有命中

使用交易复制 BigQuery 中的内部促销报告

BigQuery - 为啥在 Google Analytics 中提取交易数据不需要 UNNEST 运算符?

BigQuery 中带有会话 ID 的 Google Analytics(分析)交易 ID

BigQuery 重复的 rank() 数字

取消嵌套自定义维度会复制/夸大 BigQuery 中的交易收入