Я хотел бы создать таблицу на BigQuery с нашими основными сегментами Google Analytics и их метриками (сеансы, пользователи, показатель отказов, транзакции, доход, время на сайте),с разбивкой по измерениям (устройство, новости / возвращение).
Следующий запрос работает отлично, и результаты Google Analytics точно отображаются:
SELECT
SUBSTR(date,1,6) AS date,
CASE
WHEN REGEXP_CONTAINS(trafficSource.medium, r'^(cpc|ppc|cpa|cpm|cpv|cpp|display)') THEN 'paid'
WHEN trafficSource.medium LIKE 'organic' THEN 'organic'
WHEN trafficSource.medium LIKE '(none)' THEN 'direct'
WHEN trafficSource.medium LIKE 'referral' THEN 'referral'
WHEN trafficSource.medium LIKE 'social' THEN 'social'
ELSE 'other'
END AS segment,
COALESCE(totals.newVisits, 0) = 1 AS first_visit,
device.deviceCategory AS device,
COUNT(DISTINCT fullVisitorId) AS users,
SUM(totals.visits) AS sessions,
SUM(totals.pageviews) AS pageviews,
COUNT(totals.bounces) AS bounces,
SUM(totals.timeOnSite) AS session_duration,
SUM(totals.transactions) AS transactions,
SUM(totals.totalTransactionRevenue)/1000000 AS revenue
FROM
`xxxxxxxxxxx.ga_sessions_20180930`
GROUP BY
1,2,3,4
Как выКак видите, запрос работает отлично для всех сегментов, основываясь только на trafficSource.medium .Моя проблема заключается в том, что мне нужно создавать сегменты на основе целевой страницы .
Я присоединился к исходной таблице с помощью подзапроса для получения необъявленных целевых страниц (см. Запрос ниже -> дополнительныйизмерения и метрики удалены для простоты).
Эта стратегия не работает: теперь все мои метрики, такие как сессий , перестали совпадать с метриками в Google Analytics.
SELECT
CASE
WHEN REGEXP_CONTAINS(trafficSource.medium,
r'^(cpc|ppc|cpa|cpm|cpv|cpp|display)') THEN 'paid'
WHEN trafficSource.medium LIKE 'organic' AND landing_blog LIKE 'not blog' THEN 'organic not blog'
WHEN trafficSource.medium LIKE 'organic' AND landing_blog LIKE 'blog' THEN 'organic landing blog'
WHEN trafficSource.medium LIKE '(none)' THEN 'direct'
WHEN trafficSource.medium LIKE 'referral' THEN 'referral'
WHEN trafficSource.medium LIKE 'social' THEN 'social'
ELSE 'other'
END AS segment,
SUM(totals.visits) AS sessions
FROM
`xxxxxxxxxxxx.ga_sessions_20180930` AS ga
JOIN (
SELECT
visitId,
CASE
WHEN REGEXP_CONTAINS(hits.page.pagePath, r'^/blog/') THEN 'blog'
ELSE 'not blog'
END AS landing_blog
-- Uses the knowledge that hits are stored in chronological order
FROM
`xxxxxxxxxxxx.ga_sessions_20180930`,
UNNEST (hits) AS hits
WHERE
hits.hitNumber = 1
AND hits.type LIKE 'PAGE') AS landing
ON
ga.visitId = landing.visitId
GROUP BY 1
IБуду признателен за любую помощь в исправлении второго запроса или предложении другой стратегии.