大查询 - Google Analytics(分析) - 首次访问和购买之间的时差

时间:2015-03-11 20:13:09

标签: google-analytics google-bigquery

试图获得一个清单:

访客,首次访问,交易发生的时间。

我写的只是抓取具有交易收入的行。我也试图将visitStartTime(这是一个unix日期)转换为通过Date(visitStartTime)的常规日期,但由于输出日期而在组中失败。

任何方向超级有用。

SELECT 
  fullvisitorID, 
  visitNumber,
  visitStartTime,
  hits.transaction.transactionRevenue

FROM 
  [75718103.ga_sessions_20150310],
  [75718103.ga_sessions_20150309],
  [75718103.ga_sessions_20150308],
  [75718103.ga_sessions_20150307],
  [75718103.ga_sessions_20150306],
  [75718103.ga_sessions_20150305],
  [75718103.ga_sessions_20150304],
  [75718103.ga_sessions_20150303],
  [75718103.ga_sessions_20150302],


WHERE totals.transactions >=1

GROUP BY    
  fullvisitorID, visitNumber, visitStartTime, hits.transaction.transactionRevenue;

2 个答案:

答案 0 :(得分:7)

visitStartTime在Google Analytics架构中定义为POSIX时间,这意味着自纪元以来的秒数。 BigQuery TIMESTAMP自编号以来被编码为秒的数量。因此,为了获得TIMESTAMP的开始时间,我使用了TIMESTAMP(INTEGERvisitStartTime*1000000))。 hits.time包含自首次命中后的 milli 秒数,因此为了获得事务时间,需要将它们乘以1000以获得微秒粒度,因此TIMESTAMP(INTEGER(visitStartTime*1000000 + hits.time*1000))。由于匹配重复RECORD,因此不需要GROUP BY,数据模型已将所有命中组合在一起。 把它们放在一起:

SELECT
  fullVisitorId,
  timestamp(integer(visitStartTime*1000000)) as start_time, 
  timestamp(integer(visitStartTime*1000000 + hits.time*1000)) as transaction_time
FROM 
 [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] 
WHERE hits.transaction.transactionRevenue > 0

答案 1 :(得分:1)

Mosha的解决方案简单而优雅,但过于简单,实际上它计算了一次访问中第一次网页浏览和每次交易之间的时间,因此它不计算第一次访问和一次访问者的第一次交易之间的时间。因此,如果使用Mosha的查询计算平均时间,则为1.33分钟。但是如果你使用我创建的查询,它将是9.91分钟。我的SQL技能非常生锈,所以可能会有所改进。

Masha的查询(平均一次访问中第一次浏览和每次交易之间的时间):

SELECT ROUND(AVG(MinutesToTransaction),2) AS avgMinutesToTransaction FROM (
    SELECT
        fullVisitorId,
        timestamp(integer(visitStartTime*1000000)) as start_time, 
        timestamp(integer(visitStartTime*1000000 + hits.time*1000)) as transaction_time,
        ROUND((TIMESTAMP_TO_SEC(timestamp(integer(visitStartTime*1000000 + hits.time*1000))) - TIMESTAMP_TO_SEC(timestamp(integer(visitStartTime*1000000)) )) / 60, 2) AS MinutesToTransaction
    FROM 
        [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] 
    WHERE hits.transaction.transactionRevenue > 0
)

我的查询(平均第一次访问和一位访问者的第一次交易之间的时间):

SELECT ROUND(AVG(MinutesToTransaction),2) AS avgMinutesToTransaction FROM (
    SELECT firstInteraction.fullVisitorId, 
        MIN(firstInteraction.visitId) AS firstInteraction.visitId,
        TIMESTAMP(INTEGER(MIN(firstInteraction.visitStartTime)*1000000)) AS timeFirstInteraction,
        firstTransaction.visitId,
        firstTransaction.timeFirstTransaction,
        FIRST(BOOLEAN(firstInteraction.visitId = firstTransaction.visitId)) AS transactionInFirstVisit,
        ROUND((TIMESTAMP_TO_SEC(firstTransaction.timeFirstTransaction) - TIMESTAMP_TO_SEC(TIMESTAMP(INTEGER(MIN(firstInteraction.visitStartTime)*1000000)))) / 60, 2) AS MinutesToTransaction
    FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] firstInteraction
    INNER JOIN (
        SELECT
            fullVisitorId,
            visitId,
            TIMESTAMP(INTEGER(MIN(visitStartTime*1000000 + hits.time*1000))) AS timeFirstTransaction
        FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] 
        WHERE hits.type = "TRANSACTION"
        GROUP BY 1, 2
    ) AS firstTransaction
    ON  firstInteraction.fullVisitorId = firstTransaction.fullVisitorId
    GROUP BY 1, 4, 5
)

我留下了一些额外的字段,所以如果你在没有第一个SELECT的情况下使用它,你可以看到一些有趣的数据。

Ps:感谢Mosha展示如何计算时间。