在我的 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 提醒我无法创建计算指标,我无法在计算字段中混合维度和指标。