Чем заменить суммесли в excel

Обновлено: 08.07.2024

Думаю многие пользователи Excel знакомы с функцией СУММЕСЛИМН(). Эта функция суммирует значения указанного столбца по определённым условиям. К примеру, можно использовать СУММЕСЛИМН() для суммирования значений столбца СуммаПродаж, но только тех строк в которых значения столбца Год равны 2012.
Так вот, в DAX существует более усовершенствованный и более мощный аналог данной функции, который называется CALCULATE().
Преимущества CALCULATE() перед СУММЕСЛИМН() заключаются в следующем:

    1. Более понятный синтаксис;
    2. Он не ограничивается лишь подсчётом суммы по условию. К примеру в Excel, СУММЕСЛИМН() используется для подсчёта суммы по условию, СЧЕТЕСЛИМН() для подсчёта количества по условию а СРЗНАЧЕСЛИМН() для подсчёта среднего значения. Однако в Excel нету функций МАКСЕСЛИМН(), МИНЕСЛИМН() или же СТДОТКЛЕСЛИМН(). В этом смысле CALCULATE() безграничен. Он позволяет использовать любую функцию агрегирования (либо комплексную формулу) и рассчитывать её по указанным условиям;
    3. Он используется для создания мер а СУММЕСЛИМН() не может быть использован в сводных таблицах.

    Синтаксис функции CALCULATE()

    CALCULATE(<логическое выражение>,<фильтр 1>,<фильтр 2>. )
    пример: CALCULATE(SUM(t_sales[Маржа]), t_sales[Год]=2001)
    пример: CALCULATE([ПродажиЗаДень], t_sales[Год]=2002, t_sales[КодПродукта]=313)

    CALCULATE() в действии - несколько быстрых примеров

    Начнём с простой сводной таблицы. Переместим "Год" в поле "Строки", а [ИтогоПродаж] в поле "Значения".


    Теперь создадим меру, которая высчитывает сумму продаж за 2002 год:

    [Продажи_2002]=CALCULATE([ИтогоПродаж], t_sales[Год]=2002)
    1. Мы использовали имя другой меры в качестве аргумента для CALCULATE(). То есть в качестве логического выражения в CALCULATE() может быть использована как формула так и уже существующая мера;
    2. В первом фильтр-аргументе 2002 не в кавычках. Это потому, что формат столбца числовой. Если бы формат столбца был текстовым, тогда фильтр-аргумент был бы равен ="2002";
    3. В этой мере был использован лишь один фильтр-аргумент, но при необходимости можно добавить ещё столько фильтр-аргументов, сколько захотим.



    Как видите, значения [Продажи_2002] и [ИтогоПродаж] в строке 2002 совпадают. Однако уверен что Вы недоумеваете почему в строках 2001, 2003, 2004 вместо нулей также отображается сумма продаж за 2002 год. Объясню чуть позже. А пока давайте заменим в поле "Строки" сводной таблицы "Год" на "НомерМесяца".


    Теперь, как и обещал объясню ситуацию с первым примером.
    При использовании CALCULATE() нужно учитывать три главные особенности этой функции:

    1. Фильтр-аргументы функции CALCULATE() действуют в той фазе вычисления меры в которой применяются фильтры. Эти аргументы изменяют фильтр-контекст сводной таблицы;
    2. Если фильтр-аргументы применяются к столбцу который уже находится в сводной таблице, то они изменяют контекст сводной для этого столбца. Именно поэтому в первом приведённом примере, функция CALCULATE() отображала одинаковое значение для всех строк столбца Год;
    3. Если фильтр-аргумент применяется к столбцу, не находящемуся в сводной таблице, то он дополняет существующий фильтр-контекст сводной. Во втором примере, у нас имелась сводная таблица в которой указывалась разбивка продаж по номерам месяца. В этом примере фильтр-аргумент меры [Продажи_2002] дополнил существующий фильтр-контекст сводной и отображал продажи по каждому месяцу в 2002 году.

    Два полезных примера использования функции CALCULATE()

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

    1. обычные продажи;
    2. рекламные продажи;
    3. возвраты
    [ОбычныеПродажи]=CALCULATE([ИтогоПродаж],t_sales[ТипТранзакции]=1)
    [РекламныеПродажи]=CALCULATE([ИтогоПродаж],t_sales[ТипТранзакции]=3)
    [Возвраты]=CALCULATE([ИтогоПродаж],t_sales[ТипТранзакции]=2)*-1

    *Так как Возвраты уменьшают сумму продаж, мы делаем их значение негативным чтобы они визуально отличались от обычных продаж.

    И с помощью этих мер мы можем вычислить сумму чистых продаж:

    [ЧистыеПродажи]=[ОбычныеПродажи]+[РекламныеПродажи]+[Возвраты]


    Или же узнать какой процент общих продаж составляют РекламныеПродажи:

    [ПроцРекламныхПродаж]=[РекламныеПродажи]/([ОбычныеПродажи]+[РекламныеПродажи])


    Создадим базовую меру (мера не ссылающаяся на другие меры) рассчитывающую количество активных клиентов:


    А теперь создадим меру рассчитывающую количество активных клиентов в самый первый год начала продаж, т.е. в 2001:


    Теперь, на основе этих двух мер мы можем рассчитать процент прироста клиентов по отношению к первому году начала продаж:

    Имеем таблицу по продажам, например, следующего вида:

    cond_sum1.jpg

    Задача: просуммировать все заказы, которые менеджер Григорьев реализовал для магазина "Копейка".

    Способ 1. Функция СУММЕСЛИ, когда одно условие

    Если бы в нашей задаче было только одно условие (все заказы Петрова или все заказы в "Копейку", например), то задача решалась бы достаточно легко при помощи встроенной функции Excel СУММЕСЛИ (SUMIF) из категории Математические (Math&Trig) . Выделяем пустую ячейку для результата, жмем кнопку fx в строке формул, находим функцию СУММЕСЛИ в списке:

    cond_sum2.jpg

    Жмем ОК и вводим ее аргументы:

    cond_sum3.jpg

    • Диапазон - это те ячейки, которые мы проверяем на выполнение Критерия. В нашем случае - это диапазон с фамилиями менеджеров продаж.
    • Критерий - это то, что мы ищем в предыдущем указанном диапазоне. Разрешается использовать символы * (звездочка) и ? (вопросительный знак) как маски или символы подстановки. Звездочка подменяет собой любое количество любых символов, вопросительный знак - один любой символ. Так, например, чтобы найти все продажи у менеджеров с фамилией из пяти букв, можно использовать критерий . . А чтобы найти все продажи менеджеров, у которых фамилия начинается на букву "П", а заканчивается на "В" - критерий П*В. Строчные и прописные буквы не различаются.
    • Диапазон_суммирования - это те ячейки, значения которых мы хотим сложить, т.е. нашем случае - стоимости заказов.

    Способ 2. Функция СУММЕСЛИМН, когда условий много

    Если условий больше одного (например, нужно найти сумму всех заказов Григорьева для "Копейки"), то функция СУММЕСЛИ (SUMIF) не поможет, т.к. не умеет проверять больше одного критерия. Поэтому начиная с версии Excel 2007 в набор функций была добавлена функция СУММЕСЛИМН (SUMIFS) - в ней количество условий проверки увеличено аж до 127! Функция находится в той же категории Математические и работает похожим образом, но имеет больше аргументов:

    cond_sum4.jpg

    При помощи полосы прокрутки в правой части окна можно задать и третью пару (Диапазон_условия3-Условие3), и четвертую, и т.д. - при необходимости.

    Если же у вас пока еще старая версия Excel 2003, но задачу с несколькими условиями решить нужно, то придется извращаться - см. следующие способы.

    Способ 3. Столбец-индикатор

    Добавим к нашей таблице еще один столбец, который будет служить своеобразным индикатором: если заказ был в "Копейку" и от Григорьева, то в ячейке этого столбца будет значение 1, иначе - 0. Формула, которую надо ввести в этот столбец очень простая:

    =(A2="Копейка")*(B2="Григорьев")

    Логические равенства в скобках дают значения ИСТИНА или ЛОЖЬ, что для Excel равносильно 1 и 0. Таким образом, поскольку мы перемножаем эти выражения, единица в конечном счете получится только если оба условия выполняются. Теперь стоимости продаж осталось умножить на значения получившегося столбца и просуммировать отобранное в зеленой ячейке:

    cond_sum5.jpg

    Способ 4. Волшебная формула массива

    Если вы раньше не сталкивались с такой замечательной возможностью Excel как формулы массива, то советую почитать предварительно про них много хорошего здесь. Ну, а в нашем случае задача решается одной формулой:

    =СУММ((A2:A26="Копейка")*(B2:B26="Григорьев")*D2:D26)

    cond_sum6.jpg

    После ввода этой формулы необходимо нажать не Enter , как обычно, а Ctrl + Shift + Enter - тогда Excel воспримет ее как формулу массива и сам добавит фигурные скобки. Вводить скобки с клавиатуры не надо. Легко сообразить, что этот способ (как и предыдущий) легко масштабируется на три, четыре и т.д. условий без каких-либо ограничений.

    Способ 4. Функция баз данных БДСУММ

    В категории Базы данных (Database) можно найти функцию БДСУММ (DSUM) , которая тоже способна решить нашу задачу. Нюанс состоит в том, что для работы этой функции необходимо создать на листе специальный диапазон критериев - ячейки, содержащие условия отбора - и указать затем этот диапазон функции как аргумент:

    Читайте также: