我正在使用BigQuery(ga360导出)中的GA数据。
我在很多领域都拥有GA资源。每个项目都有其自己的“自定义维度”(命中级别作用域,索引= 9),其项目名称为:project1,project2等(一个项目中可以包含多个域)。
我需要的是统计仅访问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的命中率至少为1,无论其他项目是否命中。
我尝试通过WHERE和HAVING子句排除,结果是相同的。
如何正确过滤?

最佳答案

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

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子句(如果有必要)。

关于google-analytics - 在BigQuery中按命中范围的自定义维度过滤 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49823992/

10-10 23:15