Когда я объединяю значения в Google Data Studio с измерением даты на PostgreSQL Connector , я вижу некорректное поведение. Симптом состоит в том, что выполнение COUNT(DISTINCT)
возвращает то же значение, что и COUNT()
:
Моя теория заключается в том, что это как-то связано с агрегацией данных, происходящих после того, как подсчет уже произошел. Если я попытаюсь выполнить одинаковую агрегацию для тех же данных в экспортированном CSV вместо прямого подключения PostgreSQL Источник данных , проблема не будет воспроизведена:
My PostgreSQL Connector подключается к Amazon Redshift (jdbc:postgresql://*******.eu-west-1.redshift.amazonaws.com
) с помощью следующего пользовательского запроса:
SELECT
userid,
submissionid,
date
FROM mytable
Обход
Если я перестану использовать поле date
по умолчанию для Измерение даты и агрегирую мои собственные даты непосредственно в запросе SQL (date_byweek
), агрегация COUNT(DISTINCT)
будет работать, как и ожидалось:
SELECT
userid,
submissionid,
to_char(date,'YYYY-IW') as date_byweek
FROM mytable
Хотя этот обходной путь решает мою непосредственную проблему, он отстой, потому что я упускаю все функции даты, предоставляемые 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)