我正在处理一些新闻通讯数据,并且试图显示已注册多个新闻通讯的用户数量(列表之间的用户重叠)。我正在使用Google BigQuery和DataStudio中的新闻通讯数据进行可视化。
我的数据集为每个用户+新闻稿组合返回一行。因此,如果用户注册了三个不同的新闻通讯,它将显示:
+---+------------+--------------+
| | Name | Newsletter |
+---+------------+--------------+
| 1 | User A | Newsletter 1 |
| 2 | User A | Newsletter 2 |
| 3 | User A | Newsletter 3 |
+---+------------+--------------+
我将输入的重叠组合限制为2个。
我的问题是:我如何查询我的原始数据集以返回所有可能组合的重叠用户数?我确定有某种方法可以使用各种CASE语句执行此操作,但这似乎很乏味且效率低下。想知道是否有我没有想到的更简单的方法。
有关我如何可视化的更多背景信息,这会影响结果:
因为我将每个组合限制为2个新闻通讯,所以我认为热图可能是尝试显示此数据的好方法,因为每个“交叉点”的两个列表中都有用户数量。
但是为了在DataStudio中执行此操作,我需要数据以如下格式显示:
这就像CROSS JOIN的结果,所有不同的组合都在A列和B列中表示。因此存在重叠,但这是可视化它的必要设置(至少这是我认为的唯一方法这是可行的)。
因此,如果我要使用这种特定方法,我将如何查询我的数据集以这种格式返回它?
也对其他有关如何思考/可视化这种特殊情况的想法持开放态度,但想提出我的特定问题。
答案 0 :(得分:1)
看起来您正在寻找以下内容
#standardSQL
SELECT A, B, IFNULL(`Count`, 0) AS `Count`
FROM (
SELECT DISTINCT t1.Newsletter AS A, t2.Newsletter AS B
FROM `project.dataset.table` t1, `project.dataset.table` t2
) LEFT JOIN (
SELECT t1.Newsletter AS A, t2.Newsletter AS B, COUNT(1) AS `Count`
FROM `project.dataset.table` t1, `project.dataset.table` t2
WHERE t1.Name = t2.Name AND t1.Newsletter != t2.Newsletter
GROUP BY A, B
) USING (A, B)