我目前有一个查询返回‘跨平台的平均会话持续时间’。我需要它现在返回‘跨平台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
发布于 2019-09-10 00:11:22
我认为你需要在这两个层次上进行聚合。这有帮助吗?
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
https://stackoverflow.com/questions/57825121
复制相似问题