如何从已发布的数据中返回正确的总计(BigQuery中的Google Analytics数据)

时间:2017-11-23 08:39:44

标签: sql google-bigquery

我正在对BigQuery中的GA数据运行一些查询,当我想从一个unnested表返回一个数据总和时,我遇到了一个反复出现的问题,在我的总数中远高于预期 - 我怀疑unnested行是被计算,导致计数不准确。这是一个例子:

SELECT DATE, SUM(totals.transactions)
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
    WHERE parse_date('%y%m%d', _table_suffix) between 
    DATE_sub(current_date(), interval 1 day) and
    DATE_sub(current_date(), interval 1 day)
    GROUP BY DATE

返回:

  

1 20171122 12967

这是预期的。接下来,我想使用hits.中的字段,这需要我不用点击,进行查询:

SELECT DATE, SUM(totals.transactions), MIN(hits.page.hostname) AS site
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
CROSS JOIN UNNEST (hits) as hits
    WHERE parse_date('%y%m%d', _table_suffix) between 
    DATE_sub(current_date(), interval 1 day) and
    DATE_sub(current_date(), interval 1 day)
    GROUP BY DATE

然而,现在的结果显示:

  

20171122 2320004 www.hostname.com

交易次数要高得多,我假设它计算了所有未通过的行,我怎样才能解决这个问题,我想要计算和取消对表格的计算,但是还要使用未被证实的字段?

1 个答案:

答案 0 :(得分:0)

你应该这样做:

    SELECT DATE, SUM(totals.transactions), 
        (SELECT MIN(hit.page.hostname) FROM UNNEST (GBP.hits) AS hit) AS site
        FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
        WHERE parse_date('%y%m%d', _table_suffix) between 
        DATE_sub(current_date(), interval 1 day) and
        DATE_sub(current_date(), interval 1 day)
        GROUP BY DATE, site