REMOVEFILTERS
Используется для удаления фильтров с указанных таблиц в контексте вычислений. Это позволяет анализировать данные без влияния определенных фильтров. Применяется только для очистки фильтров. Не возвращает таблицы.
Данная функция может использоваться в различных бизнес-кейсах. Например, при создании сравнительных отчетов, когда нужно сравнить продажи текущего месяца с продажами за весь год. В этом случае REMOVEFILTERS может помочь убрать фильтрацию по конкретным периодам, чтобы получить данные за весь год.
Синтаксис
REMOVEFILTERS ( [<TableNameOrColumnName>] [, <ColumnName> [, <ColumnName> [,... ] ] ] )
Параметр | Атрибуты | Описание |
|---|---|---|
TableNameOrColumnName
| Обязательный | Название таблицы или колонки, с которой нужно удалить фильтры. |
ColumnName | Необязательный, повторяемый | Название колонки, с которой нужно удалить фильтры. |
Примечание
REMOVEFILTERSможет использоваться только как модификатор CALCULATE.При создании мер функция REMOVEFILTERS может быть использована для полного переопределения контекста фильтрации. В отличие от ALL, она гарантированно снимает фильтры со всех связанных таблиц, обеспечивая корректные результаты расчетов в реляционных моделях. Более подробную информацию см. в разделе Переопределение контекста фильтрации функцией ALL.
Ограничения и особенности использования функции 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
)
)Данная формула выполняет следующие действия:
Числитель (
SUM) – считает суммуsalesamountс учетом всех активных фильтров (например, если в отчете выбран конкретный клиент, возвращаются только его продажи).Знаменатель (
CALCULATE + REMOVEFILTERS):CALCULATEпереопределяет контекст фильтрации.REMOVEFILTERS(dimcustomer)удаляет все фильтры, примененные к таблицеdimcustomer, чтобы получить общие продажи по всем клиентам.
DIVIDE– возвращает долю продаж, приходящуюся на текущий контекст (например, определенного клиента), относительно всех продаж, не учитывая фильтрацию по клиентам.
В данном примере функция REMOVEFILTERS явно указывает, что в знаменателе нужно игнорировать фильтрацию по клиентам, даже если она есть в контексте отчета (например, из-за среза или выделенной строки в таблице).
Пример 2
Формула ниже вычисляет долю продаж в текущем контексте по отношению к общим продажам без фильтрации по классу и цвету продукта. Функция REMOVEFILTERS используется для явного удаления фильтров с атрибутов 'dimproduct'[classname] и 'dimproduct'[colorname].
DIVIDE(
SUM ( factonlinesales[salesamount] ), // Продажи в текущем контексте
CALCULATE(
SUM ( factonlinesales[salesamount] ), // Общие продажи без фильтрации по классу и цвету
REMOVEFILTERS (
'dimproduct'[classname],
'dimproduct'[colorname]
)
)
)Данная формула выполняет следующие действия:
Числитель (
SUM) – считает суммуsalesamountс учетом всех активных фильтров текущего контекста.
Например, если отчет отфильтрован по определенному классу или цвету продукта, будут учтены только продажи, соответствующие этим фильтрам.Знаменатель (
CALCULATE + REMOVEFILTERS):CALCULATE– изменяет контекст фильтрации.REMOVEFILTERS('dimproduct'[classname], 'dimproduct'[colorname])– удаляет фильтры, примененные только к классу и цвету продукта, при этом все остальные фильтры (дата, клиент, регион и т.д.) сохраняются.
В результате вычисляется общий объем продаж по всем классам и цветам продуктов в рамках остального контекста отчета.
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
Математические операторы
Нужна дополнительная помощь?