SumIf

SumIf суммирует значения в столбце на основе условия.

Синтаксис: SumIf(column, condition).

Пример: в таблице ниже SumIf([Payment], [Plan] = "Basic") вернет 200.

| Payment | Plan | |———-|————-| | 100 | Basic | | 100 | Basic | | 200 | Business | | 200 | Business | | 400 | Premium |

функции агрегации такие как sumif должны быть добавлены в Summarize menu > Custom Expression (прокрутите вниз в меню, если это необходимо).

Параметры

  • column может быть именем числового столбца или функцией, возвращающей числовой столбец.

  • condition - это функция или условное выражение, возвращающее логическое значение (true или false), например, условное выражение [Payment] > 100.

Множественные условия

Мы будем использовать следующие примеры данных, чтобы показать вам SumIf с обязательными, необязательными и смешанными условиями.

| Payment | Plan | Date Received | |———-|————-| ——————| | 100 | Basic | October 1, 2020 | | 100 | Basic | October 1, 2020 | | 200 | Business | October 1, 2020 | | 200 | Business | November 1, 2020 | | 400 | Premium | November 1, 2020 |

Требуемые условия

Чтобы суммировать столбец на основе нескольких обязательных условий, объедините условия с помощью оператора AND:

SumIf([Payment], ([Plan] = "Basic" AND month([Date Received]) = 10))

Это выражение вернет 200 на приведенных выше примерах данных: сумма всех платежей, полученных за базовые планы в октябре.

Опциональные условия

Чтобы суммировать столбец с несколькими необязательными условиями, объедините условия с помощью оператора OR:

SumIf([Payment], ([Plan] = "Basic" OR [Plan] = "Business"))

Возвращает 600 на примере данных.

Некоторые обязательные и некоторые необязательные условия

Чтобы объединить обязательные и необязательные условия, сгруппируйте условия с помощью скобок:

SumIf([Payment], ([Plan] = "Basic" OR [Plan] = "Business") AND month([Date Received]) = 10)

Возвращает 400 на примере данных.

Tip: make it a habit to put parentheses around your AND and OR groups to avoid making required conditions optional (or vice versa).

Условные итоги по группе

Чтобы получить условный итог для категории или группы, например, общая сумма платежей за план, вам нужно:

  1. Напишите sumif формулу с вашими условиями. 2Добавьте столбец Group by в конструктор запросов.

| Payment | Plan | Date Received | |———-|————-| ——————| | 100 | Basic | October 1, 2020 | | 100 | Basic | October 1, 2020 | | 200 | Business | October 1, 2020 | | 200 | Business | November 1, 2020 | | 400 | Premium | November 1, 2020 |

Чтобы просуммировать платежи за бизнес и премиум планы:

SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")

Или сумма платежей за все планы, которые не являются “Basic”:

SumIf([Payment], [Plan] != "Basic")

Оператор “не равно” != должен быть записан как !=.

Чтобы просмотреть эти платежи по месяцам, установите столбец Group by на “Date Received: Month”.

| Date Received: Month | Total Payments for Business and Premium Plans | |———————-|———————————————–| | October | 200 | | November | 600 |

Подсказка: при совместной работе с другими людьми полезно использовать фильтр OR, даже если фильтр != короче. Включающий фильтр OR облегчает понимание того, какие категории (например, планы) включены в сумму.

Принимаемые типы данных

| Типы данных | Работают с SumIf | |————————————————————————————————————-|————————-| | String | ❌ | | Number | ✅ | | Timestamp | ❌ | | Boolean | ✅ | | JSON | ❌ |

См. параметры.

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

Разные способы сделать одно и то же, потому что CSV-файлы по-прежнему составляют 40% данных мира.

GlarusBI

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

case

Вы можете объединить Sum и case:

Sum(case([Plan] = "Basic", [Payment]))

делает то же самое, что и SumIf:

SumIf([Payment], [Plan] = "Basic")

Версия case позволяет суммировать другой столбец, когда условие не выполняется. Например, вы можете создать столбец с названием “Revenue”, который:

  • Просуммировать столбец “Платежи”, когда “План = Базовый”, и

  • суммирует столбец “Контракт” в противном случае.

sum(case([Plan] = "Basic", [Payment], [Contract]))

CumulativeSum

SumIf не считает накопительные итоги. Вам нужно объединить агрегацию CumulativeSum с формулой case.

Например, чтобы получить накопительный итог платежей за бизнес и премиум планы по месяцам (используя наши примеры данных по платежам):

| Date Received: Month | Total Payments for Business and Premium Plans | |———————-|———————————————–| | October | 200 | | November | 800 |

Создайте агрегацию из Summarize > Custom expression:

CumulativeSum(case(([Plan] = "Basic" OR [Plan] = "Premium"), [Payment], 0))

Не забудьте установить столбец Group by на “Date Received: Month”.

SQL

Когда вы запускаете запрос с помощью конструктора запросов, Metabase преобразует ваши настройки конструктора запросов (фильтры, сводки и т. д.) в SQL-запрос и запускает этот запрос в вашей базе данных для получения результатов.

В нашем примере данных по платежам хранятся в базе данных PostgreSQL, SQL-запрос:

SELECT
    SUM(CASE WHEN plan = "Basic" THEN payment ELSE 0 END) AS total_payments_basic
FROM invoices

эквивалентен выражению:

SumIf([Payment], [Plan] = "Basic")

Чтобы добавить несколько условий с группирующим столбцом, используйте SQL-запрос:

SELECT
    DATE_TRUNC("month", date_received)                       AS date_received_month,
    SUM(CASE WHEN plan = "Business" THEN payment ELSE 0 END) AS total_payments_business_or_premium
FROM invoices
GROUP BY
    DATE_TRUNC("month", date_received)

Часть SELECT SQL-запроса соответствует выражению GlarusBI SumIf:

SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")

Часть GROUP BY SQL-запроса отображается в GlarusBI как Group by столбец, установленный на “Date Received: Month”.

Электронные таблицы

Если наш образец данных по платежам находится в электронной таблице, где “Платеж” находится в столбце A, а “Дата получения” - в столбце B, формула электронной таблицы:

=SUMIF(B:B, "Basic", A:A)

выдает тот же результат, что и выражение GlarusBI:

SumIf([Payment], [Plan] = "Basic")

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

Python

В нашем примере данных по платежам хранятся в столбце df фрейма данных pandas, код Python:

df.loc[df['Plan'] == "Basic", 'Payment'].sum()

Эквивалентно выражению GlarusBI:

SumIf([Payment], [Plan] = "Basic")

Чтобы добавить несколько условий с группирующим столбцом, используйте код Python:

import datetime as dt

## Опционально: преобразовать столбец в объект datetime

    df['Date Received'] = pd.to_datetime(df['Date Received'])

## Выделите месяц и год

    df['Date Received: Month'] = df['Date Received'].dt.to_period('M')

## Добавьте свои условия

    df_filtered = df[(df['Plan'] == 'Business') | (df['Plan'] == 'Premium')]

## Сумма и группировка по

    df_filtered.groupby('Date Received: Month')['Payment'].sum()

Эти действия приведут к тому же результату, что и выражение GlarusBI SumIf (со столбцом Group by, установленным на “Date Received: Month”).

SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")

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