2015-01-02 6 views
1

Я пытаюсь изолировать пользователей, которые имеют два значения для поля ([hits.customVariables.index]) в течение того же сеанса в GA.BigQuery GA несколько значений

Я подозреваю, что есть намного более простой способ сделать это; поэтому, пожалуйста, дайте мне знать, знаете ли вы.

Например, в sql ниже все сеансы возвращают '2', за исключением последнего (возвращает 1) для поля «matches».

SELECT CONCAT([fullVisitorId] AS [column_A], STRING([visitId])) AS [Session], 
(MAX(IF(SUM(CASE WHEN [hits.customVariables.index] IN (3) THEN 1 ELSE 0 END)>0,1,0)) + 
MAX(IF(SUM(CASE WHEN [hits.customVariables.index] IN (46) THEN 1 ELSE 0 END)>0,1,0))) 
AS [matches] 
FROM FLATTEN([1271835.ga_sessions_20141216], [hits.customVariables.index]) 
WHERE CONCAT([fullVisitorId], STRING([visitId])) IN 
('50956211505979902631418751704', 
'86512166255567372671418771317', 
'79580299450214242591418749991', 
'274962317238452051418783657') 
GROUP BY [Session] 

ВЫВОД здесь:

column_A Session       matches  
1   274962317238452051418783657  1  
2   50956211505979902631418751704  2  
3   86512166255567372671418771317  2  
4   79580299450214242591418749991  2 
+0

Это изменение (см. выше) неверно, потому что это комбинация fullVisitorId и Session, которая уникальна. Можем ли мы вернуть его на мой оригинальный пост? – platothewise

ответ

1

Вы спрашиваете, для альтернативного способа расчета "спичками"?

Если это так, вы можете использовать вложенные SELECT. Внутренний выбор, чтобы захватить сеансы, которые вы хотите, затем выберите средний, чтобы отфильтровать до повторяющихся значений индекса для интересующих вас, и внешний выбор, чтобы суммировать совпадения.

Следующие должны работать для вас:

SELECT 
    Session, 
    COUNT(hits.customVariables.index) AS match 
FROM (
    SELECT 
    Session, 
    hits.customVariables.index 
    FROM (
    SELECT 
     CONCAT([fullVisitorId], STRING([visitId])) AS [Session], 
     hits.customVariables.index 
    FROM 
     [1271835.ga_sessions_20141216] 
    WHERE 
     CONCAT([fullVisitorId], STRING([visitId])) IN 
     ('50956211505979902631418751704', 
     '86512166255567372671418771317', 
     '79580299450214242591418749991', 
     '274962317238452051418783657') 
    ) 
    -- Drop index values we don't care about 
    OMIT [hits.customVariables.index] IF 
    NOT [hits.customVariables.index] IN (3, 46) 
    -- Drop duplicates so we get a COUNT of unique values 
    GROUP BY 
    Session, 
    hits.customVariables.index 
    ) 
GROUP BY 
    Session 

Если вы хотите ограничить выход к строкам с матча> 1, можно добавить следующее вокруг любого запроса:

SELECT Session, match FROM (
    ... 
) 
WHERE match > 1 
+0

Майкл, какой-нибудь совет для изучения материала BigQuery? –

+0

Это классное предложение Майкла, спасибо! только он выглядит еще более сложным, чем то, что я сейчас использую. Я довольно новичок в Bigquery, так что, поскольку эти таблицы были денормализированы, может быть просто какая-то функция или метод для анализа отдельных случаев (Flatten, возможно?) Дочернего события без странного файла Max/Case, который я использую. На самом деле, мне даже не нужно сгладить мой первоначальный запрос выше. Итак, это работает, но я просто не могу поверить, что так оно и должно быть сделано. – platothewise

0

Не полностью конечно, если вы хотите ограничить его определенными переменными индексами и/или определенными идентификаторами сессии.

Это пример, где я ограничил его

SELECT 
    fullVisitorId, 
    CONCAT([fullVisitorId], STRING([visitId])) as sessionId, 
COUNT(DISTINCT customDimensions.index, 100000) as unique_count 
FROM [86276908.ga_sessions_20150109] 
WHERE fullVisitorId IN ('947763264111444','505145409379903', '6201048528944990204') 
AND customDimensions.index IN (1,2) 
GROUP BY 
    fullVisitorId, 
    sessionId 
HAVING unique_count > 1 

Или он будет работать следующим образом, если вы хотите, чтобы все посетители, которые имели по крайней мере 2 различных пользовательских переменных в сессиях

SELECT 
    fullVisitorId, 
    CONCAT([fullVisitorId], STRING([visitId])) as sessionId, 
COUNT(DISTINCT customDimensions.index, 100000) as unique_count 
FROM [86276908.ga_sessions_20150109] 
GROUP BY 
    fullVisitorId, 
    sessionId 
HAVING unique_count > 1 
+0

спасибо, будучи довольно новым для BigQuery. Мне просто интересно, есть ли простой способ подсчета сеансов, где выполнялись две конкретные действия. Даже если посетитель проводил их много раз во время сеанса, я хотел считать это только один раз. Я написал это, но мне показалось странным, что так оно и будет. – platothewise

+0

Замечательно, что ваш код работал, и вы просто искали альтернативы. Первоначально кажется, что вещи сложнее, но я чувствую, что скоро вы поймете, что это дает вам больше силы – tfayyaz

Смежные вопросы