Проверка контекста фильтра
С помощью функции DAX VALUES
ваши формулы могут определять, какие значения находятся в контексте фильтра.
Синтаксис функции VALUES
выглядит следующим образом:
VALUES(<TableNameOrColumnName>)
Функции необходимо передать ссылку на таблицу или ссылку на столбец. При передаче ссылки на таблицу она возвращает объект таблицы с теми же столбцами, которые содержат строки для контекста фильтра. При передаче ссылки на столбец он возвращает таблицу с одним столбцом уникальных значений, которые находятся в контексте фильтра.
Функция всегда возвращает объект таблицы, а таблица может содержать несколько строк. Таким образом, чтобы проверить, находится ли конкретное значение в контексте фильтра, формула должна сначала проверить, что функция VALUES
возвращает одну строку. Для выполнения этой задачи могут помочь две функции DAX: HASONEVALUE
и SELECTEDVALUE
.
Функция HASONEVALUE
возвращает значение TRUE
, если указанная ссылка на столбец отфильтрована до одного значения.
Функция SELECTEDVALUE
упрощает задачу определения одного значения. Когда функции передается столбец, она возвращает одно значение или, если в контексте фильтра есть более одного значения, возвращается значение BLANK (или другое передаваемое функции значение).
В следующем примере будет использоваться функция HASONEVALUE
. Добавьте в таблицу Sales следующую меру, которая вычисляет комиссионные от продажи. Обратите внимание, что в Adventure Works ставка комиссии составляет 10 процентов от дохода для всех стран и регионов, кроме США. В США сотрудники получают 15 % комиссии. Отформатируйте эту меру как валюту с двумя десятичными знаками, а затем добавьте ее в таблицу, которая находится на стр. 3 отчета.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Обратите внимание, что итоговое значение Sales Commission равно BLANK. Причина заключается в том, что в контексте фильтра для столбца Country в таблице Sales Territory указано несколько значений. В этом случае функция HASONEVALUE
возвращает значение FALSE
, что приводит к тому, что мера Revenue умножается на BLANK (значение, умноженное на BLANK, равно BLANK). Чтобы получить итоговую сумму, необходимо использовать функцию-итератор, которая описывается далее в этом модуле.
Для проверки состояния фильтра можно использовать три другие функции, перечисленные ниже.
-
ISFILTERED
— возвращает значениеTRUE
, если переданная ссылка на столбец отфильтрована напрямую. -
ISCROSSFILTERED
— возвращает значениеTRUE
, если переданная ссылка на столбец отфильтрована косвенно. Столбец перекрестно фильтруется, если фильтр, применяемый к другому столбцу в той же таблице или в связанной таблице, влияет на ссылочный столбец путем его фильтрации. -
ISINSCOPE
— возвращает значениеTRUE
, если переданная ссылка на столбец является уровнем в иерархии уровней.
Вернитесь к стр. 2 отчета, а затем измените определение меры Revenue % Total Country, так чтобы столбец Region в таблице Sales Territory использовался. Если он не используется, результат меры должен быть равен BLANK.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
Обратите внимание, что в визуальном элементе таблицы Revenue % Total Country значения теперь отображаются только в том случае, если регион учитывается.