CountIf¶
CountIf
считает общее количество строк в таблице, которые соответствуют условию. CountIf
считает каждую строку, а не только уникальные строки.
Синтаксис: CountIf(условие)
.
Например: в таблице ниже CountIf([Plan] = "Basic")
вернёт 3.
ID | Plan |
---|---|
1 | Basic |
2 | Basic |
3 | Basic |
4 | Business |
5 | Premium |
Примечание
Функции агрегации вроде CountIf
должны быть добавлены в Summarize menu > Custom Expression (прокрутите вниз в меню, если это необходимо).
Параметры¶
CountIf
принимает функцию или условное выражение, которое возвращает логическое значение (true
или false
).
Множественные условия¶
Мы будем использовать следующие примеры данных, чтобы показать вам CountIf
с обязательными, необязательными и смешанными условиями.
ID | Plan | Active Subscription |
---|---|---|
1 | Basic | true |
2 | Basic | true |
3 | Basic | false |
4 | Business | false |
5 | Premium | true |
Обязательные условия¶
Для подсчёта общего количества строк в таблице, которые соответствуют нескольким обязательным условиям, объедините условия с помощью оператора AND
:
Это выражение вернёт 2 на приведенных выше примерах данных (общее количество базовых планов с активной подпиской).
Необязательные условия¶
Для подсчёта общего количества строк в таблице, которые соответствуют нескольким необязательным условиям, объедините условия с помощью оператора OR
:
Возвращает 4 на примере данных: есть три базовых плана, плюс один премиум-план с активной подпиской.
Смешанные условия¶
Чтобы совместить обязательные и необязательные условия, сгруппируйте условия с помощью скобок:
Возвращает 2 на примере данных: есть только два базовых или бизнес-плана, которые не имеют активной подписки.
Подсказка
Старайтесь помещать скобки вокруг ваших групп AND
и OR
, чтобы избежать ситуации, когда обязательные условия становятся необязательными (или наоборот).
Условные подсчёты по группам¶
В общем случае, чтобы получить условный подсчёт для категории или группы, например, количество неактивных подписок на план, вам нужно:
- Напишите
CountIf
выражение с вашими условиями. - Добавьте столбец Group by в конструктор запросов.
На примере следующих данных:
ID | Plan | Active Subscription |
---|---|---|
1 | Basic | true |
2 | Basic | true |
3 | Basic | false |
4 | Business | false |
5 | Premium | true |
Подсчёт общего количества неактивных подписок по плану:
Как альтернативный вариант, если ваш столбец Active Subscription содержит null
(пустые) значения, которые представляют неактивные планы, вы можете использовать:
Примечание
Оператор "не равно" !=
должен быть записан как !=.
Чтобы просмотреть ваши условные подсчёты по плану, установите столбец Group by на "Plan".
Plan | Total Inactive Subscriptions |
---|---|
Basic | 1 |
Business | 1 |
Premium | 0 |
Подсказка
При совместной работе с другими людьми полезно использовать фильтр OR
, даже если фильтр !=
короче. Включающий фильтр OR
облегчает понимание того, какие категории (например, планы) включены в ваш условный подсчёт.
Поддерживаемые типы данных¶
Типы данных | Работают с CountIf |
---|---|
String | ❌ |
Number | ❌ |
Timestamp | ❌ |
Boolean | ✅ |
JSON | ❌ |
Информация о типах данных приведена в разделе обучения руководства Metabase (англ.).
CountIf
принимает функцию или условное выражение, которое возвращает логическое значение (true
или false
).
Связанные функции¶
Glarus BI - case - CumulativeCount
Другие инструменты - SQL - Таблицы - Python
case¶
Вы можете объединить Count
с case
:
чтобы сделать тоже самое, что и CountIf
:
Версия case
позволяет вам считать другой столбец, когда условие не выполняется. Например, если у вас есть данные из разных источников:
ID: Source A | Plan: Source A | ID: Source B | Plan: Source B |
---|---|---|---|
1 | Basic | ||
B | basic | ||
C | basic | ||
4 | Business | D | business |
5 | Premium | E | premium |
Для подсчёта общего количества базовых планов в обоих источниках вы можете создать выражение case
:
- Посчитать все строки в "ID: Source A" где "Plan: Source A = "Basic"
- Посчитать все строки в "ID: Source B" где "Plan: Source B = "basic"
Count(case([Plan: Source A] = "Basic", [ID: Source A],
case([Plan: Source B] = "basic", [ID: Source B])))
CumulativeCount¶
CountIf
не делает накопительные подсчёты. Вам нужно объединить CumulativeCount с case.
В нашем примере данных есть временной ряд:
ID | Plan | Активная подписка | Дата создания |
---|---|---|---|
1 | Basic | true | October 1, 2020 |
2 | Basic | true | October 1, 2020 |
3 | Basic | false | October 1, 2020 |
4 | Business | false | November 1, 2020 |
5 | Premium | true | November 1, 2020 |
И, допустим, мы хотим получить накопительный подсчёт активных планов, как показано ниже:
Месяц создания | Общее количество активных планов на дату |
---|---|
October 2020 | 2 |
November 2020 | 3 |
Создайте агрегацию из Summarize > Custom expression:
Вам также нужно установить столбец Group by на "Дата создания: месяц".
SQL¶
Когда вы выполняете запрос с помощью конструктора запросов, Glarus BI преобразует ваши настройки конструктора запросов (фильтры, сводки и т.д.) в SQL-запрос и запускает этот запрос в вашей базе данных для получения результатов.
В нашем примере данные хранятся в базе данных PostgreSQL, SQL-запрос:
является эквивалентом выражения Glarus BI:
Если вы хотите получить условные подсчёты, разбитые по группам, SQL-запрос:
SELECT
plan,
COUNT(CASE WHEN active_subscription = false THEN id END) AS total_inactive_subscriptions
FROM accounts
GROUP BY
plan
Часть SELECT
SQL-запроса соответствует выражению Glarus BI:
Часть GROUP BY
SQL-запроса соответствует Glarus BI Group by установленному на столбец "План".
Таблицы¶
If our sample data is in a spreadsheet where "ID" is in column A, the spreadsheet formula: В нашем примере данные хранятся в электронной таблице, где "ID" находится в столбце A, формула электронной таблицы:
производит тот же результат, что и выражение Glarus BI:
Python¶
If our sample data is in a pandas
dataframe column called df
, the Python code:
В нашем примере данные хранятся в столбце pandas
df
, код Python:
использует ту же логику, что и выражение Glarus BI:
Чтобы получить условный подсчёт с группирующим столбцом:
## Добавьте свои условия
df_filtered = df[df['Active subscription'] == false]
## Группируйте по столбцу и подсчитывайте строки в каждой группе
len(df_filtered.groupby('Plan'))
Код Python выше будет производить тот же результат, что и выражение Glarus BI CountIf
(с установленным столбцом Group by на "План").