2017-10-17 18 views
0

J'ai la requête SQL suivante, que j'ai reçue du blog Lunametrics. Fonctionne bien. Cependant, ce que je veux être en mesure de faire est d'avoir une colonne supplémentaire montrant la valeur d'une variable personnalisée au niveau de la session.Jours depuis la dernière session - pour les utilisateurs ayant une dimension personnalisée au niveau session - BigQuery - Google Analytics

Ce que j'ai droit est maintenant:

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'))) 

J'ai essayé d'introduire une colonne pour une dimension personnalisée avec un indice de 30, mais sans succès. Fondamentalement, je veux juste être en mesure de voir les jours depuis la dernière session pour les visiteurs qui contenaient cette dimension personnalisée. Mon code pour cela est:

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

EDIT: cela montre que je pensais que je pouvais introduire cette dimension personnalisée comme une nouvelle colonne, mais ne fonctionne pas.

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'))) 

Toute suggestion reçue avec gratitude.

+0

Qu'est-ce que 'hits'? Est-ce la table que vous utilisez? –

+0

Il s'agit du nom de champ pour la dimension personnalisée, qui existe dans les données Google Analytics avec l'index '30'. – user3156990

Répondre

0

MAX est une fonction d'agrégation - vous devez la grouper d'une manière ou d'une autre, soit sur toute la table avec GROUP BY soit dans la rangée, par ex. avec WITHIN RECORD ou WITHIN hits

Pour obtenir des valeurs de dimension personnalisées pour chaque session, vous devez MAX(IF(hits.customdimensions.index = 30,hits.customdimensions.value,NULL)) WITHIN RECORD

Cette ligne est d'abord produit une liste de valeurs pour chaque session (RECORD) et customDimension - la valeur si l'indice est de 30 et NULL sinon: MAX(NULL, NULL, NULL, ..., <value for hits.cd30>, ... , NULL, NULL, ... <another hits.cd30>, ... , NULL)

NULL est la valeur la plus basse possible. Les chaînes sont triées par ordre alphabétique (en réalité par table de code, mais elles contiennent des caractères triés par ordre alphabétique) - puisque vous cumulez des personnalisations au niveau de la session, votre liste peut contenir plusieurs valeurs non nulles pour les sessions avec plus d'un hit. être plusieurs cd30s. MAX() renvoie celle qui est la plus récente dans l'alphabet: "aab" < "aac" < "b"