Проверка контекста фильтра

Завершено

С помощью функции 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 значения теперь отображаются только в том случае, если регион учитывается.