Google 数据洞察中日期维度的 COUNT DISTINCT 聚合不准确

Pau*_*ulo 6 amazon-redshift google-data-studio

当我使用PostgreSQL Connector上的日期维度在 Google Data Studio 中聚合值时,我看到了错误的行为。症状是执行返回与以下相同的值:COUNT(DISTINCT)COUNT()

当连接器为 postgres 时,用户 ID 的计数值不正确

我的理论是,它与计数已经发生后发生的数据聚合有关。如果我尝试对导出的CSV 中的相同数据进行完全相同的聚合,而不是直接从PostgreSQL Connector Data Source中进行聚合,则问题不会重现:

当连接器是 csv 文件时用户 ID 的正确计数值

我的PostgreSQL 连接器正在使用以下自定义查询连接到Amazon Redshift ( jdbc:postgresql://*******.eu-west-1.redshift.amazonaws.com):

SELECT
  userid,
  submissionid,
  date
FROM mytable
Run Code Online (Sandbox Code Playgroud)

解决方法

如果我停止使用日期维度的默认date字段并直接在 SQL 查询 ( ) 中聚合我自己的日期,聚合将按预期工作:date_byweekCOUNT(DISTINCT)

SELECT
  userid,
  submissionid,
  to_char(date,'YYYY-IW') as date_byweek
FROM mytable
Run Code Online (Sandbox Code Playgroud)

虽然这个变通方法解决了我眼前的问题,但它很糟糕,因为我错过了 Data Studio 提供的所有日期功能(层次结构钻取日期范围过滤等)。更不用说降低我对产品中其他可能存在“问题”的信心


如何繁殖

如果您想重新创建问题,使用以下数据作为PostgreSQL 数据源就足够了:

> SELECT * FROM mytable
  userid  submissionid
-------- -------------
       1             1
       2             2
       1             3
       1             4
       3             5

> COUNT(DISTINCT userid) -- ERROR:    Returns 5 when data source is PostgreSQL
> COUNT(DISTINCT userid) -- EXPECTED: Returns 3 when data source is CSV (exported from same PostgreSQL query above)
Run Code Online (Sandbox Code Playgroud)

小智 1

我对 MySQL 连接器也有同样的问题。但当我将数据库中的日期字段格式从 DATETIME (YYYY-MM-DD HH:MM:SS) 更改为 INT (Unixtimestamp) 时,我的问题得到了解决。将此表连接到 Googe Datastudio 后,我将此字段的类型设置为日期(YYYYMMDD)并且所有工作都按预期进行。希望这可以帮助你:)