coalesce¶
coalesce
просматривает значения в списке (по порядку) и возвращает первое ненулевое значение.
Эта функция полезна, когда вы хотите:
- заполнить недостающие данные,
- объединить данные из нескольких столбцов,
- создавать расчеты по нескольким столбцам.
Синтаксис | Пример |
---|---|
coalesce(значение1, значение2, …) |
coalesce("null", "null", "объект", "null" …) |
Возвращает первое ненулевое значение из списка значений | "объект" |
Заполнение пустых или нулевых значений¶
столбец_табл_слева | столбец_табл_справа | coalesce([столбец_табл_справа], 0) |
---|---|---|
1 | 1 | 1 |
2 | null |
0 |
3 | null |
0 |
4 | 4 | 4 |
Вы можете заполнить пустые или нулевые значения, если у вас есть:
- разреженные данные;
- значения
null
, созданные левым соединением (пример, показанный выше).
Более подробный пример см. в Заполнение данных для отсутствующих дат отчета (документация Metabase, англ.).
Объединение значений из разных столбцов¶
Заметки | Комментарии | coalesce([Заметки], [Комментарии] "Нет заметок и комментариев.") |
---|---|---|
У меня есть заметка. | У меня есть комментарий. | У меня есть заметка. |
У меня есть комментарий. | У меня есть комментарий. | |
У меня есть заметка. | У меня есть заметка. | |
Нет заметок и комментариев. |
Создание расчётов по разным столбцам¶
Промежуточный итог | Скидка | coalesce([Промежуточный итог], 0) - coalesce([Скидка], 0) |
---|---|---|
10.00 | 0.15 | 9.85 |
21.00 | 21.00 | |
16.00 | 1.60 | 14.40 |
4.00 | 4.00 |
Вычисления в Glarus BI вернут null
, если какой-либо из входных столбцов null
. Это связано с тем, что пустые значения в ваших данных представляют «отсутствующую» или «неизвестную» информацию, которая не обязательно совпадает с количеством «0». То есть сложение 1 + «неизвестно» = «неизвестно».
Если вы хотите рассматривать «неизвестные» значения как нули (или какое-либо другое значение, которое означает «ничего» в ваших данных), мы рекомендуем "оборачивать" столбцы в coalesce
.
Допустимые типы данных¶
Тип данных | Работают с coalesce |
---|---|
Строка | ✅ |
Число | ✅ |
Дата | ✅ |
Условие | ✅ |
JSON | ❌ |
Ограничения¶
Используйте одни и те же типы данных в одной функции coalesce
. Если вы хотите объединить значения, которые имеют разные типы данных:
- Используйте оператор SQL
CAST
. - Измените тип данных на странице метаданных таблицы.
Если вы хотите использовать coalesce
с типами данных JSON или JSONB, вам нужно сначала сгладить объекты JSON. Для получения дополнительной информации найдите функции JSON, доступные на вашем диалекте SQL. Вы можете найти некоторые общие справочные руководства по SQL здесь (документация Metabase, англ.).
Связанные функции¶
В этом разделе рассматриваются функции и формулы, которые можно использовать взаимозаменяемо с выражением Glarus BI coalesce
, с примечаниями о том, как выбрать лучший вариант для вашего варианта использования.
Выражения Glarus BI
Другие инструменты
Все примеры используют пользовательское выражение и примеры данных из примера консолидации значений:
Заметки | Комментарии | coalesce([Заметки], [Комментарии] "Нет заметок и комментариев.") |
---|---|---|
У меня есть заметка. | У меня есть комментарий. | У меня есть заметка. |
У меня есть комментарий. | У меня есть комментарий. | |
У меня есть заметка. | У меня есть заметка. | |
Нет заметок и комментариев. |
case¶
case(ISBLANK([Заметки]) = FALSE AND ISBLANK([Комментарии]) = FALSE, [Заметки],
ISBLANK([Заметки]) = TRUE AND ISBLANK([Комментарии]) = False, [Комментарии],
ISBLANK([Заметки]) = FALSE AND ISBLANK([Комментарии]) = TRUE, [Заметки],
ISBLANK([Заметки]) = TRUE AND ISBLANK([Комментарии]) = TRUE, "Нет заметок и комментариев.")
идентично выражению coalesce
:
coalesce
гораздо легче писать, когда вас устраивает первое значение, если оба ваших столбца не пусты. Используйте case
, если вы хотите определить конкретный вывод (например, если вы хотите вернуть «У меня есть заметки и комментарий» вместо «У меня есть заметки»).
SQL¶
В большинстве случаев (если вы не используете базу данных NoSQL) запросы, созданные в конструкторе запросов, преобразуются в SQL-запросы, которые выполняются в вашей базе данных или хранилище данных.
Функция SQL coalesce
идентично выражению coalesce
в Glarus BI:
Таблицы¶
Если ваша таблица заметок и комментариев находится в электронной таблице, где «Заметки» находятся в столбце A, а «Комментарии» — в столбце B, тогда формула
идентично выражению coalesce
Glarus BI:
В качестве альтернативы вы можете использовать INDEX и MATCH в формуле массива, если вы «объединяете» данные по трём или более столбцам электронной таблицы.
Python¶
Если таблица заметок и комментариев находится в структуре данных df
, комбинация функций pandas
combine_first()
и fillna()
:
df['custom_column'] = df['заметки'].combine_first(df['комментарии'])\
.fillna('Нет заметок и комментариев.')
идентична выражению coalesce
Glarus BI: