在BigQuery中选择多个产品范围的自定义维度

3
我正在尝试在Google BigQuery中查询多个产品范围的自定义维度。结果如下所示:Current set of results 我想要在结果中获取合并的行,结果应该是这样的:Expected set of results 使用BigQuery的查询语句可以实现吗? 编辑 请查看我使用的现有查询语句:
SELECT IF(hits.product.customDimensions.index=21, hits.product.customDimensions.value, NULL) cd21,
IF(hits.product.customDimensions.index=22, 
hits.product.customDimensions.value, NULL) cd22
FROM [<table_id>.ga_sessions_20160510]
WHERE hits.product.productListName LIKE "%test%"
  AND hits.product.isImpression IS TRUE
  AND hits.product.customDimensions.index IN (21,22)

请分享您现有的查询,以便我们对其进行改进。 - Pentium10
请查看我使用的现有查询: SELECT IF(hits.product.customDimensions.index=21, hits.product.customDimensions.value, NULL) cd21, IF(hits.product.customDimensions.index=22, hits.product.customDimensions.value, NULL) cd22 FROM [<table_id>.ga_sessions_20160510] WHERE hits.product.productListName LIKE "%test%" AND hits.product.isImpression IS TRUE AND hits.product.customDimensions.index IN (21,22) - Sarjak
1个回答

1

我使用公共数据集重写了一个例子:

SELECT fullVisitorId, visitId, hits.hitNumber, hits.time,
  max(IF(hits.customDimensions.index = 1, hits.customDimensions.value, NULL)) within RECORD cd21,
  max(IF(hits.customDimensions.index = 2, hits.customDimensions.value, NULL)) within RECORD cd22,
FROM
  [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910]
WHERE
  hits.customDimensions.index IN ( 1,2 )
and fullVisitorId = '712553853382222331'

输出结果为:

+-----+--------------------+------------+----------------+-----------+-------+--------+--+
| Row | fullVisitorId      | visitId    | hits_hitNumber | hits_time | cd21  | cd22   |  |
+-----+--------------------+------------+----------------+-----------+-------+--------+--+
| 1   | 712553853382222331 | 1378804218 | 1              | 0         | Vests | Bronze |  |
+-----+--------------------+------------+----------------+-----------+-------+--------+--+
| 2   | 712553853382222331 | 1378804218 | 2              | 9611      | Vests | Bronze |  |
+-----+--------------------+------------+----------------+-----------+-------+--------+--+
| 3   | 712553853382222331 | 1378804218 | 3              | 10664     | Vests | Bronze |  |
+-----+--------------------+------------+----------------+-----------+-------+--------+--+
| 4   | 712553853382222331 | 1378804218 | 5              | 25377     | Vests | Bronze |  |
+-----+--------------------+------------+----------------+-----------+-------+--------+--+

正如您所注意到的,它使用WITHIN语法从同一记录中读取多个条目。这样你就可以得到作用域聚合。
请注意,在GA数据上,您可能会有多个命中,如果您希望仅保留一行,则可能需要进一步聚合此输出。
Google Analytics团队提供了一个样本数据集,您可以使用它来了解生成的数据的性质。您可以通过在项目菜单中添加项目google.com:analytics-bigquery(项目名称旁边的下拉菜单,切换到项目 ➪ 显示项目)将此数据添加到BigQuery UI中的视图中。或者,您可以导航到BigQuery UI链接https://bigquery.cloud.google.com/project/google.com:analytics-bigquery 添加项目后,样本数据集(LondonCycleHelmet)将显示在导航面板中。它包含两个表:
  • ga_sessions_20130910
  • refunds_201309

答案有所帮助。但是,我正在获取的数据在同一次命中号中具有多个CD值。由于这些是产品印象,我们就是这样做的。这样做的效果是MAX函数只给出最高值而不是所有4个值。有没有办法实现这一点? - Sarjak
使用我之前使用的查询,我得到了http://i.imgur.com/r2rYpJY.png。使用您的查询中的MAX,我得到了http://i.imgur.com/2DlJ642.png。 - Sarjak
用group_concat替换MAX。我只是举了一个例子。 - Pentium10
我也尝试使用GROUP_CONCAT,但它没有给出预期的结果。GROUP_CONCAT返回的是http://i.imgur.com/dBTc7Uy.png(所有内容都在一行中)。我们需要的是http://i.imgur.com/VJ24j55.png。你能帮忙吗? - Sarjak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接