我们正在尝试使用脚本为Doug Mackenzie在此处创建链接的Google BigQuery漏斗:http://online-behavior.com/analytics/funnel-analysis
我们的SQL调用遇到了一些问题。
我们正在尝试使用来自hits.customDimensions.index = 20的过滤器,其中值为1.这些值始终存在,因此简单的过滤器(例如在其介绍中用作示例的过滤器)很遗憾是不够的。
过滤器如:
WHERE hits.customDimensions.index = '20'
不过滤我们需要过滤的内容
相反,我们需要(我们想象)这样的事情:
WHERE MAX(IF(hits.customDimensions.index=20,hits.customDimensions.value,NULL)) WITHIN hits as locked= '1'
这就是我们尝试过的方法:
FROM (
SELECT
fullVisitorId,
visitId,
MIN(hits.hitNumber) AS firstHit,
MAX(IF(hits.isExit, 1, 0)) AS exit
FROM(
SELECT
*,
MAX(IF(hits.customDimensions.index=20,hits.customDimensions.value,NULL)) WITHIN hits as locked,
FROM
TABLE_DATE_RANGE([[dataset.ga_sessions_], TIMESTAMP('2017-06-01'), TIMESTAMP('2017-06-04'))
)
WHERE
REGEXP_MATCH(hits.page.pagePath, '^/plus/.*/[0-9]')
AND totals.visits = 1
AND locked= '1'
GROUP BY
fullVisitorId,
visitId) s0
返回错误:
错误:无法查询重复字段customDimensions.index和hits.kunde的叉积。 ;无法查询重复字段customDimensions.value和hits.kunde的交叉积。
我们已经看到有一些建议可以使用FLATTEN
解决上述错误的问题。但是,这似乎给出了语法错误:
FROM (
SELECT
fullVisitorId,
visitId,
MIN(hits.hitNumber) AS firstHit,
MAX(IF(hits.isExit, 1, 0)) AS exit,
MAX(IF(hits.customDimensions.index=20,hits.customDimensions.value,NULL)) WITHIN hits AS locked
FROM
FLATTEN(TABLE_DATE_RANGE([[dataset.ga_sessions_], TIMESTAMP('2017-06-01'), TIMESTAMP('2017-06-04')),hits.customDimension)
WHERE
REGEXP_MATCH(hits.page.pagePath, '^/plus/.*/[0-9]')
AND totals.visits = 1
AND locked = '1'
GROUP BY
fullVisitorId,
visitId) s0
只是提出错误:Error: Not found: Table eb-bigquery:3917183.ga_sessions_
因此,我们非常感谢任何有关如何使过滤器工作的建议。
答案 0 :(得分:2)
自撰写此博客以来,BigQuery已经发展了很多,现在我们有更先进的技术来处理数据。
这就是我问你是否可以使用标准版BigQuery的主要原因,因为解决这个问题会更容易。例如:
SELECT
fullvisitorid,
visitid,
(select min(hitNumber) from unnest(hits) where regexp_contains(page.pagePath, r'^/plus/.*/[0-9]')) firstHit,
(select max(isExit) from UNNEST(hits) where regexp_contains(page.pagePath, r'^/plus/.*/[0-9]')) exitFlag
FROM `table`
WHERE 1 = 1
AND EXISTS(select 1 from unnest(hits) where regexp_contains(page.pagePath, r'^/plus/.*/[0-9]'))
AND EXISTS(select 1 from unnest(hits) hits where (select count(value) from unnest(hits.customDimensions) custd where index=20) > 0)
AND totals.visits = 1
此查询执行相同的操作并且比Legacy运行得更快,因为它避免首先取消所有重复的字段然后处理数据。