Поделиться через


Используйте 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 только в том случае, если в текущем контексте фильтра отображается одно значение столбца "Страна-регион". При TRUEфункция VALUES сравнивается с литеральным текстом "Австралия". Когда функция возвращает , мера продаж умножается на 0,10 (представляющая 10%). Если функция HASONEVALUE возвращает FALSE( так как несколько значений фильтрует столбец), первая функция IF возвращает BLANK.

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

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

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

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

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

Совет

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