Использование SELECTEDVALUE вместо VALUES

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

В более ранних версиях DAX это требование было безопасно достигнуто с помощью шаблона с участием трех функций DAX; IF, HASONEVALUE и VALUES. В следующем определении меры представлен пример. Он вычисляет сумму налога на продажу, но только для продаж, сделанных австралийским клиентам.

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

В примере функция HASONEVALUE возвращает ЗНАЧЕНИЕ TRUE, только если одно значение столбца Country-Region отображается в текущем контексте фильтра. Если значение true, функция VALUES сравнивается с литеральным текстом "Австралия". Когда функция VALUES возвращает ЗНАЧЕНИЕ TRUE, мера Продаж умножается на 0,10 (представляющая 10%). Если функция HASONEVALUE возвращает FALSE, так как несколько значений фильтрует столбец, первая функция IF возвращает ЗНАЧЕНИЕ BLANK.

Использование HASONEVALUE является оборонительным методом. Это необходимо, так как возможно, что несколько значений фильтруют столбец "Страна-регион ". В этом случае функция VALUES возвращает таблицу нескольких строк. Сравнение таблицы нескольких строк со скалярным значением приводит к ошибке.

Рекомендация

Рекомендуется использовать функцию SELECTEDVALUE . Он достигает того же результата, что и шаблон, описанный в этой статье, еще более эффективно и элегантно.

Используя функцию SELECTEDVALUE, теперь будет перезаписан пример определения меры.

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

Совет

Можно передать альтернативное значение результата в функцию SELECTEDVALUE. Альтернативное значение результата возвращается, если к столбцу не применяются фильтры или несколько фильтров.