Google bigquery 如何操作对';平均会话持续时间';至';DAU平均会话持续时间';在BigQuery中使用谷歌分析?

Google bigquery 如何操作对';平均会话持续时间';至';DAU平均会话持续时间';在BigQuery中使用谷歌分析?,google-bigquery,Google Bigquery,我目前有一个查询返回“跨平台的平均会话持续时间”。我现在需要它返回“跨平台DAU的平均会话持续时间”。下面三个表之间的差异是iOS、Android和web数据user_id是GA中的一个自定义维度,我可以使用它,但是单独添加它并不能得到我想要的结果。我想我需要添加user_id自定义维度,并对日期进行处理,以按日期获得唯一的用户。然而,我对使用BigQuery还不熟悉,我自己无法做到这一点。我意识到这个问题是含糊不清的——我很乐意相应地更新我的问题 WITH base AS ( SELE

我目前有一个查询返回“跨平台的平均会话持续时间”。我现在需要它返回“跨平台DAU的平均会话持续时间”。下面三个表之间的差异是iOS、Android和web数据
user_id
是GA中的一个自定义维度,我可以使用它,但是单独添加它并不能得到我想要的结果。我想我需要添加user_id自定义维度,并对日期进行处理,以按日期获得唯一的用户。然而,我对使用BigQuery还不熟悉,我自己无法做到这一点。我意识到这个问题是含糊不清的——我很乐意相应地更新我的问题

WITH
  base AS (
  SELECT
    *
  FROM (
    SELECT
      _TABLE_SUFFIX AS table_date,
      "web" AS app_source,
      *
    FROM
      `XXXX.ga_sessions_*`
    UNION ALL
    SELECT
      _TABLE_SUFFIX AS table_date,
      "iOS" AS app_source,
      *
    FROM
      `XXXX.ga_sessions_*`
    UNION ALL
    SELECT
      _TABLE_SUFFIX AS table_date,
      "Android" AS app_source,
      *
    FROM
      `XXXX.ga_sessions_*` )
  WHERE
    NOT REGEXP_CONTAINS(table_date, "intraday|backup") )
SELECT
  FORMAT_DATE("%E4Y-%m-01", PARSE_DATE("%E4Y%m%d", MIN(table_date))) AS
ymd,
  AVG(COALESCE(totals.timeOnSite, totals.timeOnScreen, 0)) as timeOnSite
 FROM
  base
WHERE
  table_date > "20180101"
  GROUP BY 1
ORDER BY 1

我认为您需要在两个级别上进行聚合。这有用吗

WITH base AS (
  SELECT
    *
  FROM (
    SELECT
      _TABLE_SUFFIX AS table_date,
      'web' AS app_source,
      *
    FROM
      `XXXX.ga_sessions_*`
    UNION ALL
    SELECT
      _TABLE_SUFFIX AS table_date,
      'iOS' AS app_source,
      *
    FROM
      `XXXX.ga_sessions_*`
    UNION ALL
    SELECT
      _TABLE_SUFFIX AS table_date,
      'Android' AS app_source,
      *
    FROM
      `XXXX.ga_sessions_*` 
  )
  WHERE NOT REGEXP_CONTAINS(table_date, 'intraday|backup') 
)

select 
   app_source,
   parse_date('%Y%m%d', table_date) as date,
   count(distinct user_id) as total_users,
   AVG(coalesce(totals.timeOnSite, totals.timeOnScreen, 0)) as average_time_on_site
from base
group by 1,2
order by 1,2

那么您希望每个平台上每个用户的平均时间按日期计算?对吧?重新表述这个问题的一个有用的方法是根据你想要的维度和尺度;大致上,您需要一个表,其第一列将所有数据切割成
dau
,下一列为平均会话持续时间。我不确定日常活跃用户作为维度是什么样子的——第一列显示了什么值?你想让它显示同伙吗?或者您只想要今天的DAU的平均会话持续时间?@Jagthebellet Daily Active Users将是用户id的总和,平均会话持续时间将以秒或分钟为单位,日期将不仅仅是今天,即2019年的一天一天。@khan我想要所有用户(而不是每个用户)的平均会话持续时间按日期在每个平台上。每个用户都可以,但不是必需的。我添加了一个可能有用的答案。另外,请确保使用单引号来封装SQL语法中的字符串。这绝对有帮助。让我试试这个,然后再打给你。谢谢如果有帮助,请将答案标记为正确。谢谢。我是否需要在查询中的某个位置添加自定义维度
user\u id
,以便能够在最后一个select语句中对其进行计数?