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

coalesce

coalesce просматривает значения в списке (по порядку) и возвращает первое ненулевое значение.

Эта функция полезна, когда вы хотите:

Синтаксис Пример
coalesce(value1, value2, …) coalesce("null", "null", "bananas", "null" …)
Возвращает первое ненулевое значение из списка значений “bananas”

Заполнение пустых или нулевых значений

left_table_col right_table_col coalesce([right_table_col], 0)
1 1 1
2 null 0
3 null 0
4 4 4

Вы можете заполнить пустые или нулевые значения, если у вас есть:

  • Разреженные данные.
  • null значения, созданные левым соединением (пример, показанный выше).

Более подробный пример см. в Заполнение данных для отсутствующих дат отчета.

Объединение значений из разных столбцов

Notes Comments coalesce([Notes], [Comments] "No notes or comments.")
I have a note. I have a comment. I have a note.
I have a comment. I have a comment.
I have a note. I have a note.
No notes or comments.

Создание расчётов по разным столбцам

Subtotal Discount coalesce([Subtotal], 0) - coalesce([Discount], 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
Строка
Число
Дата
Условие
JSON

Ограничения

Используйте одни и те же типы данных в одной функции coalesce. Если вы хотите объединить значения, которые имеют разные типы данных:

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

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

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

Выражения Glarus BI

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

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

Notes Comments coalesce([Notes], [Comments] "No notes or comments.")
I have a note. I have a comment. I have a note.
I have a comment. I have a comment.
I have a note. I have a note.
No notes or comments.

case

Выражение case

case(ISBLANK([Notes]) = FALSE AND ISBLANK([Comments]) = FALSE, [Notes],
     ISBLANK([Notes]) = TRUE  AND ISBLANK([Comments]) = False, [Comments],
     ISBLANK([Notes]) = FALSE AND ISBLANK([Comments]) = TRUE,  [Notes],
     ISBLANK([Notes]) = TRUE  AND ISBLANK([Comments]) = TRUE,  "No notes or comments")

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

coalesce([Notes], [Comments] "No notes or comments.")

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

SQL

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

Функция SQL coalesce

SELECT
    COALESCE(notes, comments, "no notes or comments")
FROM
    sample_table;

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

coalesce([Notes], [Comments] "No notes or comments.")

Таблицы

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

=IF(ISBLANK($A2),$B2,IF(ISBLANK($B2),$A2,"No notes or comments."))

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

coalesce([Notes], [Comments] "No notes or comments.")

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

Python

Предполагая, что [таблица примечаний и комментариев] (#объединение-значений-из-разных-столбцов) находится в фрейме данных с именем df, комбинация функций pandas combine_first() и fillna()

df['custom_column'] = df['notes'].combine_first(df['comments'])\
                                 .fillna('No notes or comments.')

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

coalesce([Notes], [Comments] "No notes or comments.")

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