我刚学的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
。
但在我们的谷歌分析报告中,“受众群体概览”一节中,当天的结果:
This report is based on 1,026,641 sessions (100% of sessions).
总是有,尽管这一天的大约〜5%这种差异。 所以,我想知道,即使查询是相当简单的,有我们所做的任何错误?
这是区别预期发生? 我通过大量查询的文档阅读,但无法找到在这个问题上任何东西。
提前致谢,
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*`
包起来:
-
fullVisitorId
+ visitId
:有用的重新午夜拆分 -
fullVisitorId
+ visitStartTime
:有用采取拆分考虑 -
totals.visits=1
用于交互会话 -
fullVisitorId
+ visitStartTime
其中totals.visits=1
:GA UI会话(如果你需要一个会话ID) -
SUM(totals.visits)
简单GA UI会议 -
fullVisitorId
+ visitId
其中totals.visits=1
和GROUP BY date
:与错误和误解太多机会GA UI会议
张贴的问题后,我们坐上了与谷歌的支持接触和发现,在谷歌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参数以改善性能为代价的精度(见文章),但我想先试试:
SELECT COUNT( CONCAT( fullvisitorid,'_', STRING(visitid))) as sessions
from (table_query([40663402], 'timestamp(right(table_id,8)) between
timestamp("20150519") and timestamp("20150519")'))