Перейти к содержанию

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. Если вы хотите объединить значения, которые имеют разные типы данных:

Если вы хотите использовать coalesce с типами данных JSON или JSONB, вам нужно сначала сгладить объекты JSON. Для получения дополнительной информации найдите функции JSON, доступные на вашем диалекте SQL. Вы можете найти некоторые общие справочные руководства по SQL здесь (документация Metabase, англ.).

Связанные функции

В этом разделе рассматриваются функции и формулы, которые можно использовать взаимозаменяемо с выражением Glarus BI coalesce, с примечаниями о том, как выбрать лучший вариант для вашего варианта использования.

Выражения Glarus BI

Другие инструменты

Все примеры используют пользовательское выражение и примеры данных из примера консолидации значений:

Заметки Комментарии coalesce([Заметки], [Комментарии] "Нет заметок и комментариев.")
У меня есть заметка. У меня есть комментарий. У меня есть заметка.
У меня есть комментарий. У меня есть комментарий.
У меня есть заметка. У меня есть заметка.
Нет заметок и комментариев.

case

Выражение case

case(ISBLANK([Заметки]) = FALSE AND ISBLANK([Комментарии]) = FALSE, [Заметки],
     ISBLANK([Заметки]) = TRUE  AND ISBLANK([Комментарии]) = False, [Комментарии],
     ISBLANK([Заметки]) = FALSE AND ISBLANK([Комментарии]) = TRUE,  [Заметки],
     ISBLANK([Заметки]) = TRUE  AND ISBLANK([Комментарии]) = TRUE,  "Нет заметок и комментариев.")

идентично выражению coalesce:

coalesce([Заметки], [Комментарии] "Нет заметок и комментариев.")

coalesce гораздо легче писать, когда вас устраивает первое значение, если оба ваших столбца не пусты. Используйте case, если вы хотите определить конкретный вывод (например, если вы хотите вернуть «У меня есть заметки и комментарий» вместо «У меня есть заметки»).

SQL

В большинстве случаев (если вы не используете базу данных NoSQL) запросы, созданные в конструкторе запросов, преобразуются в SQL-запросы, которые выполняются в вашей базе данных или хранилище данных.

Функция SQL coalesce

SELECT
    COALESCE(заметки, комментарии, "нет заметок и комментариев")
FROM
    sample_table;

идентично выражению coalesce в Glarus BI:

coalesce([Заметки], [Комментарии] "Нет заметок и комментариев.")

Таблицы

Если ваша таблица заметок и комментариев находится в электронной таблице, где «Заметки» находятся в столбце A, а «Комментарии» — в столбце B, тогда формула

=IF(ISBLANK($A2),$B2,IF(ISBLANK($B2),$A2,"Нет заметок и комментариев."))

идентично выражению coalesce Glarus BI:

coalesce([Notes], [Comments] "Нет заметок и комментариев.")

В качестве альтернативы вы можете использовать INDEX и MATCH в формуле массива, если вы «объединяете» данные по трём или более столбцам электронной таблицы.

Python

Если таблица заметок и комментариев находится в структуре данных df, комбинация функций pandas combine_first() и fillna():

df['custom_column'] = df['заметки'].combine_first(df['комментарии'])\
                                 .fillna('Нет заметок и комментариев.')

идентична выражению coalesce Glarus BI:

coalesce([Заметки], [Коммментарии] "Нет заметок и комментариев.")

Дополнительная информация