试图获得一个清单:
访客,首次访问,交易发生的时间。
我写的只是抓取具有交易收入的行。我也试图将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;
答案 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展示如何计算时间。