Unnest Hit и Unnesting сеанс пользовательского измерения в области видимости BigQuery фильтр кода - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь отфильтровать воронку на основе пользователей, у которых есть определенные пользовательские значения измерений. К сожалению, рассматриваемое пользовательское измерение имеет сессионную область и не основано на обращениях, поэтому я не могу использовать hit.customDimensions в этом конкретном запросе. Каков наилучший способ сделать это и достичь желаемого результата? Найти мой прогресс до сих пор:


    #standardSQL
    SELECT 
       SUM((SELECT 1 FROM UNNEST(hits) WHERE page.pagePath = '/one - Page' LIMIT 1)) One_Page,
       SUM((SELECT 1 FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE page.pagePath = '/one - Page') AND page.pagePath = '/two - Page' LIMIT 1)) Two_Page,
       SUM((SELECT 1 FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE page.pagePath = '/one - Page') AND page.pagePath = '/three - Page' LIMIT 1)) Three_Page,
       SUM((SELECT 1 FROM UNNEST(hits) WHERE EXISTS(SELECT 1 FROM UNNEST(hits) WHERE page.pagePath = '/one - Page') AND page.pagePath = '/four - Page' LIMIT 1)) Four_Page
    FROM `xxxxxxx.ga_sessions_*`,
    UNNEST(hits) AS h,
    UNNEST(customDimensions) AS cusDim
    WHERE
      _TABLE_SUFFIX BETWEEN '20190320' AND '20190323'
      AND h.hitNumber = 1
      AND cusDim.index = 6
      AND cusDim.value IN ('60','70)

1 Ответ

0 голосов
/ 12 июня 2019

Сегментация с пользовательскими размерами

Вы можете фильтровать сеансы на основе условий в пользовательских измерениях. Просто напишите подзапрос, подсчитывающий интересующие вас случаи, и установите «> 0». Пример для выборочных данных:

SELECT
  fullvisitorid,
  visitstarttime,
  customdimensions
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_20170505` t
WHERE
  -- there should be at least one case with index=4 and value='EMEA' ... you can use your index and desired value
  -- unnest() turns customdimensions into table format, so we can apply SQL to this array
  (select count(1)>0 from unnest(customdimensions) where index=4 and value='EMEA')
limit 100

Вы комментируете оператор WHERE, чтобы увидеть все данные.

Воронка

Сначала вы можете получить представление о том, что происходит в вашем массиве хитов:

SELECT
  fullvisitorid,
  visitstarttime,
  -- get an overview over relevant hits data
  -- select as struct feeds hits fields into a new array created by array()-function
  ARRAY(select as struct hitnumber, page from unnest(hits) where type='PAGE') hits
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_20170505` t
WHERE
  (select count(1)>0 from unnest(customdimensions) where index=4 and value='EMEA')
  and totals.pageviews>3
limit 100

Теперь, когда вы убедились, что данные имеют смысл, вы можете создать воронкообразный массив, содержащий номера попаданий соответствующих шагов:

SELECT
  fullvisitorid,
  visitstarttime,
  -- create array with relevant info
  -- cross join hit numbers from step pages to get all combinations so that we can check later which came after the other
  ARRAY(
    select as struct * from
    (select hitnumber as step1 from unnest(hits) where type='PAGE' and page.pagePath='/home') left join
    (select hitnumber as step2 from unnest(hits) where type='PAGE' and page.pagePath like '/google+redesign/%') on true left join
    (select hitnumber as step3 from unnest(hits) where type='PAGE' and page.pagePath='/basket.html') on true
    ) AS funnel
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_20170505` t
WHERE
  (select count(1)>0 from unnest(customdimensions) where index=4 and value='EMEA')
  and totals.pageviews>3
limit 100

Поместите это в оператор WITH для большей ясности и проведите анализ, суммируя соответствующие случаи:

WITH f AS (
  SELECT
    fullvisitorid,
    visitstarttime,
    totals.visits,
    -- create array with relevant info
    -- cross join hit numbers from step pages to get all combinations so that we can check later which came after the other
    ARRAY(
      select as struct * from
        (select hitnumber as step1 from unnest(hits) where type='PAGE' and page.pagePath='/home') left join
        (select hitnumber as step2 from unnest(hits) where type='PAGE' and page.pagePath like '/google+redesign/%') on true left join
        (select hitnumber as step3 from unnest(hits) where type='PAGE' and page.pagePath='/basket.html') on true
      ) AS funnel
  FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_20170505` t
  WHERE
    (select count(1)>0 from unnest(customdimensions) where index=4 and value='EMEA')
    and totals.pageviews>3
)

SELECT 
  COUNT(DISTINCT fullvisitorid) as users,
  SUM(visits) as allSessions,
  SUM( IF(array_length(funnel)>0,visits,0) ) sessionsWithFunnelPages,
  SUM( IF( (select count(1)>0 from unnest(funnel) where step1 is not null ) ,visits,0) ) sessionsWithStep1,
  SUM( IF( (select count(1)>0 from unnest(funnel) where step1 is not null and step1<step2 ) ,visits,0) ) sessionsFunnelToStep2,
  SUM( IF( (select count(1)>0 from unnest(funnel) where step1 is not null and step1<step2 and step2<step3 and step1<step3) ,visits,0) ) sessionsFunnelToStep3
FROM f

Пожалуйста, проверьте перед использованием.

...