usto-excel

блог об Excel и не только

Html

ALL() - функция не подвластная фильтрам

1 комментарий :

Суть

Функция ALL возвращает все значения указанного столбца, игнорируя все наложенные на него фильтры.

Применение

Создадим сводную таблицу, поместив столбец НомерМесяца в поле "Строки" и меру [ЧистыеПродажи] в поле "Значения" (ссылка на файл). Создадим два среза для столбцов КодПродукта и Год.


Как видите, пользователь может выбирать один или несколько продуктов и смотреть сумму чистых продаж данных продуктов за каждый месяц выбранного года. Но что если нужно также узнать какой процент от общих чистых продаж в каждом месяце составляют продажи выбранных продуктов?
Для этого нам сначала нужно посчитать сумму чистых продаж всех продуктов за каждый месяц. А так как сводная показывает нам сумму чистых продаж только указанных в срезе продуктов, нам нужно создать меру, которая бы проигнорировала все наложенные срезом фильтры на столбец КодПродукта:
[ЧистыеПродажи-ВсеПродукты]=CALCULATE([ЧистыеПродажи],ALL(t_sales[КодПродукта]))

И ещё одну меру, для расчёта процентного соотношения чистых продаж выбранных продуктов к чистым продажам всех продуктов:
[ПроцВыбранныхПродуктов]=[ЧистыеПродажи]/[ЧистыеПродажи-ВсеПродукты]


Вариации

Функция ALL() может использовать в качестве аргумента более одного столбца. Кроме того, данная функция может принимать в качестве аргумента целую таблицу:

  • ALL(<Столбец1>,<Столбец2>,....) - можно указывать несколько столбцов в качестве аргументов функции. Например: ALL(t_sales[КодПродукта], t_sales[Год]);
  • ALL(<ИмяТаблицы>) - функция ALL() применяется к каждому столбцу указанной таблицы. Например: ALL(t_sales).

ALLEXCEPT()


  • Допустим, в таблице имеется 12 столбцов и нужно применить функцию ALL() ко всем столбцам, кроме одного или двух;
  • В этом случае можно использовать ALLEXCEPT(<Таблица>,<СтолбецИсключения1>,<СтолбецИсключения2>,...);
  • Например: ALLEXCEPT(t_sales, t_sales[КодПродукта]) проигнорирует фильтры, применённые ко всем столбцам, кроме столбца КодПродукта.

ALLSELECTED()

Чтобы объяснить как работает данная функция, для начала уберём все срезы из первого примера, и добавим срез для столбца НомерМесяца а в поле "Значения" оставим лишь [ЧистыеПродажи]. То есть НомерМесяца будет одновременно находиться и в поле "Строки" и в срезе.



Создадим новую меру:
[ЧистыеПродажи-ВсеМесяцы]=
CALCULATE([ЧистыеПродажи],ALL('t_sales'[НомерМесяца]))


Удалив все фильтры на срезе мы увидим, что ничего не изменилось.


Но нам нужно создать меру, которая бы возвращала общую сумму чистых продаж только тех месяцев, которые выбраны на срезе.
Чтобы добиться этого, отредактируем нашу предыдущую меру, заменив функцию ALL() на функцию ALLSELECTED():
[ЧистыеПродажи-ВсеМесяцы]=
CALCULATE([ЧистыеПродажи],ALLSELECTED('t_sales'[НомерМесяца]))
И меру для вычисления процентного соотношения:
[ПроцЧистПродаж-ВсеВыбранныеМесяцы]=
[ЧистыеПродажи]/[ЧистыеПродажи-ВсеМесяцы]

Теперь, выберем несколько месяцев на срезе.


Как видите, сумма [ЧистыеПродажи-ВсеМесяцы] стала ровна $11 876 254 а общий итог процентов равен 100%, то есть сводная таблица показывает общую сумму чистых продаж только тех месяцев, которые были выбраны на срезе, что нам собственно и требовалось.