Общее количество сеансов в отчетах BigQuery vs Google Analytics

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

для этого я запросил в BQ:

select sum(sessions) as total_sessions from (
  select
    fullvisitorid,
    count(distinct visitid) as sessions,
    from (table_query([40663402], 'timestamp(right(table_id,8)) between timestamp("20150519") and timestamp("20150519")'))
    group each by fullvisitorid
)

(Я использую table_query потому что позже мы можем увеличить диапазон дней)

в результате 1,075,137.

но в наших отчетах Google Analytics, в разделе "Обзор аудитории", в тот же день результаты:

This report is based on 1,026,641 sessions (100% of sessions).

всегда эта разница примерно ~5%, несмотря на день. Поэтому мне интересно, хотя запрос довольно прост, есть ли какая-либо ошибка, которую мы сделали?

ожидается ли эта разница? Я прочитал документацию BigQuery, но не смог найти ничего по этому вопросу.

заранее спасибо,

3 ответов


standardsql

просто SUM(totals.visits) или COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING) )) убедится totals.visits=1!

если вы используете visitId и вы не группируетесь в день, Вы будете комбинировать полуночные-сплит-сессии!

вот все сценарии:

SELECT
  COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitStartTime AS STRING) )) allSessionsUniquePerDay,
  COUNT(DISTINCT CONCAT(fullVisitorId, CAST(visitId AS STRING) )) allSessionsUniquePerSelectedTimeframe,
  sum(totals.visits) interactiveSessionsUniquePerDay, -- equals GA UI sessions
  COUNT(DISTINCT IF(totals.visits=1, CONCAT(fullVisitorId, CAST(visitId AS STRING)), NULL) ) interactiveSessionsUniquePerSelectedTimeframe,
  SUM(IF(totals.visits=1,0,1)) nonInteractiveSessions
FROM
  `project.dataset.ga_sessions_2017102*`

Wrap up:

  • fullVisitorId + visitId: полезно для повторного подключения midnight-splits
  • fullVisitorId + visitStartTime: полезно принимать расколы в счет
  • totals.visits=1 для сеансов взаимодействия
  • fullVisitorId + visitStartTime здесь totals.visits=1: сеансы пользовательского интерфейса GA (в случае, если вам нужен идентификатор сеанса)
  • SUM(totals.visits): простые сеансы пользовательского интерфейса GA
  • fullVisitorId + visitId здесь totals.visits=1 и GROUP BY date: сеансы GA UI с слишком большим количеством шансов на ошибки и недоразумения

после публикации вопроса мы связались с поддержкой Google и обнаружили, что в Google Analytics фактически учитываются только сеансы, в которых было "событие".

в Bigquery вы найдете все сеансы независимо от того, было ли у них взаимодействие или нет.

чтобы найти тот же результат, что и в GA, вы должны фильтровать сеансы с totals.visits = 1 в вашем запросе BQ (totals.visits равно 1 только для сеансов, в которых было запущено событие).

что есть:

select sum(sessions) as total_sessions from (
  select
    fullvisitorid,
    count(distinct visitid) as sessions,
    from (table_query([40663402], 'timestamp(right(table_id,8)) between timestamp("20150519") and timestamp("20150519")'))
    where totals.visits = 1
    group each by fullvisitorid
)

проблема может быть связана с"COUNT DISTINCT".

по данным этот пост:

COUNT DISTINCT является статистическим приближением для всех результатов, превышающих 1000

вы можете попробовать установить дополнительный параметр COUNT для повышения точности за счет производительности (см. post), но я бы сначала попробовал:

SELECT COUNT( CONCAT( fullvisitorid,'_', STRING(visitid))) as sessions 
from (table_query([40663402], 'timestamp(right(table_id,8)) between 
timestamp("20150519") and timestamp("20150519")'))