按BigQuery

时间:2018-04-13 19:34:37

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

我正在使用BigQuery中的GA数据(ga360导出)。 我有一个GA资源在许多领域工作。每个都有自己的自定义维度(命中级范围,索引= 9),项目名称值为:project1,project2等(多个域可以在1个项目中连接)。 我需要的是计算仅访问project1并且没有在其他项目上点击的用户的访问量。 我的问题:

SELECT
  date,
  SUM(totals.visits) as visits,
  project
FROM (
  SELECT
    date,
    totals.visits,
    MAX(IF(hits.customDimensions.index=9
        AND REGEXP_MATCH(hits.customDimensions.value, 'project1'), hits.customDimensions.value, NULL)) WITHIN RECORD AS project
  FROM (TABLE_DATE_RANGE([project:dataset.ga_sessions_], TIMESTAMP('2018-03-31'), TIMESTAMP('2018-03-31')))
    )
GROUP BY
  project

问题是这个查询给了我一个会话图,它对project1至少有一次点击,无论是否有其他项目的点击。 我尝试通过WHERE和HAVING子句排除,结果是一样的。 我怎么能正确过滤它?

1 个答案:

答案 0 :(得分:1)

这只是一个未经测试的草图,但我认为它显示了这个想法 - 在子查询中创建条件列并在上层查询中使用它们来总结会话。

SELECT
  date,
  SUM(IF(isProject1 AND NOT isAnyOtherProject,totals.visits,0)) as visits,
  project
FROM (
  SELECT
    date,
    totals.visits,
    MAX(IF(hits.customDimensions.index=9
        AND REGEXP_MATCH(hits.customDimensions.value, 'project1'), TRUE, FALSE)) WITHIN RECORD AS isProject1,
    MAX(IF(...same as above with different regex identifying other projects...)) isAnyOtherProject
  FROM (TABLE_DATE_RANGE([project:dataset.ga_sessions_], TIMESTAMP('2018-03-31'), TIMESTAMP('2018-03-31')))
    )
GROUP BY
  project

如果有意义的话,你可以将第二个MAX-IF移动到OMIT RECORD子句。