在 BigQuery 中按命中范围的自定义维度过滤会话
Filtering sessions by hit-scoped custom dimensions in BigQuery
我正在 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
问题是此查询为我提供了至少有 1 次点击 project1 的会话数字,无论是否点击了其他项目。
我尝试通过 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 子句。
我正在 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
问题是此查询为我提供了至少有 1 次点击 project1 的会话数字,无论是否点击了其他项目。 我尝试通过 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 子句。