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

Posted

技术标签:

【中文标题】BigQuery 中带有会话 ID 的 Google Analytics(分析)交易 ID【英文标题】:Google Analytics Transactions Ids with Session Ids in BigQuery 【发布时间】:2018-06-20 14:40:44 【问题描述】:

我正在使用 BigQuery 中的 Google Analytics(分析)数据,并尝试将会话 ID 与交易 ID 结合起来。我遇到了一些困难,因为我还不明白如何将会话 ID(与我在 WHERE 子句中使用的totals.visits = 1 的 GA UI 匹配)与事务 ID(UNNEST(hits))结合起来。条件:数据应与GA UI匹配。

期望的结果

日期 |会话 ID |交易 ID 2019-06-18 00:00:00.000 UTC | 400101010101 |啊啊啊 2019-06-18 00:00:00.000 UTC | 400202010102 | BBBBBBB 2019-06-18 00:00:00.000 UTC | 400303010103 |中国交建

用于检索时间戳和 SessionIds 的当前查询

#standardSQL
SELECT
TIMESTAMP(PARSE_DATE('%Y%m%d', date)) AS Date,
CONCAT(fullVisitorId, CAST(visitId AS STRING) ) AS SessionID 
COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitId AS STRING) )) AS Sessions, /* verify match with GA UI*/
FROM
`ga-xxxxx.yyyyyyyy_sessions_20*`
WHERE
_TABLE_SUFFIX = '180618'
AND totals.visits = 1
GROUP BY
1,2

使用 TransactionID 进行的当前查询

当使用 hits.transaction.transactionIdUNNEST(hits) 扩展查询时,我得到的记录比在 GA UI 中更多。似乎查询正在计算 SessionID 和 TransactionID。

#standardSQL
SELECT
TIMESTAMP(PARSE_DATE('%Y%m%d', date)) AS Date,
CONCAT(fullVisitorId, CAST(visitId AS STRING) ) AS SessionID, 
hits.transaction.transactionId AS transactionId, 
COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitId AS STRING) )) AS Sessions, /* verify match with GA UI*/
FROM
`ga-xxxxx.yyyyyyyy_sessions_20*`,                                  
 UNNEST(hits) AS hits
WHERE
_TABLE_SUFFIX = '180618'
AND totals.visits = 1
GROUP BY
1,2,3

在数据与 GA UI 匹配的条件下,如何将 SessionIDhits.transaction.transactionId 放入查询中?

希望有人能帮帮我。

谢谢。

【问题讨论】:

【参考方案1】:

要将 GA 用户界面中的会话数与 BigQuery 匹配,您可以像这样计算会话数:

CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)) AS sessions

然后,如果您想查看会话 ID 和事务 ID,您可以执行以下操作:

    SELECT Date,
    CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)) AS visit_ref,
    hits.transaction.transactionID AS transaction_id
    FROM `xxx.xxx.ga_sessions_20180619`
      CROSS JOIN UNNEST(hits) AS hits
    WHERE hits.transaction.transactionID IS NOT NULL
    GROUP BY Date, visit_ref, transaction_id

请注意,我已经删除了所有未在上面进行交易的会话,但如果您希望它们存在,可以删除此 WHERE 子句。

如果您使用此方法获得更多行,那么请考虑您可能有用户下多个订单的会话,您可以通过使用STRING_AGG 在会话 ID 旁边列出所有事务 ID 来对此有所了解,在下面的示例中,我还计算了它们并按此计数排序:

   SELECT Date,
   CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)) AS visit_ref,
   STRING_AGG(hits.transaction.transactionID) AS transaction_id, 
   COUNT(DISTINCT hits.transaction.transactionId) AS orders
   FROM `xxx.xxx.ga_sessions_20180619`
     CROSS JOIN UNNEST(hits) AS hits
   WHERE hits.transaction.transactionID IS NOT NULL
   GROUP BY Date, visit_ref
   ORDER BY orders DESC

【讨论】:

以上是关于BigQuery 中带有会话 ID 的 Google Analytics(分析)交易 ID的主要内容,如果未能解决你的问题,请参考以下文章

从 BigQuery 中的单个用户事件流构建会话

Spring Web 应用程序中带有 Ajax 轮询的会话超时

在 Google 跟踪代码管理器中使用 GA Bigquery 导出架构变量

Tomcat 中带有过期日期的 JSESSIONID Cookie

BigQuery UNNEST 无结果

在 GA360 Bigquery 数据中,用户访问如何分解为 GA360 会话?