首页 > 解决方案 > BigQuery 到 Data Studio :无论所选时间段如何,都显示可靠的 COUNT DISTINCT

问题描述

在我的 BigQuery 项目中,我存储从 Firebase 集成的事件数据。粒度和维度使得尝试在 Data Studio 中快速呈现原始数据会使报告变得非常缓慢(每页/交互 1-2 分钟)。

然后我开始思考如何在 BigQuery 中创建预聚合表以加快一切速度,但很快意识到 COUNT DISTINCT 指标将是这种方法的问题。让我解释:

SELECT user, date
FROM UNNEST([
  STRUCT("Adam" AS user, "20190923" AS date),
  ("Bob", "20190923"),
  ("Carl", "20190923"),
  ("Adam", "20190924"),
  ("Bob", "20190924"),
  ("Adam", "20190925"),
  ("Carl", "20190925"),
  ("Bob", "20190926")
]) AS website_visits;

+------+----------+
| User |   Date   |
+------+----------+
| Adam | 20190923 |
| Bob  | 20190923 |
| Carl | 20190923 |
| Adam | 20190924 |
| Bob  | 20190924 |
| Adam | 20190925 |
| Carl | 20190925 |
| Bob  | 20190926 |
+------+----------+

以上是网站访问量表。

显然,创建一个预聚合表,如

SELECT date, COUNT(DISTINCT user) FROM website_visits GROUP BY date

有一个限制,即计数不能进一步聚合(甚至更少,动态地)以获得总数,因为执行 SUM 将返回 8 个不正确的唯一用户,只有 3 个唯一用户。

在 BigQuery 中,这是通过使用 HLL_COUNT 来解决的,尽管近似值对我来说还可以。

现在到了一个大问题:

如何做同样的事情以使结果可以在 Data Studio 中显示????

HLL_COUNT.EXTRACT 不能作为其中的函数使用,在报告中我总是要记住,日期范围是由用户设置的,但是他喜欢,所以不可能为 ALL存储预先汇总的结果案例...

编辑 1:APPROX_COUNT_DISTINCT

根据 Bobbylank 的回答,我尝试使用 APPROX_COUNT_DISTINCT。但是,我发现这似乎只是将问题移到了底线。我的错没有解释那里有什么。尽管性能可以接受,但我似乎无法将数据源与此计算指标混合。

示例:在显示所选期间的唯一用户数量(现在有效)之后,我还尝试像 Firebase 一样在 Data Studio 中显示平均每用户收入 (ARPU)。

为此,我必须SUM(REVENUE) / APPROX_COUNT_DISTINCT(USER)

显然,REVENUE 可以与预聚合一起使用,并且可以在原始数据中使用。然后我尝试将原始数据与仅包含用户访问的表混合。但是 APPROX_COUNT_DISTINCT 不能在混合数据定义中使用,因为不允许计算指标。

即使尝试将 USER 字段用作具有 Count Distinct 聚合的指标,尽管在分别显示收入和用户计数时返回正确的数字,但当我尝试将它们划分时,问题变成了聚合(将 SUM 或 AVG 应用于该字段,基本上是结果将是每天的 AVG(REVENUE/USERS))。

然后我还尝试将 REVENUE 直接存储在访问表中,但 Data Studio 提醒我无法创建计算指标,我无法在计算字段中混合维度和指标。

标签: countgoogle-bigquerydistinctgoogle-data-studiohyperloglog

解决方案


APPROX_COUNT_DISTINCT 可能对您更友好?

https://support.google.com/datastudio/answer/9189108?hl=en

否则,我能想到的唯一方法是根据客户每天的要求预先计算几个指标(例如,当天的唯一用户、7 天累积、14 天等)。

或者您可以提供包含这两种方法的 2 页报告,但需要注意的是第一种方法可以在一段时间内使用,但速度会慢得多?


推荐阅读