根据 hits.page.pageTitle 计算会话数

Posted

技术标签:

【中文标题】根据 hits.page.pageTitle 计算会话数【英文标题】:Count Sessions based on hits.page.pageTitle 【发布时间】:2017-10-23 11:24:31 【问题描述】:

我正在查询包含 Google Analytics 导出的 BigData。 查找访问包含字符串“rafinha”的页面的所有会话,因此我使用此查询

SELECT
channelGrouping as Default_Channel_Grouping, 
SUM (totals.visits) as Sessions,
SUM(case when hits.page.pageTitle CONTAINS ('rafinha - Dugout') then 1 else 0 end) as Rafinha_Sessions
FROM

(TABLE_DATE_RANGE([133338516.ga_sessions_], 
                TIMESTAMP('2017-10-01'), 
                TIMESTAMP('2017-10-20')))   
GROUP BY Default_Channel_Grouping
ORDER BY Sessions DESC

我没有得到 BigQuery 和 Google Analytics 之间的数字匹配 > Acquisitions > Channels

【问题讨论】:

hits 是一个重复字段,因此如果有多个匹配的pageTitle 值,您可能会多算totals.visits。您是否尝试过使用标准 SQL?通过重复的字段操作更容易明确。 【参考方案1】:

试试

SELECT
  channelGrouping,
  COUNT(1) AS Sessions,
  SUM(isRafinhaSession)
FROM (
  SELECT
    channelGrouping,
    SOME(hits.page.pageTitle CONTAINS ('rafinha - Dugout')) WITHIN RECORD     isRafinhaSession
  FROM (TABLE_DATE_RANGE([133338516.ga_sessions_], TIMESTAMP('2017-10-01'), TIMESTAMP('2017-10-20')))
  WHERE
    totals.visits=1)
GROUP BY
  1
ORDER BY
  Sessions DESC

内部查询在会话级别(WITHIN RECORD)查找您的条件(SOME 使用 OR 聚合多个布尔值) - 而外部查询允许对整个表进行分组和聚合。

【讨论】:

感谢@sco,这对除(其他)以外的所有频道都非常有用。在 Google Analytics 中我得到 14 个会话,而在 BigQuery 中我只得到 1 个。您认为问题出在哪里?【参考方案2】:

这是数据相关的问题,所以使用lower进行比较解决了如下问题,谢谢大家。

SELECT
  channelGrouping,
  COUNT(1) AS Sessions,
  SUM(nvl(isRafinhaSession,1)) as RafinhaSession
FROM (
  SELECT
    channelGrouping,
    some(LOWER(hits.page.pageTitle) CONTAINS LOWER(('rafinha - Dugout')) ) WITHIN RECORD     isRafinhaSession
  FROM (TABLE_DATE_RANGE([133338516.ga_sessions_], TIMESTAMP('2017-10-01'), TIMESTAMP('2017-10-20')))
  WHERE
    totals.visits=1)
GROUP BY
  1
ORDER BY
  Sessions DESC

【讨论】:

以上是关于根据 hits.page.pageTitle 计算会话数的主要内容,如果未能解决你的问题,请参考以下文章

怎样根据身份证号码计算年龄?

mysql中怎么根据经纬度计算距离

sql根据身份证计算年龄。

请问根据GPS坐标点怎么计算面积?

根据经维度计算距离,在sql实现根据经维度计算距离

根据经维度计算距离,在sql实现根据经维度计算距离