Урок 20 · 9 мин чтения

Фильтрующие функции: FILTER, ALL, ALLSELECTED

Как внутри CALCULATE убирать, добавлять и тонко настраивать фильтры — для долей, рейтингов и сложных условий.

CALCULATE меняет контекст — а чем именно его менять, задают фильтрующие функции. Это рабочая лошадь долей, нарастающих итогов и сложных условий. Разберём четыре главные.

FILTER — сложное условие

Когда условие хитрее, чем «столбец = значение», его задаёт FILTER. Он возвращает таблицу, оставив строки, которые проходят проверку:

Выручка крупных продаж =
CALCULATE (
    [Выручка],
    FILTER ( Продажи, Продажи[Количество] >= 10 )
)

FILTER отобрал строки с количеством от 10, и CALCULATE посчитал выручку только по ним. Так задают любые условия со сравнением, диапазоном, несколькими столбцами.

FILTER — итератор

FILTER проходит таблицу построчно, поэтому на больших фактах он дороже простого фильтра-условия. Если хватает CALCULATE([Выручка], Товары[Категория]="Молочка") — берите его; FILTER — когда условие сложное.

ALL и REMOVEFILTERS — убрать фильтры

ALL снимает фильтры с таблицы или столбца. Главное применение — знаменатель доли: убрать текущий разрез, чтобы получить «итого».

Доля региона =
DIVIDE ( [Выручка], CALCULATE ( [Выручка], ALL ( Регионы ) ) )

В числителе — выручка текущего региона (из контекста строки). В знаменателе ALL(Регионы) убирает фильтр региона — получается выручка по всем регионам. Делим — доля. В строке ЦФО выйдет около 26%.

REMOVEFILTERS делает то же самое и читается понятнее — это современный синоним ALL в роли «убрать фильтры».

ALLSELECTED — уважать выбор пользователя

Тонкий, но очень полезный. ALL убирает все фильтры. Но часто нужно убрать только фильтр визуала (строку таблицы), а срез пользователя сохранить. Это ALLSELECTED:

Доля в выборке =
DIVIDE ( [Выручка], CALCULATE ( [Выручка], ALLSELECTED ( Регионы ) ) )

Если пользователь срезом оставил 4 округа, доли посчитаются в пределах этих четырёх и дадут в сумме 100%. С ALL знаменатель был бы по всем восьми, и доли «не сошлись» бы к 100% от видимого. Для процентов «внутри выбранного» берут ALLSELECTED.

ALL или ALLSELECTED

Нужен итог по всем данным независимо от среза → ALL / REMOVEFILTERS. Нужен итог по тому, что выбрал пользовательALLSELECTED. Перепутать легко — а доли разойдутся.

KEEPFILTERS — пересечь, а не заменить

По умолчанию фильтр в CALCULATE заменяет существующий по этому столбцу. KEEPFILTERS заставляет его пересекаться с текущим:

Выручка дорогих в выбранной категории =
CALCULATE ( [Выручка], KEEPFILTERS ( Товары[Цена] >= 500 ) )

Без KEEPFILTERS условие «цена ≥ 500» работало бы поверх выбранной категории, переопределяя её фильтр по цене; с ним — дополняет текущий контекст, не стирая его. Нужен реже остальных, но знать стоит.

Шпаргалка

ФункцияЗачем
FILTERсложное построчное условие внутри CALCULATE
ALL / REMOVEFILTERSубрать фильтры (знаменатель «итого»)
ALLSELECTEDубрать фильтр визуала, сохранить срез пользователя
KEEPFILTERSпересечь фильтр с текущим, а не заменить

Что дальше

Мы собрали ядро: агрегации, итераторы, CALCULATE и фильтры. Дальше — функции на каждый день: условия (IF, SWITCH), безопасное деление (DIVIDE), связи между таблицами (RELATED), работа со временем (YTD, прошлый год) и VAR/RETURN для читаемости. Это следующие уроки.

Нужна доля региона в общем итоге по всем регионам (независимо от среза). Что в знаменателе?
ALL(Регионы) убирает фильтр региона полностью — знаменатель считается по всем регионам. ALLSELECTED дал бы итог только по выбранным в срезе, а голая [Выручка] вернула бы саму себя (доля = 100%).
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43