2017-10-17 22 views
0

我有以下SQL查詢,這是我從Lunametrics博客了。工作正常。但是,我希望能夠做的是有一個額外的列顯示會話級別自定義變量的值。- 爲了與會話級自定義維度的用戶 - 的BigQuery - 谷歌Analytics(分析)

我有現在的問題是:

SELECT 
    fullvisitorid, 
    visitId, 
    DATEDIFF(SEC_TO_TIMESTAMP(visitStartTime), 
SEC_TO_TIMESTAMP(prevVisitStartTime)) AS daysSinceLastSession, 
FLOOR((visitStartTime - prevVisitStartTime)/60) as minutesSinceLastSession 
FROM (
SELECT 
fullvisitorid, 
visitId, 
visitStartTime, 
LAG(visitStartTime) OVER (PARTITION BY fullvisitorid ORDER BY visitStartTime 
ASC) AS prevVisitStartTime 
FROM 
TABLE_DATE_RANGE([DATA], 
TIMESTAMP ('2017-04-01'), 
TIMESTAMP ('2017-04-08'))) 

我一直在試圖引進一個列索引30自定義尺寸,但沒有成功。基本上,我只是希望能夠看到自上次會議以來包含此自定義維度的訪問者的日子。我對這個代碼是:

max(case when hits.customdimensions.index = 30 then hits.customdimensions.value end) customerId 

編輯:這表明我是多麼想我可以介紹這個自定義維度作爲一個新列,但不起作用。

SELECT 
fullvisitorid, 
max(case when hits.customdimensions.index = 30 then 
hits.customdimensions.value end) customerId, 
visitId, 
DATEDIFF(SEC_TO_TIMESTAMP(visitStartTime), 
SEC_TO_TIMESTAMP(prevVisitStartTime)) AS daysSinceLastSession, 
FLOOR((visitStartTime - prevVisitStartTime)/60) as minutesSinceLastSession 
FROM (
SELECT 
    fullvisitorid, 
    max(case when hits.customdimensions.index = 30 then 
    hits.customdimensions.value end) customerId, 
    visitId, 
    visitStartTime, 
    LAG(visitStartTime) OVER (PARTITION BY fullvisitorid ORDER BY 
    visitStartTime ASC) AS prevVisitStartTime, 



    FROM 
    TABLE_DATE_RANGE([DATA], 
    TIMESTAMP ('2017-04-01'), 
    TIMESTAMP ('2017-04-08'))) 

任何建議感激地收到。

+0

什麼是'hits'?它是你使用的桌子嗎? –

+0

這是自定義維度,它存在於與「30」的索引中的谷歌Analytics(分析)數據的字段名。 – user3156990

回答

0

MAX是聚合函數 - 你要組不知何故,無論是在整個表GROUP BY或行內,例如與WITHIN RECORDWITHIN hits

要獲得自定義維度值,每次需要MAX(IF(hits.customdimensions.index = 30,hits.customdimensions.value,NULL)) WITHIN RECORD

此行是第一個生產值的列表,每個會話(RECORD)和customDimension會議 - 該值,如果指數爲30,NULL否則: MAX(NULL, NULL, NULL, ..., <value for hits.cd30>, ... , NULL, NULL, ... <another hits.cd30>, ... , NULL)

其中NULL是可能的最低值。字符串按字母順序排序(實際上是由代碼表,但它們包含按字母順序排序字符) - 因爲你在會話級聚合匹配級customDimensions您的列表可能包含一個以上的命中會話多非空值,因爲有可能是多個CD30。 MAX()返回在字母表裏排在最新的一個:"aab" < "aac" < "b"

相關問題