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 |

Вычисления в GlarusBI вернут null, если какой-либо из входных столбцов null. Это связано с тем, что нулевые значения в ваших данных представляют «отсутствующую» или «неизвестную» информацию, которая не обязательно совпадает с количеством «0». То есть сложение 1 + «неизвестно» = «неизвестно».

Если вы хотите рассматривать «неизвестные» значения как нули (или какое-либо другое значение, которое означает «ничего» в ваших данных), мы рекомендуем использовать объединить для переноса столбцов, используемых в ваших вычислениях.

Допустимые типы данных

| Тип данных | работают с coalesce | | ———————– | ——————— | | Строка | ✅ | | Число | ✅ | | Дата | ✅ | | Условие | ✅ | | JSON | ❌ |

Ограничения

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

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

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

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

Выражения GlarusBI

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

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

| 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. |

Кейс

Выражение GlarusBI 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 GlarusBI:

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

Таблицы

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

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

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

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

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

Python

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

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

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

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

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