SQL BigQuery: воронка последовательности шагов выдает не корретные данные при шагах воронки больше 5
Ситуация: Строю закрытую воронку переходов со страницы на страницу по данным GAv4 в BQ с применением LEFT JOIN. Воронка на 5 шагов
Проблема: Результат запроса на 5-ом шаге выводятся противоречивые данные. Вот пример: 1000 → 900 → 700 → 600 → 15000
На последнем шаге никак не может быть больше, чем на предыдущем. Вариантов попасть на последнюю страницу кроме как по воронке нет.
При сокращении числа шагов до 3 результат похож на правду и совпадает с данными GAv4. А именно: 700 → 600 → 550
Вопросы:
- Почему при большом числе шагов расчет становится не корретным?
- Как поменять запрос, чтобы анализировать воронки на 5+ шагов?
- Какие рекомендации дадите для оптимизации запроса?
Ниже код моего запроса
WITH Pages AS (
SELECT
event_name,
user_pseudo_id,
event_timestamp,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location" ) as pagePath
FROM `.events_*` ---таблица с событиями
WHERE event_name IN (SELECT event_name FROM UNNEST(event_params) WHERE value.string_value LIKE "%---URL с доменом---%")
AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATETIME(TIMESTAMP "2022-06-15 00:00:00+00", "Asia/Krasnoyarsk")) AND FORMAT_DATE('%Y%m%d', DATETIME(TIMESTAMP "2022-06-16 00:00:00+00", "Asia/Krasnoyarsk"))
)
SELECT
COUNT(DISTINCT step1_id) AS СТРАНИЦА 1,
COUNT(DISTINCT step2_id) AS СТРАНИЦА 2,
COUNT(DISTINCT step3_id) AS СТРАНИЦА 3,
COUNT(DISTINCT step4_id) AS СТРАНИЦА 4,
COUNT(DISTINCT step5_id) AS СТРАНИЦА 5
FROM (
SELECT
user_pseudo_id AS step1_id,
event_timestamp AS step1_timestamp,
step2_id,
step2_timestamp,
step3_id,
step3_timestamp,
step4_id,
step4_timestamp
step5_id,
step5_timestamp
FROM
Pages
LEFT JOIN (
SELECT
user_pseudo_id AS step2_id,
event_timestamp AS step2_timestamp
FROM
Pages
WHERE
pagePath LIKE "%СТРАНИЦА 2%"
)
ON
user_pseudo_id = step2_id
AND event_timestamp < step2_timestamp
LEFT JOIN (
SELECT
user_pseudo_id AS step3_id,
event_timestamp AS step3_timestamp
FROM
Pages
WHERE
pagePath LIKE "%СТРАНИЦА 3%"
)
ON
step3_id = step2_id
AND event2_timestamp < step3_timestamp
LEFT JOIN (
SELECT
user_pseudo_id AS step4_id,
event_timestamp AS step4_timestamp
FROM
Pages
WHERE
pagePath LIKE "%СТРАНИЦА 4%"
)
ON
step4_id = step3_id
AND event3_timestamp < step4_timestamp
LEFT JOIN (
SELECT
user_pseudo_id AS step5_id,
event_timestamp AS step5_timestamp
FROM
Pages
WHERE
pagePath LIKE "%СТРАНИЦА 5%"
)
ON
step5_id = step4_id
AND event4_timestamp < step5_timestamp
WHERE
pagePath = "СТРАНИЦА 1"
)