【问题标题】:BigQuery - Exporting different Events from Google AnalyticsBigQuery - 从 Google Analytics 导出不同的事件
【发布时间】:2018-12-03 14:46:20
【问题描述】:

可能是一个初学者的问题,但我在这里找不到灵魂。

我想从我的 Google Analytics(分析)帐户中导出 BigQuery 中的不同事件(仅是总事件指标)

所以 f.e.我有一个下载事件和一个搜索事件,我希望将每个事件放在一个列中,向我显示每个事件的总事件指标。我针对不同的条件过滤了这两个事件,以确保我有正确的事件。

我在这里使用 LegacySQL 并希望从同一个表中导出所有数据。问题是,LegacySQL 中不允许子选择,有什么想法可以解决这个问题吗?

SELECT  clientId, totals.timeOnSite, trafficSource.source,
(SELECT hits.eventInfo.eventAction FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))   WHERE hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') AS DownloadEvent,
(SELECT hits.eventInfo.eventLabel FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))   WHERE hits.eventInfo.eventLabel  = 'search-header' OR 'search-mainpage' AND hits.type = 'EVENT') AS SearchEvent,

COUNT(1) eventHits FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))

【问题讨论】:

    标签: sql google-analytics google-bigquery bigquery-standard-sql legacy-sql


    【解决方案1】:

    在 BQ Legacy SQL 中允许子选择。下面应该会给你你正在寻找的结果。

    您不需要在这里使用子查询。使用简单的CASE 语句应该可以解决问题。 case 语句将筛选出符合您要查找的条件的行。

    查询

    SELECT 
    clientId,
    totals.timeOnSite, 
    trafficSource.source,
    SUM(COUNT(CASE WHEN (hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') THEN hits.eventInfo.eventAction END)) AS DownloadEvent,
    SUM(COUNT(CASE WHEN (hits.eventInfo.eventLabel  = 'search-header' OR hits.eventInfo.eventLabel  = 'search-mainpage') AND hits.type = 'EVENT' THEN hits.eventInfo.eventLabel END)) AS SearchEvent
    FROM TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))
    GROUP BY 1,2,3
    

    现在,如果您想使用子查询,如下所示

    带子查询

    SELECT  
    b.clientId, 
    b.totals.timeOnSite, 
    b.trafficSource.source,
    SUM(a.DownloadEvent),
    SUM(a.SearchEvent)
    FROM
    (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))) AS b 
    INNER JOIN (
    SELECT 
    clientId,
    totals.timeOnSite, 
    trafficSource.source,
    COUNT(CASE WHEN (hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') THEN hits.eventInfo.eventAction END) AS DownloadEvent,
    COUNT(CASE WHEN (hits.eventInfo.eventLabel  = 'search-header' OR hits.eventInfo.eventLabel  = 'search-mainpage') AND hits.type = 'EVENT' THEN hits.eventInfo.eventLabel END) AS SearchEvent
    FROM TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))
    GROUP BY 1
    ) AS a ON b.clientId = a.clientId
    GROUP BY 1,2,3
    

    【讨论】:

    • @Julez2000,太棒了。不要犹豫,将其标记为已解决,以便遇到类似问题的任何人都可以轻松找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多