SQL BigQuery: воронка последовательности шагов выдает не корретные данные при шагах воронки больше 5

Ситуация: Строю закрытую воронку переходов со страницы на страницу по данным GAv4 в BQ с применением LEFT JOIN. Воронка на 5 шагов

Проблема: Результат запроса на 5-ом шаге выводятся противоречивые данные. Вот пример: 1000 → 900 → 700 → 600 → 15000

На последнем шаге никак не может быть больше, чем на предыдущем. Вариантов попасть на последнюю страницу кроме как по воронке нет.

При сокращении числа шагов до 3 результат похож на правду и совпадает с данными GAv4. А именно: 700 → 600 → 550

Вопросы:

  1. Почему при большом числе шагов расчет становится не корретным?
  2. Как поменять запрос, чтобы анализировать воронки на 5+ шагов?
  3. Какие рекомендации дадите для оптимизации запроса?

Ниже код моего запроса

    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"
    )


Ответы (0 шт):