2017-10-17 2 views
0

Ich habe die folgende SQL-Abfrage, die ich vom Lunametrics-Blog erhalten habe. Funktioniert gut. Was ich jedoch möchte, ist eine zusätzliche Spalte, die den Wert einer benutzerdefinierten Variable auf Sitzungsebene anzeigt.Tage seit der letzten Sitzung - für Benutzer mit benutzerdefinierten Dimensionen auf Sitzungsebene - BigQuery - Google Analytics

Was ich jetzt habe, ist:

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

Ich habe 30 eine Spalte für eine benutzerdefinierte Dimension mit dem Index einzuführen versucht, aber ohne Erfolg. Im Grunde möchte ich nur die Tage seit der letzten Sitzung für Besucher anzeigen können, die diese benutzerdefinierte Dimension enthalten. Mein Code hierfür lautet:

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

EDIT: dies zeigt, wie ich dachte, dass ich diese benutzerdefinierte Dimension als neue Spalte einführen könnte, aber nicht funktioniert.

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

Alle Vorschläge dankbar erhalten.

+0

Was ist 'hits'? Ist es die Tabelle, die Sie verwenden? –

+0

Das ist der Feldname für die benutzerdefinierte Dimension, die in den Google Analytics-Daten mit dem Index '30' vorhanden ist. – user3156990

Antwort

0

MAX ist eine Aggregationsfunktion - Sie müssen es irgendwie gruppieren, entweder über die gesamte Tabelle mit GROUP BY oder innerhalb der Reihe, z. den Wert, wenn Index 30 und NULL - mit WITHIN RECORD oder WITHIN hits

Um benutzerdefinierte Dimensionswerte für jede Sitzung, die Sie brauchen, um MAX(IF(hits.customdimensions.index = 30,hits.customdimensions.value,NULL)) WITHIN RECORD

Diese Zeile zuerst erzeugt eine Liste von Werten für jede Sitzung (RECORD) und customDimension zu erhalten sonst: MAX(NULL, NULL, NULL, ..., <value for hits.cd30>, ... , NULL, NULL, ... <another hits.cd30>, ... , NULL)

Dabei ist NULL der niedrigstmögliche Wert. Zeichenfolgen werden alphabetisch sortiert (tatsächlich nach Codetabelle, enthalten jedoch alphabetisch sortierte Zeichen). Da Sie client-dimensions auf Sitzungsebene auf Trefferebene aggregieren, enthält Ihre Liste möglicherweise mehrere Nicht-Null-Werte für Sitzungen mit mehr als einem Treffer mehrere CD30s sein. MAX() gibt den zurück, der spätestens im Alphabet kommt: "aab" < "aac" < "b"

Verwandte Themen