在我的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在该处不可用,在报告中,我始终要记住,日期范围是由用户设置的,但是他喜欢,因此无法存储< / em>所有案例的预先汇总结果...
编辑1:APPROX_COUNT_DISTINCT
根据Bobbylank的回答,我尝试使用APPROX_COUNT_DISTINCT。 但是我发现这似乎只是将问题移到了线下。我的错是没有解释那里的事。 尽管性能可以接受,但我似乎无法将数据源与此计算出的指标混合。
示例:在显示所选时间段内的唯一身份用户数量(现在可以使用)之后,我还试图像Firebase一样在Data Studio中显示每用户平均收入(ARPU)。
为此,我必须 SUM(收入)/ APPROX_COUNT_DISTINCT(USER)
很明显,REVENUE可以与预聚合一起使用,并且可以在原始数据中找到。然后,我尝试将原始数据与仅包含用户访问的表进行混合。但是,由于不允许使用计算得出的指标,因此不能在混合数据定义中使用APPROX_COUNT_DISTINCT。
即使试图将USER字段用作具有Count Distinct聚合的指标,尽管在分别显示收入和用户计数时返回了正确的数字,但当我尝试将它们分开时,问题就变成了聚合(将SUM或AVG应用于该字段,基本上结果将是每天AVG(收入/用户)。
然后,我也尝试将REVENUE直接存储在visits表中,但是Data Studio提醒我,我无法创建无法将维度和指标混合在计算字段中的计算指标。
答案 0 :(得分:0)
APPROX_COUNT_DISTINCT对您来说可能对性能更友好吗?
https://support.google.com/datastudio/answer/9189108?hl=en
否则,我能想到的唯一方法就是根据客户每天的需求预先计算几个指标(例如,当天的唯一身份用户,7天的累积用户,14天的用户等等)。
或者您可以提供一份包含这两种方法的2页报告,并告诫第一种方法可以在一段时间内使用,但会慢得多?