Google analytics google BigQuery中的自定义维度
我正在使用大查询并尝试导入自定义维度和非自定义维度。分析是从一个应用程序发送的,基本上我想要一个包含以下列的表:UserID(自定义维度)、platformID(自定义维度)、ScreenName(基本上是“Page name”的应用程序版本)和date。度量标准是分组到所有这些维度上的“屏幕视图数”。如下所示: 大会报告的照片: 所以,在bigquery中,在添加自定义维度之前,我可以得到已签出的数字(与上面的GA报告相比)。一旦我添加了自定义尺寸,这些数字就不再有任何意义了 我知道自定义维度嵌套在大查询中。因此,我首先确保使用扁平化。然后我尝试不使用扁平化,得到了相同的结果。这些数字毫无意义(比GA接口大数百倍) 我的问题如下(一个没有展平,一个有展平) ps是我理想的选择Google analytics google BigQuery中的自定义维度,google-analytics,google-bigquery,Google Analytics,Google Bigquery,我正在使用大查询并尝试导入自定义维度和非自定义维度。分析是从一个应用程序发送的,基本上我想要一个包含以下列的表:UserID(自定义维度)、platformID(自定义维度)、ScreenName(基本上是“Page name”的应用程序版本)和date。度量标准是分组到所有这些维度上的“屏幕视图数”。如下所示: 大会报告的照片: 所以,在bigquery中,在添加自定义维度之前,我可以得到已签出的数字(与上面的GA报告相比)。一旦我添加了自定义尺寸,这些数字就不再有任何意义了 我知道自定义维
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
下面是我对Flatte的查询(相同的问题-数字没有意义)
我不能肯定
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(…)似乎非常昂贵,在第一阶段触发了额外的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方言,但它似乎可以简化这种争论。如果你要做很多这样的查询,你可能会想绕开它。我不确定命中了。customDimensions.
将始终具有用户范围的维度(我猜你的用户ID度量是用户范围的)
具体来说,用户范围的维度应该从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(…)似乎非常昂贵,在第一阶段触发了额外的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方言,但它似乎可以简化这种争论。如果你要做很多这样的查询,你可能会想绕开它。为什么这个问题上有mysql
标记?为什么这个问题上有mysql
标记?我想看看标准SQL方言是如何做到的。我想看看标准SQL方言是如何做到的。