REMOVEFILTERS

REMOVEFILTERS

Используется для удаления фильтров с указанных таблиц в контексте вычислений. Это позволяет анализировать данные без влияния определенных фильтров. Применяется только для очистки фильтров. Не возвращает таблицы.

Данная функция может использоваться в различных бизнес-кейсах. Например, при создании сравнительных отчетов, когда нужно сравнить продажи текущего месяца с продажами за весь год. В этом случае REMOVEFILTERS может помочь убрать фильтрацию по конкретным периодам, чтобы получить данные за весь год.

Синтаксис

REMOVEFILTERS ( [<TableNameOrColumnName>] [, <ColumnName> [, <ColumnName> [,... ] ] ] )

Параметр

Атрибуты

Описание

Параметр

Атрибуты

Описание

TableNameOrColumnName

 

Обязательный

Название таблицы или колонки, с которой нужно удалить фильтры.

ColumnName

Необязательный, повторяемый

Название колонки, с которой нужно удалить фильтры.

Примечание

  • REMOVEFILTERS может использоваться только как модификатор CALCULATE.

  • При создании мер функция REMOVEFILTERS может быть использована для полного переопределения контекста фильтрации. В отличие от ALL, она гарантированно снимает фильтры со всех связанных таблиц, обеспечивая корректные результаты расчетов в реляционных моделях. Более подробную информацию см. в разделе Переопределение контекста фильтрации функцией ALL.

  • Обязательно указывать таблицу.

  • В рамках CALCULATE поддерживаются несколько REMOVEFILTERS.

  • Можно комбинировать с FILTER в рамках одного CALCULATE.

Ограничения и особенности использования функции REMOVEFILTERS

При работе с функцией REMOVEFILTERS следует учитывать ряд ограничений и особенностей её применения:

  • При использовании REMOVEFILTERS для нескольких столбцов одновременно, необходимо учитывать, что если произойдет снижение гранулярности, то результаты в отчёте Visiology могут не совпадать с результатами, полученными в Power BI для аналогичной модели и данных.

  • В Visiology REMOVEFILTERS, применённый к столбцу, не отменяет действие виджета «Фильтр» по этой же таблице. В Power BI такое снятие фильтрации происходит. Это обусловлено разной технической реализацией. Visiology для построения фильтрации из интерфейса использует функцию FILTER внутри DAX-запроса виджета, в то время как Power BI применяет функцию TREATAS. Эти функции по-разному взаимодействуют с модификатором REMOVEFILTERS.

Рекомендации
Для обеспечения предсказуемых и согласованных результатов:

  • При использовании REMOVEFILTERS для снятия фильтров с нескольких столбцов нужно проверять снижение гранулярности для совпадения результатов с Power BI, т.к. при снижении гранулярности результаты не совпадают.

  • Учитывайте, что UI-фильтры в Visiology имеют приоритет и не сбрасываются с помощью REMOVEFILTERS. Для корректного снятия фильтрации рекомендуется настраивать UI-фильтры не напрямую по таблице, а по связанным с ней таблицам-измерениям.

Пример 1

Формула ниже вычисляет отношение продаж для текущего контекста к общим продажам без фильтрации по клиентам. Функция REMOVEFILTERS используется для того, чтобы удалить фильтрацию по таблице dimcustomer, обеспечивая расчет общего объема продаж:

DIVIDE( SUM(factonlinesales[salesamount]), // Продажи в текущем контексте (например, для выбранного клиента) CALCULATE( SUM(factonlinesales[salesamount]), // Общие продажи без фильтрации по клиентам REMOVEFILTERS(dimcustomer) // Явный сброс фильтров по таблице dimcustomer ) )

Данная формула выполняет следующие действия:

  1. Числитель (SUM) – считает сумму salesamount с учетом всех активных фильтров (например, если в отчете выбран конкретный клиент, возвращаются только его продажи).

  2. Знаменатель (CALCULATE + REMOVEFILTERS):

    • CALCULATE переопределяет контекст фильтрации.

    • REMOVEFILTERS(dimcustomer) удаляет все фильтры, примененные к таблице dimcustomer, чтобы получить общие продажи по всем клиентам.

  3. DIVIDE – возвращает долю продаж, приходящуюся на текущий контекст (например, определенного клиента), относительно всех продаж, не учитывая фильтрацию по клиентам.

В данном примере функция REMOVEFILTERS явно указывает, что в знаменателе нужно игнорировать фильтрацию по клиентам, даже если она есть в контексте отчета (например, из-за среза или выделенной строки в таблице).

Пример 2

Формула ниже вычисляет долю продаж в текущем контексте по отношению к общим продажам без фильтрации по классу и цвету продукта. Функция REMOVEFILTERS используется для явного удаления фильтров с атрибутов 'dimproduct'[classname] и 'dimproduct'[colorname].

DIVIDE( SUM ( factonlinesales[salesamount] ), // Продажи в текущем контексте CALCULATE( SUM ( factonlinesales[salesamount] ), // Общие продажи без фильтрации по классу и цвету REMOVEFILTERS ( 'dimproduct'[classname], 'dimproduct'[colorname] ) ) )

Данная формула выполняет следующие действия:

  1. Числитель (SUM) – считает сумму salesamount с учетом всех активных фильтров текущего контекста.
    Например, если отчет отфильтрован по определенному классу или цвету продукта, будут учтены только продажи, соответствующие этим фильтрам.

  2. Знаменатель (CALCULATE + REMOVEFILTERS):

    • CALCULATE – изменяет контекст фильтрации.

    • REMOVEFILTERS('dimproduct'[classname], 'dimproduct'[colorname]) – удаляет фильтры, примененные только к классу и цвету продукта, при этом все остальные фильтры (дата, клиент, регион и т.д.) сохраняются.
      В результате вычисляется общий объем продаж по всем классам и цветам продуктов в рамках остального контекста отчета.

  3. DIVIDE – возвращает отношение продаж в текущем контексте (например, конкретного класса и цвета продукта) к общим продажам без учета фильтрации по этим атрибутам продукта.

Пример 3

Рассмотрим бизнес-кейс, в котором аналитическая команда хочет оценить, как каждая продуктовая позиция вносит вклад в общий объем продаж, как в рамках каждого бренда, так и в общем контексте всех продуктов. Для этого мы воспользуемся двумя мерами: «Доля каждого продукта внутри бренда» и «Доля по продукту от общего».

Формула 1: Доля каждого продукта внутри бренда

Доля каждого продукта внутри бренда = DIVIDE( SUM(factonlinesales[salesamount]), CALCULATE( SUM(factonlinesales[salesamount]), REMOVEFILTERS(dimproduct[productname]) ) )

Данная формула производит следующие вычисления:

  • SUM(factonlinesales[salesamount]) – вычисляет сумму продаж для текущего продукта в контексте фильтров.

  • REMOVEFILTERS(dimproduct[productname]) – убирает фильтр с конкретного столбца productname в таблице dimproduct. Это позволяет суммировать продажи по всем продуктам внутри одного бренда, не зависимо от конкретного продукта.

  • DIVIDE(...) – делит сумму продаж конкретного продукта на общую сумму продаж всех продуктов внутри бренда. Это дает процентное выражение вклада каждого продукта в общий объем продаж бренда.

Формула 2: Доля по продукту от общего

Доля по продукту от общего = DIVIDE( SUM(factonlinesales[salesamount]), CALCULATE( SUM(factonlinesales[salesamount]), REMOVEFILTERS(dimproduct) ) )

Данная формула производит следующие вычисления:

  • SUM(factonlinesales[salesamount]) – аналогично первой формуле, вычисляет общую сумму продаж для конкретного продукта в текущем контексте.

  • REMOVEFILTERS(dimproduct) – на этот раз функция REMOVEFILTERS применяется ко всей таблице dimproduct, убирая фильтры со всех столбцов. Это позволяет получить общую сумму продаж по всем продуктам, не завися от любого фильтра, наложенного на таблицу продуктов.

  • DIVIDE(...) – делит сумму продаж конкретного продукта на общую сумму продаж всех продуктов. Это дает процентное выражение вклада каждого продукта в общий объем продаж всей компании.

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


Смотрите также

Моделирование данных с помощью DAX
Поддерживаемые функции DAX
Математические операторы

Нужна дополнительная помощь?

Свяжитесь с технической поддержкой.