BigQuery Google Analytics: количество сеансов, которые посетили набор страниц или имели c значения специального параметра. - PullRequest
0 голосов
/ 08 мая 2020

Используя данные Google Analytics в Google BigQuery, я пытаюсь воссоздать сегмент GA и получать базовые c метрики, такие как сеансы. Определение сегмента: специальный параметр A = 1 или 5 или специальный параметр B имел значения или Page = pageA или Page = pageB

Следующий код хорошо работает с двумя условиями специального параметра. После того, как я добавил часть страницы, результатом всегда были все сеансы за день.

SELECT 

  COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING))) AS Sessions
    FROM
    `123456789.ga_sessions_20200201` as Data,
    unnest(hits) as hits

  WHERE totals.visits = 1
-- custom dimension A
  and (
       (SELECT
          value
        FROM
          UNNEST(hits.customDimensions)
        WHERE
          index = 9
        GROUP BY
          1) is not null
-- custom dimension B
    or (SELECT
          value
        FROM
          UNNEST(hits.customDimensions)
        WHERE
          index = 10
        GROUP BY
          1) in ('1','5') 
-- Page
  or Exists(Select
            hits.page.pagePath AS Page
         FROM
           `123456789.ga_sessions_20200201` ,
            unnest(hits) as hits
         Where totals.visits = 1
              AND hits.type = 'PAGE'
              and hits.page.pagePath in ('pageA','pageB'))
       )

1 Ответ

1 голос
/ 09 мая 2020

Ваша ошибка в том, что вы используете таблицу ga_sessions в третьем условии. Следовательно, он сканирует всю таблицу, и условие существования возвращает True. Таким образом, это выполняется для всех строк.

Кроме того, вам не нужно присоединяться к unnest (совпадениям). Он создает несколько строк для каждого сеанса. Если вы обрабатываете это без объединения вложенных обращений, у вас будет одна строка для каждого сеанса. Так что их будет легче посчитать.

Я также обновил его, упростил запрос, поэтому я думаю, что это даст вам то, что вы хотите в своем наборе данных.

SELECT 
    COUNT(*) AS Sessions
FROM
    `123456789.ga_sessions_20200201` as Data

WHERE totals.visits = 1
    and exists (
        SELECT
          1
        FROM
          UNNEST(hits) as hit
        WHERE
          EXISTS (select 1 from unnest(hit.customDimensions) where index = 9 and value is not null) -- custom dimension A
          OR EXISTS (select 1 from unnest(hit.customDimensions) where index = 10 and value in ('1', '5')) -- custom dimension B
          OR (hit.type = 'PAGE' and hit.page.PagePath in ('pageA', 'pageB')) -- Page
    )
...