BigQuery到Data Studio:无论选择的时间段如何,都显示可靠的COUNT DISTINCT

时间:2019-09-26 14:03:23

标签: count google-bigquery distinct google-data-studio hyperloglog

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

1 个答案:

答案 0 :(得分:0)

APPROX_COUNT_DISTINCT对您来说可能对性能更友好吗?

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

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

或者您可以提供一份包含这两种方法的2页报告,并告诫第一种方法可以在一段时间内使用,但会慢得多?