Звучит так, будто вы хотите избежать объединения таблицы с массивом (через , UNNEST(session.hits)
), поскольку это приводит к дублированию всех итогов. Не совсем понятно, что вы хотите сделать с именами сервисов: если их больше одного, хотите ли вы вернуть массив всех из них? Это один раз подход:
SELECT
EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE 'Europe/Paris') AS Hour,
ARRAY(
SELECT sourcePropertyInfo.sourcePropertyDisplayName
FROM UNNEST(session.hits) AS hits
) AS service,
IFNULL(SUM(totals.visits),0) as sessions,
IFNULL(SUM(totals.transactions),0) as transactions,
IFNULL(ROUND((SUM(totals.transactions)/SUM(totals.visits))*100,2),0) AS conversionRate
FROM `XX.ga_realtime_view` AS session
GROUP BY
Hour,
service
ORDER BY
Hour
Однако, как вы заметили, запрос теперь выдает ошибку, которую нельзя сгруппировать по массиву. Если вы ожидаете, что у вас будет только один тип сервиса в пределах попаданий, вы можете извлечь только один:
SELECT
EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE 'Europe/Paris') AS Hour,
(SELECT MAX(sourcePropertyInfo.sourcePropertyDisplayName)
FROM UNNEST(session.hits) AS hits) AS service,
IFNULL(SUM(totals.visits),0) as sessions,
IFNULL(SUM(totals.transactions),0) as transactions,
IFNULL(ROUND((SUM(totals.transactions)/SUM(totals.visits))*100,2),0) AS conversionRate
FROM `XX.ga_realtime_view` AS session
GROUP BY
Hour,
service
ORDER BY
Hour