Google analytics google BigQuery中的自定义维度

Google analytics google BigQuery中的自定义维度,google-analytics,google-bigquery,Google Analytics,Google Bigquery,我正在使用大查询并尝试导入自定义维度和非自定义维度。分析是从一个应用程序发送的,基本上我想要一个包含以下列的表:UserID(自定义维度)、platformID(自定义维度)、ScreenName(基本上是“Page name”的应用程序版本)和date。度量标准是分组到所有这些维度上的“屏幕视图数”。如下所示: 大会报告的照片: 所以,在bigquery中,在添加自定义维度之前,我可以得到已签出的数字(与上面的GA报告相比)。一旦我添加了自定义尺寸,这些数字就不再有任何意义了 我知道自定义维

我正在使用大查询并尝试导入自定义维度和非自定义维度。分析是从一个应用程序发送的,基本上我想要一个包含以下列的表:UserID(自定义维度)、platformID(自定义维度)、ScreenName(基本上是“Page name”的应用程序版本)和date。度量标准是分组到所有这些维度上的“屏幕视图数”。如下所示:

大会报告的照片:

所以,在bigquery中,在添加自定义维度之前,我可以得到已签出的数字(与上面的GA报告相比)。一旦我添加了自定义尺寸,这些数字就不再有任何意义了

我知道自定义维度嵌套在大查询中。因此,我首先确保使用扁平化。然后我尝试不使用扁平化,得到了相同的结果。这些数字毫无意义(比GA接口大数百倍)

我的问题如下(一个没有展平,一个有展平)

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
下面是我对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方言是如何做到的。