【问题标题】:Filtering sessions by hit-scoped custom dimensions in BigQuery在 BigQuery 中按命中范围的自定义维度过滤会话
【发布时间】:2018-04-13 19:34:36
【问题描述】:

我正在使用 BigQuery(ga360 导出)中的 GA 数据。 我有一个在很多领域工作的 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 上至少有 1 次命中,而不管在其他项目上是否有命中。 我尝试通过 WHERE 和 HAVING 子句排除,结果是一样的。 如何正确过滤?

【问题讨论】:

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


    【解决方案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 子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 2010-12-12
      • 1970-01-01
      相关资源
      最近更新 更多