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
:
CountIf(([Plan] = "Basic" AND [Active Subscription] = true))
Это выражение вернет 2 на приведенных выше примерах данных (общее количество базовых планов с активной подпиской).
Опциональные условия¶
Для подсчета общего количества строк в таблице, которые соответствуют нескольким необязательным условиям, объедините условия с помощью оператора OR
:
CountIf(([Plan] = "Basic" OR [Active Subscription] = true))
Возвращает 4 на примере данных: есть три базовых плана, плюс один премиум-план с активной подпиской.
Некоторые обязательные и некоторые необязательные условия¶
Чтобы совместить обязательные и необязательные условия, сгруппируйте условия с помощью скобок:
CountIf(([Plan] = "Basic" OR [Plan] = "Business") AND [Active Subscription] = "false")
Возвращает 2 на примере данных: есть только два базовых или бизнес-плана, которые не имеют активной подписки.
Подсказка: сделайте это привычкой, чтобы помещать скобки вокруг ваших групп
AND
иOR
, чтобы избежать ситуации, когда обязательные условия становятся необязательными (или наоборот).
Условные подсчеты по группам¶
В общем случае, чтобы получить условный подсчет для категории или группы, например, количество неактивных подписок на план, вам нужно:
Написать
CountIf
выражение с вашими условиями. 2Добавьте столбец Group by в конструктор запросов.
На примере следующих данных:
| ID | Plan | Active Subscription | |—–|————-| ——————–| | 1 | Basic | true | | 2 | Basic | true | | 3 | Basic | false | | 4 | Business | false | | 5 | Premium | true |
Подсчет общего количества неактивных подписок по плану:
CountIf([Active Subscription] = false)
Как альтернативный вариант если ваш столбец Active Subscription содержит null
(пустые) значения, которые представляют неактивные планы, вы можете использовать:
CountIf([Payment], [Plan] != true)
The “not equal” operator
!=
should be written as !=. Оператор “не равно”!=
должен быть записан как !=.
Чтобы просмотреть ваши условные подсчеты по плану, установите столбец Group by на “Plan”.
| Plan | Total Inactive Subscriptions | |———–|——————————| | Basic | 1 | | Business | 1 | | Premium | 0 |
Подсказка: при совместной работе с другими людьми полезно использовать фильтр
OR
, даже если фильтр!=
короче. Включающий фильтрOR
облегчает понимание того, какие категории (например, планы) включены в ваш условный подсчет.
Поддерживаемые типы данных¶
| Типы данных | Работают с CountIf
|
|—————————————————————————————————|———————-|
| String | ❌ |
| Number | ❌ |
| Timestamp | ❌ |
| Boolean | ✅ |
| JSON | ❌ |
CountIf
принимает функцию или условное выражение, которое возвращает логическое значение (true
или false
).
Связанные функции¶
GlarusBI
Другие инструменты
case¶
Вы можете объединить Count
с case:
Count(case([Plan] = "Basic", [ID]))
чтобы сделать тоже самое, что и CountIf
:
CountIf([Plan] = "Basic")
Версия 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:
CumulativeCount(case([Active Subscription] = true, [ID]))
Вам также нужно установить столбец Group by на “Дата создания: месяц”.
SQL¶
Когда вы выполняете запрос с помощью конструктора запросов, GlarusBI преобразует ваши настройки конструктора запросов (фильтры, сводки и т. д.) в SQL-запрос и запускает этот запрос в вашей базе данных для получения результатов.
В нашем примере данные хранятся в базе данных PostgreSQL, SQL-запрос:
```sql
SELECT COUNT(CASE WHEN plan = "Basic" THEN id END) AS total_basic_plans
FROM accounts
является эквивалентом выражения GlarusBI:
CountIf([Plan] = "Basic")
Если вы хотите получить условные подсчеты, разбитые по группам, SQL-запрос:
SELECT
plan,
COUNT(CASE WHEN active_subscription = false THEN id END) AS total_inactive_subscriptions
FROM accounts
GROUP BY
plan
Часть SELECT
SQL-запроса соответствует выражению GlarusBI:
CountIf([Active Subscription] = false)
Часть GROUP BY
SQL-запроса соответствует GlarusBI Group by установленному на столбец “План”.
Электронные таблицы¶
If our sample data is in a spreadsheet where “ID” is in column A, the spreadsheet formula: В нашем примере данные хранятся в электронной таблице, где “ID” находится в столбце A, формула электронной таблицы:
=CountIf(B:B, "Basic")
производит тот же результат, что и выражение GlarusBI:
CountIf([Plan] = "Basic")
Python¶
If our sample data is in a pandas
dataframe column called df
, the Python code:
В нашем примере данные хранятся в столбце pandas
df
, код Python:
len(df[df['Plan'] == "Basic"])
использует ту же логику, что и выражение GlarusBI:
CountIf([Plan] = "Basic")
Чтобы получить условный подсчет с группирующим столбцом:
## Добавьте свои условия
df_filtered = df[df['Active subscription'] == false]
## Группируйте по столбцу и подсчитывайте строки в каждой группе
len(df_filtered.groupby('Plan'))
Код Python выше будет производить тот же результат, что и выражение GlarusBI CountIf
(с установленным столбцом Group by на “План”).
CountIf([Active Subscription] = false)