Использование функций модификатора фильтра
При использовании функции CALCULATE
можно передать функции изменения фильтра, которые позволяют не только добавлять фильтры, но и выполнять другие действия.
Удаление фильтров
Используйте функцию DAX REMOVEFILTERS
в качестве выражения фильтра CALCULATE
для удаления фильтров из контекста фильтра. Она может удалять фильтры из одного или нескольких столбцов или изо всех столбцов одной таблицы.
Примечание
Функция REMOVEFILTERS
является относительно новой. В предыдущих версиях DAX фильтры удалялись с помощью функции DAX ALL
или ее вариантов, в том числе функций DAX ALLEXCEPT
и ALLNOBLANKROW
. Эти функции ведут себя как модификаторы фильтров, так и как функции, возвращающие табличные объекты с разными значениями. Эти функции упомянуты, так как вы, скорее всего, будете искать документацию и примеры формул, которые удаляют фильтры с их помощью.
В следующем примере в таблицу Sales добавляется новая мера, которая оценивает меру Revenue, но делает это путем удаления фильтров из таблицы Sales Territory. Отформатируйте меру как валюту с двумя десятичными разрядами.
Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))
Теперь добавьте меру Revenue Total Region к визуальному элементу таблицы, который находится на стр. 2 отчета. Визуальный элемент таблицы будет группироваться по трем столбцам из таблицы Sales Territory для таких строк: Group, Country и Region.
Обратите внимание, что все значения Revenue Total Region одинаковые. Это значение общего дохода.
Хотя этот результат сам по себе бесполезен, если он используется в качестве знаменателя в отношении, он позволяет вычислить процент от общего итога. Таким образом, теперь определение меры Revenue Total Region перезаписывается следующим определением. (Это новое определение изменяет имя меры и объявляет две переменные. Обязательно отформатируйте меру в процентах с двумя десятичными знаками.)
Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory')
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalRegionRevenue
)
Убедитесь, что в визуальном элементе таблицы теперь отображаются значения Revenue % Total Region.
Теперь следует создать еще одну меру, но на этот раз будет вычисляться отношение дохода для региона к доходу для страны.
Перед выполнением этой задачи обратите внимание, что Revenue % Total Region для региона Southwest составляет 22,95 %. Проверьте контекст фильтра для этой ячейки. Переключитесь в представление данных, а затем в области Поля выберите таблицу Sales Territory.
Примените следующие фильтры столбцов:
- Group — North America
- Country — United States
- Region — Southwest
Обратите внимание, что фильтры сокращают таблицу до одной строки. Теперь, когда пора подумать о новой цели, чтобы создать отношение доходов по регионам к доходу страны, снимите фильтр со столбца Region.
Обратите внимание, что теперь существует пять строк, каждая из которых принадлежит United States (США). Соответственно, при очистке фильтров столбцов Region, сохраняя фильтры в столбцах Country и Group, у вас будет новый контекст фильтра для страны региона.
В следующем определении меры обратите внимание на то, как можно очистить или удалить фильтр из столбца. В логике DAX это небольшое и незаметное изменение, которое вносится в формулу меры Revenue % Total Region: функция REMOVEFILTERS
теперь удаляет фильтры из столбца Region вместо всех столбцов таблицы Sales Territory.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
Добавьте меру Revenue % Total Country в таблицу Sales и затем отформатируйте ее как процент с двумя десятичными разрядами. Добавьте новую меру в визуальный элемент таблицы.
Обратите внимание, что все значения, за исключением значений для регионов United States, составляют 100 процентов. Причина заключается в том, что в компании Adventure Works в США есть регионы, а во всех остальных странах — нет.
Примечание
Табличные модели не поддерживают неоднородные иерархии, которые являются иерархиями с переменной глубиной. Таким образом, это распространенный подход к повторению значений родителя (или другого предка) на более низких уровнях иерархии. Например, в Австралии нет региона, поэтому значение страны или региона повторяется в качестве имени региона. Всегда полезнее хранить содержательное значение вместо значения BLANK.
Следующий пример — это последняя мера в этом руководстве. Добавьте меру Revenue % Total Group, а затем отформатируйте ее как процент с двумя десятичными разрядами. Затем добавьте новую меру в визуальный элемент таблицы.
Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS(
'Sales Territory'[Region],
'Sales Territory'[Country]
)
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalGroupRevenue
)
При удалении фильтров из столбцов Region и Country в таблице Sales Territory мера вычислит доход по региону как долю дохода своей группы.
Сохранение фильтров
Для сохранения фильтров можно использовать функцию DAX KEEPFILTERS
в качестве выражения фильтра в функции CALCULATE
.
Чтобы узнать, как выполнить эту задачу, перейдите на стр. 1 отчета. Затем измените определение меры Revenue Red, чтобы использовать функцию KEEPFILTERS
.
Revenue Red =
CALCULATE(
[Revenue],
KEEPFILTERS('Product'[Color] = "Red")
)
Обратите внимание, что в визуальном элементе таблицы существует только одно значение Revenue Red. Причина заключается в том, что выражение логического фильтра сохраняет существующие фильтры в столбце Color таблицы Product. Причина, по которой цвета, отличные от красного, имеют значение BLANK, в том, что контексты фильтров и выражения фильтров для этих двух фильтров объединяются. Черный цвет и красный цвет пересекаются, и поскольку оба они не могут иметь значение TRUE
одновременно, выражение фильтруется без строк продукта. Оба фильтра для красного цвета могут содержать значение TRUE
одновременно, что объясняет, почему отображается значение Revenue Red.
Использование неактивных связей
Неактивная связь модели может распространять только те фильтры, которые функция DAX USERELATIONSHIP
передает в качестве критерия фильтра в функцию CALCULATE
. При использовании этой функции для привлечения неактивной связи активная связь автоматически становится неактивной.
Ознакомьтесь с примером определения меры, которое использует неактивную связь для вычисления меры Revenue по датам поставки:
Revenue Shipped =
CALCULATE (
[Revenue],
USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)
Изменение поведения связи
Можно изменить поведение связи модели при вычислении выражения, передав функцию DAX CROSSFILTER
в качестве критерия фильтра в функцию CALCULATE
. Это дополнительная возможность.
Функция CROSSFILTER
может изменять направления фильтра (от двух до одного и наоборот) и даже отключать связь.