CountIf¶
CountIf
считает общее количество строк в таблице, которые соответствуют условию. CountIf
считает каждую строку, а не только уникальные строки.
Синтаксис: CountIf(условие)
.
Например: в таблице ниже CountIf([Тариф] = "Базовый")
вернёт 3.
ID | Тариф |
---|---|
1 | Базовый |
2 | Базовый |
3 | Базовый |
4 | Бизнес |
5 | Премиальный |
Предупреждение
Функции агрегации вроде CountIf
должны быть добавлены в блок Суммировать > Произвольное выражение.
Параметры¶
CountIf
принимает функцию или условное выражение, которое возвращает логическое значение (true
или false
).
Множественные условия¶
Мы будем использовать следующие примеры данных, чтобы показать вам CountIf
с обязательными, необязательными и смешанными условиями.
ID | Тариф | Активная подписка |
---|---|---|
1 | Базовый | true |
2 | Базовый | true |
3 | Базовый | false |
4 | Бизнес | false |
5 | Премиальный | true |
Обязательные условия¶
Для подсчёта общего количества строк в таблице, которые соответствуют нескольким обязательным условиям, объедините условия с помощью оператора AND
:
Это выражение вернёт 2 на приведенном выше примере данных (общее количество базовых планов с активной подпиской).
Необязательные условия¶
Для подсчёта общего количества строк в таблице, которые соответствуют нескольким необязательным условиям, объедините условия с помощью оператора OR
:
Возвращает 4 на примере данных: есть три базовых тарифа, плюс один премиальный тариф с активной подпиской.
Смешанные условия¶
Чтобы совместить обязательные и необязательные условия, сгруппируйте условия с помощью скобок:
Возвращает 2 на примере данных: есть только два базовых или бизнес-тарифа, которые не имеют активной подписки.
Подсказка
Старайтесь помещать скобки вокруг ваших групп AND
и OR
, чтобы избежать ситуации, когда обязательные условия становятся необязательными (и наоборот).
Условные подсчёты по группам¶
В общем случае чтобы получить условный подсчёт для категории или группы, например, количество неактивных подписок на тариф, вам нужно:
- Написать выражение
CountIf
с вашими условиями. - Добавить столбец Суммировать по в конструктор запросов.
На примере следующих данных:
ID | Тариф | Активная подписка |
---|---|---|
1 | Базовый | true |
2 | Базовый | true |
3 | Базовый | false |
4 | Бизнес | false |
5 | Премиальный | true |
Подсчёт общего количества неактивных подписок по плану:
Если ваш столбец Активная подписка содержит значения null
(пустые), которые представляют неактивные тарифы, вы можете использовать:
Подсказка
Оператор "не равно": !=
.
Чтобы просмотреть ваши условные подсчёты по плану, выберите в Суммировать столбец "Тариф".
Тариф | Всего неактивных подписок |
---|---|
Базовый | 1 |
Бизнес | 1 |
Премиальный | 0 |
Подсказка
При совместной работе с другими людьми полезно использовать OR
, даже если фильтр !=
короче. Включающий OR
облегчает понимание того, какие категории (например, тарифы) включены в ваш условный подсчёт.
Поддерживаемые типы данных¶
Типы данных | Работают с CountIf |
---|---|
String | ❌ |
Number | ❌ |
Timestamp | ❌ |
Boolean | ✅ |
JSON | ❌ |
CountIf
принимает функцию или условное выражение, которое возвращает логическое значение (true
или false
).
Информация о типах данных приведена в разделе обучения руководства Metabase (англ.).
Связанные функции¶
Различные способы сделать то же самое.
Glarus BI
Другие инструменты
case¶
Вы можете объединить Count
с case
:
чтобы сделать тоже самое, что и CountIf
:
Версия case
позволяет вам считать другой столбец, когда условие не выполняется. Например, если у вас есть данные из разных источников:
ID: Источник А | Тариф: Источник А | ID: Источник Б | Тариф: Источник Б |
---|---|---|---|
1 | Базовый | ||
B | базовый | ||
C | базовый | ||
4 | Бизнес | D | бизнес |
5 | Премиальный | E | премиальный |
Для подсчёта общего количества базовых тарифов в обоих источниках вы можете создать выражение case
:
- Посчитать все строки в "ID: Источник А" где "Тариф: Источник А = "Базовый"
- Посчитать все строки в "ID: Источник Б" где "Тариф: Источник Б = "базовый"
Count(case([Тариф: Источник А] = "Базовый", [ID: Источник А],
case([Тариф: Источник Б] = "базовый", [ID: Источник Б])))
CumulativeCount¶
CountIf
не делает накопительные подсчёты. Вам нужно объединить CumulativeCount с case.
В нашем примере данных есть временно́й ряд:
ID | Тариф | Активная подписка | Дата создания |
---|---|---|---|
1 | Базовый | true | 1 октября, 2024 |
2 | Базовый | true | 1 октября, 2024 |
3 | Базовый | false | 1 октября, 2024 |
4 | Бизнес | false | 1 ноября, 2024 |
5 | Премиальный | true | 1 ноября, 2024 |
И, допустим, мы хотим получить счёт с накоплением активных тарифов, как показано ниже:
Месяц создания | Общее количество активных тарифов на дату |
---|---|
октябрь 2024 | 2 |
ноябрь 2024 | 3 |
Создайте агрегацию из Суммировать > Произвольное выражение:
Вам также нужно установить Суммировать по на "Дата создания: месяц".
SQL¶
Когда вы выполняете запрос с помощью конструктора запросов, Glarus BI преобразует ваши настройки конструктора запросов (фильтры, сводки и т.д.) в SQL-запрос и запускает этот запрос в вашей базе данных для получения результатов.
В нашем примере данные хранятся в базе данных PostgreSQL, SQL-запрос:
является эквивалентом выражения Glarus BI:
Если вы хотите получить условные подсчёты, разбитые по группам, SQL-запрос:
SELECT
тариф,
COUNT(CASE WHEN активная_подписка = false THEN id END) AS счёт_неактивных_подписок
FROM accounts
GROUP BY
тариф
Часть SELECT
SQL-запроса соответствует выражению Glarus BI:
Часть GROUP BY
SQL-запроса соответствует Glarus BI Суммировать по, с выбранным столбцом "Тариф".
Таблицы¶
В нашем примере данные хранятся в электронной таблице, где "ID" находится в столбце A, формула электронной таблицы:
даёт тот же результат, что и выражение Glarus BI:
Python¶
В нашем примере данные хранятся в структуре данных pandas
, df
, код Python:
использует ту же логику, что и выражение Glarus BI:
Чтобы получить условный подсчёт с группирующим столбцом:
## Добавьте свои условия
df_filtered = df[df['Активная подписка'] == false]
## Группируйте по столбцу и подсчитывайте строки в каждой группе
len(df_filtered.groupby('Тариф'))
Код Python выше будет выводить тот же результат, что и выражение Glarus BI CountIf
(с установленным Суммировать по с выбранным столбцом "Тариф").