我正在使用大查询,并尝试导入自定义维度以及非自定义维度。分析是从应用程序发送的,基本上我想要一个包含列的表:UserID(自定义维度),platformID(自定义维度),ScreenName(基本上是“页面名称”的应用版本)和日期。该指标是分组到所有这些维度上的“屏幕视图数”。这就是下面的内容:
GA报告的照片:
所以,在bigquery中,我可以获得签出的数字(与上面的GA报告相比),直到我添加了自定义维度。一旦我添加了自定义尺寸,这些数字就没有任何意义了。
我知道自定义维度嵌套在大查询中。所以我一开始确保使用FLATTEN。然后我尝试了没有展平并得到了相同的结果。这些数字毫无意义(比GA接口大几百倍)。
我的查询如下(一个没有FLATTEN,一个没有FLATTEN)。
ps我理想地想要使用
count(hits)
而不是
count(hits.appInfo.screenName)
但是当我在子查询中选择匹配时,我一直收到错误。
我的查询没有展平如下。如果你可以帮我弄清楚为什么一旦我添加自定义尺寸,所有数据都搞砸了
SELECT
date,
hits.appInfo.version,
hits.appInfo.screenName,
UserIdd,
platform,
count(hits.appInfo.screenName)
FROM (
SELECT
date,
hits.appInfo.version,
hits.appInfo.screenName,
max(case when hits.customdimensions.index = 5 then hits.customdimensions.value end) within record as UserIdd,
max(case when hits.customdimensions.index = 20 then hits.customdimensions.value end) within record as platform
FROM
TABLE_DATE_RANGE([fiery-cabinet-97820:87025718.ga_sessions_], TIMESTAMP('2017-04-04'), TIMESTAMP('2017-04-04'))
)
where UserIdd is not null
and platform = 'Android'
GROUP BY
1,
2,
3,
4,
5
ORDER BY
6 DESC
这是我对FLATTEN的查询(同样的问题 - 数字没有意义)
SELECT
date,
hits.appInfo.version,
customDimensions.index,
customDimensions.value,
hits.appInfo.screenName,
UserIdd,
count(hits.appInfo.screenName)
FROM (FLATTEN(( FLATTEN((
SELECT
date,
hits.appInfo.version,
customDimensions.value,
customDimensions.index,
hits.appInfo.screenName,
max(case when hits.customdimensions.index = 5 then hits.customdimensions.value end) within record as UserIdd,
hits.type
FROM
TABLE_DATE_RANGE([fiery-cabinet-97820:87025718.ga_sessions_], TIMESTAMP('2017-04-04'), TIMESTAMP('2017-04-04'))), customDimensions.value)),hits.type))
WHERE
customDimensions.value = 'Android'
and customDimensions.index = 20
and UserIdd is not null
GROUP BY
1,
2,
3,
4,
5,
6
ORDER BY
7 DESC
答案 0 :(得分:5)
我不确定hits.customDimensions.*
将始终具有用户范围的维度(并且我猜测您的userId指标是用户范围的)。
具体而言,应从customDimensions
查询用户范围的维度,而不是hits.customDimensions
。
从理论上讲,第一步是通过展平或范围聚合使customDimensions
与hits.*
兼容。我将解释扁平化方法。
GA记录的形状为(customDimensions[], hits[], ...)
,这对于查询这两个字段都没有用。我们首先将这些展平为(customDimensionN, hits[], ...)
。
升级一级,通过选择hits.*
下的字段,我们会将表格隐含地展平为(customDimensionN, hitN)
条记录。我们对这些内容进行过滤,仅包含与(customDimension5, appviewN)
匹配的记录。
最后一步是计算一切。
SELECT date, v, sn, uid, COUNT(*)
FROM (
SELECT
date,
hits.appInfo.version v,
hits.appInfo.screenName sn,
customDimensions.value uid
FROM
FLATTEN((
SELECT customDimensions.*, hits.*, date
FROM
TABLE_DATE_RANGE(
[fiery-cabinet-97820:87025718.ga_sessions_],
TIMESTAMP('2017-04-04'),
TIMESTAMP('2017-04-04'))),
customDimensions)
WHERE hits.type = "APPVIEW" and customDimensions.index = 5)
GROUP BY 1,2,3,4
ORDER BY 5 DESC
这是另一种等效方法。这使用了我在GA BQ食谱中推荐的范围聚合技巧。但是,查看查询说明,MAX(IF(...)) WITHIN RECORD
似乎相当昂贵,在第一阶段触发了额外的COMPUTE
和AGGREGATE
阶段。尽管如此,奖励还是有点容易消化。
SELECT sn, uid, date, v, COUNT(*)
FROM (
SELECT
MAX(IF(customDimensions.index = 5, customDimensions.value, null)) within record as uid,
hits.appInfo.screenname as sn,
date,
hits.appInfo.version as v,
hits.type
FROM
TABLE_DATE_RANGE([fiery-cabinet-97820:87025718.ga_sessions_], TIMESTAMP('2017-04-04'), TIMESTAMP('2017-04-04')))
WHERE hits.type = "APPVIEW" and uid is not null
GROUP BY 1,2,3,4
ORDER BY 5 DESC
我还不熟悉BQ的标准SQL方言,但似乎它会简化这种争论。如果你要做出这样的许多查询,你可能想要绕过它。