【发布时间】:2014-12-25 02:56:19
【问题描述】:
很抱歉这个具体问题,但我觉得我已经走到了死胡同,因为我对 SQL 的了解并没有那么远。
来自 GoogleAnalytics 原始数据的 BigQuery 实现的数据如下所示:
|-visitId
|- date
|- (....)
+- hits
|- time
+- customDimensions
|- index
|- value
+- customMetrics
|- index
|- value
我知道有些点击总是会向 GA 发送一些数据。具体来说,我想要 customDimensions.index= 43、customDimensions.index= 24 和 customMetrics.index=14。具体来说,维度 43 是被看到或出售的对象,维度 24 告诉我它们是否被看到,而度量 14,当它刚刚被出售时,该值为 1。 我的最终结果应该是这样的:
customDimension.value( when index=43) count(when customDimension.index=24 and customDimension.value=='ficha') count(when customMetrics.index=14 and customMetrics.value ==1))
按 customDimension.value 分组(当 index=43 时) 我知道每次使用 customMetrics.index=14 发送命中时,相同的命中都有 customDimensions.index=43,同样地,customDimensions.index=24 总是有 customDimensions.index=43。 我实际上设法创建了一个 SQL 来做我想做的事情,但是,代价是什么?它很大,很慢,很丑。我目前正在做的是:
- 创建三个表,分别有visitId、hit.time和index=14,24,43时的值
- Left join 43 with 24 ON 43.visitId==24.visitId AND 43.hits.time==24.hits.time 结果
- 14 ON 14.visitId==result.visitId AND 14.hits.time==result.hits.time 的左连接结果
我对 visitId 或 hits.time 不感兴趣,这只是关联相同点击的一种方式(并且知道他们在 customMetrics.index=14 和 value=1 时购买了哪些产品。
这是我的代码:
SELECT Tviviendasvisitas.viviendaId as ViviendaID ,sum(Tviviendasvisitas.NumeroVisitas) as NumeroVisitas,sum(Ttransacciones.Transactions) as Transactions FROM (
SELECT Tviviendas.visitId as visitId, Tviviendas.hits.time as visitTime, Tviviendas.ViviendaID as viviendaId,Tvisitas.visitas as NumeroVisitas FROM (
SELECT visitId,hits.time,hits.customDimensions.value as ViviendaID FROM ((TABLE_DATE_RANGE([-------.ga_sessions_], TIMESTAMP('2014-09-01'), TIMESTAMP('2014-09-30'))))
WHERE hits.customDimensions.index = 43
GROUP EACH BY visitId,hits.time, ViviendaID)as Tviviendas
LEFT JOIN EACH(
SELECT visitId,hits.time,count(*) as visitas FROM ((TABLE_DATE_RANGE([-------.ga_sessions_], TIMESTAMP('2014-09-01'), TIMESTAMP('2014-09-30'))))
WHERE hits.customDimensions.index = 24 AND hits.customDimensions.value=='ficha'
GROUP EACH BY visitId,hits.time) as Tvisitas
ON Tvisitas.visitId==Tviviendas.visitId AND Tvisitas.time==Tviviendas.time) as Tviviendasvisitas
LEFT JOIN EACH (
SELECT visitId ,hits.time as transactionTime, sum(hits.customMetrics.value) as Transactions FROM(TABLE_DATE_RANGE([-------.ga_sessions_], TIMESTAMP('2014-09-01'), TIMESTAMP('2014-09-30')))
WHERE hits.customMetrics.index = 14 AND hits.customMetrics.value=1
GROUP BY visitId, transactionTime) as Ttransacciones
ON Tviviendasvisitas.visitId==Ttransacciones.visitId AND Tviviendasvisitas.visitTime==Ttransacciones.transactionTime
GROUP BY ViviendaID
运行此查询需要花费太多时间来创建带有结果的适当仪表板。
如果这是我的最终结果,请帮助我。我觉得应该有一个更优雅的解决方案来解决这个问题,但我似乎无法自己找到它。
帮助?
【问题讨论】:
-
也许这就是要走的路。
标签: sql google-analytics google-bigquery