Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在BigQuery Google Analytics数据中提取两个页面之间的用户旅程数据_Sql_Google Analytics_Google Bigquery - Fatal编程技术网

Sql 在BigQuery Google Analytics数据中提取两个页面之间的用户旅程数据

Sql 在BigQuery Google Analytics数据中提取两个页面之间的用户旅程数据,sql,google-analytics,google-bigquery,Sql,Google Analytics,Google Bigquery,如何在Google Analytics BigQuery导出数据中提取用户在两个特定页面之间的旅程数据 例如: 网站有100个页面:hits.page.pagePath=/page\u 1到hits.page.pagePath=/page\u 100 目标是从/page_13到/page_22提取用户旅程数据,包括页面之间的所有数据 挑战在于旅程不是顺序的,比如/page_13->/page14->…->/第22页 但是可能是/page13->/Pageu 5->/Pageu 41->/Page

如何在Google Analytics BigQuery导出数据中提取用户在两个特定页面之间的旅程数据

例如:

网站有100个页面:hits.page.pagePath=/page\u 1到hits.page.pagePath=/page\u 100

目标是从/page_13到/page_22提取用户旅程数据,包括页面之间的所有数据

挑战在于旅程不是顺序的,比如/page_13->/page14->…->/第22页


但是可能是/page13->/Pageu 5->/Pageu 41->/Pageu 99->/Pageu 22。

谷歌分析样本有一本食谱,其中有一些例子,比如点击顺序。使用字符串_AGGhits.page.pagePath,您可以构建所需的用户旅程点击序列

为了只过滤两个需要的页面,我们可以使用诸如答案之类的方法。但是,在本例中,我们希望将一个设置为起点,另一个设置为终点。此外,我们可以在用户到达目标页面后进行剪切,以使这两条路径相似:

/第13页->/第5页->/第41页->/第99页->/第22页

/第13页->/第5页->/第41页->/第99页->/第22页->第37页

还要注意的是,我们可以使用新功能(目前处于Beta测试阶段)来更改脚本顶部的页面对,并构建一个动态正则表达式。例如,使用可用的公共数据检查/home和/google+重新设计/shop+by+品牌/youtube之间的旅程:

标准SQL -使用动态正则表达式更改源页面和目标页面的脚本。 声明来源、目的地、正则表达式字符串; 设置原点='/home'; 设置目的地='/google+重新设计/shop+by+品牌/youtube'; 设置regex=CONCAT,REPLACEorigin,'+','\\+','.*?',REPLACEdestination,'+','\\+'; -运行查询 选择 pagePath作为用户旅程, COUNT1作为频率 从…起 选择 visitId, REGEXP\u EXTRACTSTRING\u AGGhits.page.pagePath,regex作为pagePath 从…起 `bigquery公共数据。google_analytics_sample.ga_sessions_*`, 以安打为安打 哪里 _表_“20170701”之间的后缀 和‘20170731’ 和hits.type=PAGE 分组 维西蒂德 哪里 页面路径不为空 分组 页面路径 订购人 计数1说明 限度 10 返回以下结果:

为了进一步优化它,我们可以只选择原点的最后一次出现,但您可能希望将这样的事情计算为不同的路径:

/第13页->/第99页->/第22页

/page13->/pageu 5->/pageu 13->/pageu 99->/pageu 22

您可以使用数组agg。如果我理解正确的话,您希望一个组在第一次访问第13页时处于状态,在访问第22页时结束

让我假设,对于每个用户,您希望第一次命中13到22。您可以通过以下两个特征来识别组:

select h.*
from (select h.*,
             countif( page like '%/page_13' ) over (partition by user order by hit_time) as hit_13,
             countif( page like '%/page_22' ) over (partition by user order by hit_time) as hit_22,
             countif( page like '%/page_22' ) over (partition by user) as has_22
      from hits h
     ) h
where has_22 and
      hit_13 > 0 and
      (hit_22 = 0 or page like '%/page_22);
这将返回以13开头、以22结尾的页面,并确保用户同时拥有这两个页面

现在,对于旅程,只需使用聚合。但是,遗憾的是,BQ不允许在数组上进行聚合——如果您随后希望按行程进行汇总的话。因此,我将使用string_agg:


请显示一些示例数据。它类似于BigQuery中的Google分析示例数据集。从bigquery-public-data.google_analytics_sample.ga_sessions_20170801中选择DISTINCT page.pagePath,UNNESThits limit 100;假设用户从/store.html旅行到/basket.html。在此期间,用户可能浏览过/google+重新设计/apparel/womens/womens+外衣,/google+重新设计/wearables/men+s+t恤/主页或/google+重新设计/bags/Backs/google+笔记本电脑+tech+背包+black.axd。谢谢非常感谢您的详细回答,它真的很有帮助。由于脚本需要在prod中运行,我将等待正式可用。非常感谢您为此花费时间!
select h.user,
       string_agg(page order by hit_time, ' -> ')
from (select h.*
      from (select h.*,
                   countif( page like '%/page_13' ) over (partition by user order by hit_time) as hit_13,
                   countif( page like '%/page_22' ) over (partition by user order by hit_time) as hit_22,
                   countif( page like '%/page_22' ) over (partition by user) as has_22
            from hits h
           ) h
      where has_22 and
            hit_13 > 0 and
            (hit_22 = 0 or page like '%/page_22)
     ) h
group by user;