Наверное, вопрос для новичка, но я просто не мог найти здесь души.
Я хочу экспортировать различные события (только метрику общего количества событий) в BigQuery из моей учетной записи Google Analytics
Так, например, У меня есть событие загрузки и событие поиска, и я хочу, чтобы каждое из них было в одном столбце, показывая мне общую метрику событий для каждого события. Я отфильтровал оба события для разных условий, чтобы убедиться, что у меня правильное событие.
Я использую здесь LegacySQL и хочу экспортировать все данные из одной таблицы. Проблема в том, что в LegacySQL не разрешен подвыбор, какие-либо мысли о том, как я могу это решить?
SELECT clientId, totals.timeOnSite, trafficSource.source,
(SELECT hits.eventInfo.eventAction FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))) WHERE hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') AS DownloadEvent,
(SELECT hits.eventInfo.eventLabel FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))) WHERE hits.eventInfo.eventLabel = 'search-header' OR 'search-mainpage' AND hits.type = 'EVENT') AS SearchEvent,
COUNT(1) eventHits FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))


Подвыборки разрешены в BQ Legacy SQL. Приведенное ниже должно дать вам результаты, которые вы ищете.
Здесь не нужно использовать подзапрос. Использование простого оператора CASE должно помочь. Оператор case отфильтрует строки, соответствующие искомому условию.
Запрос
SELECT
clientId,
totals.timeOnSite,
trafficSource.source,
SUM(COUNT(CASE WHEN (hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') THEN hits.eventInfo.eventAction END)) AS DownloadEvent,
SUM(COUNT(CASE WHEN (hits.eventInfo.eventLabel = 'search-header' OR hits.eventInfo.eventLabel = 'search-mainpage') AND hits.type = 'EVENT' THEN hits.eventInfo.eventLabel END)) AS SearchEvent
FROM TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))
GROUP BY 1,2,3
Теперь, если вы хотите использовать подзапрос, вот как он будет выглядеть
С подзапросом
SELECT
b.clientId,
b.totals.timeOnSite,
b.trafficSource.source,
SUM(a.DownloadEvent),
SUM(a.SearchEvent)
FROM
(TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))) AS b
INNER JOIN (
SELECT
clientId,
totals.timeOnSite,
trafficSource.source,
COUNT(CASE WHEN (hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') THEN hits.eventInfo.eventAction END) AS DownloadEvent,
COUNT(CASE WHEN (hits.eventInfo.eventLabel = 'search-header' OR hits.eventInfo.eventLabel = 'search-mainpage') AND hits.type = 'EVENT' THEN hits.eventInfo.eventLabel END) AS SearchEvent
FROM TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))
GROUP BY 1
) AS a ON b.clientId = a.clientId
GROUP BY 1,2,3
@ Julez2000, круто. Не стесняйтесь отмечать проблему как решенную, чтобы любой, у кого возникла аналогичная проблема, мог легко найти решение.