Россия Нет

Как в Power BI (Power Pivot) отследить одно отфильтрованное значение? DAX функции HASONEVALUE и HASONEFILTER

Приветствую Вас, дорогие друзья, с Вами Будуев Антон. В этой небольшой статье мы поговорим о том, как в Power BI (Power Pivot) отследить тот момент, когда множественные значения столбца будут отфильтрованы до одного единственного значения под действием прямых или косвенных фильтров. А помогут нам в этом две DAX функции HASONEVALUE и HASONEFILTER.

Рассмотрим эти функции подробно.

Для Вашего удобства, рекомендую скачать «Справочник DAX функций для Power BI и Power Pivot» в PDF формате.

Если же в Ваших формулах имеются какие-то ошибки, проблемы, а результаты работы формул постоянно не те, что Вы ожидаете и Вам необходима помощь, то записывайтесь в бесплатный экспресс-курс «Быстрый старт в языке функций и формул DAX для Power BI и Power Pivot».

А также, подписывайтесь на наши социальные сети. Потому что именно в них, Вам будут доступны оперативно и каждый день наши актуальные фишки, секреты, наработки, примеры, кейсы, полезные советы, видео и статьи по темам сквозной BI аналитики (Power BI, DAX, Power Pivot, Excel…): Вконтакте, Инстаграм, Фейсбук, YouTube.

 

DAX функции HASONEVALUE и HASONEFILTER в Power BI и Power Pivot

HASONEVALUE () — проверяет столбец и если в результате всех перекрестных фильтров в нем осталось одно единственное значение (одна строка), то функция возвращает TRUE, во всех остальных случаях — FALSE.

HASONEFILTER () — проверяет столбец и если в результате прямого фильтра в нем осталось одно единственное значение (одна строка), то функция возвращает TRUE, во всех остальных случаях — FALSE.

Синтаксис:

HASONEVALUE ([Столбец])
HASONEFILTER ([Столбец])

Пример формул на основе DAX функций HASONEVALUE и HASONEFILTER.

В Power BI Desktop имеется исходная таблица «Продажи Менеджеров», содержащая столбцы [Отдел], [Менеджер], [Продажи]:

 

Давайте в отчетах Power BI создадим два среза по полям [Менеджер] и [Отдел]:

 

Теперь, напишем 2 формулы на основе функций HASONEVALUE и HASONEFILTER по столбцу [Менеджер], то есть, при помощи этих функций будем исследовать данное поле на количество оставшихся значений (строк) в условиях наложенных фильтров:

HASONEFILTER = HASONEFILTER ('ПродажиМенеджеров'[Менеджер])
HASONEVALUE = HASONEVALUE ('ПродажиМенеджеров'[Менеджер])

Посмотрим, какие значения возвратят эти функции языка DAX, когда фильтры на исходную таблицу не наложены, то есть, в столбце [Менеджер] находится более одного значения (больше одной строки):

 

Обе функции возвращают значение FALSE, так как на столбец [Менеджер] не наложено никаких фильтров, а значит, в нем более одного значения.

Давайте поставим прямой фильтр на это поле:

 

В результате, обе функции возвращают логическое значение TRUE, так как на столбец [Менеджер] наложен прямой фильтр, фильтрующий его до одного конкретного значения «Сидоров», а функция HASONEFILTER возвращает TRUE как раз тогда, когда наложен прямой фильтр и в столбце осталось одно конкретное значение.

HASONEVALUE, в свою очередь, также, возвращает TRUE, так как она учитывает любые перекрестные фильтры.

Теперь, расширим этот фильтр до 2 значений «Сидоров» и «Петров»:

 

Как мы можем наблюдать из отчета Power BI, в этой ситуации функции HASONEVALUE и HASONEFILTER вновь возвращают логическое значение FALSE, несмотря на то, что на столбец [Менеджер] до сих пор наложен прямой фильтр. Все дело в том, что этот фильтр уже оставляет не одно единственное значение, а больше (в данном случае два).

Теперь, снимем все прямые фильтры со столбца [Менеджер] и создадим срез по второму полю [Отдел]. Этим самым, столбец [Менеджер] также будет отфильтрован, но уже не прямым фильтром, а косвенным:

 

В данном примере, значение TRUE по столбцу [Менеджер] возвращает только HASONEVALUE, так как эта функция учитывает любые перекрестные фильтры. А в этом случае, на столбец [Менеджер], как раз таки, распространяется перекрестный фильтр от поля [Отдел] и в результате этого косвенного фильтра, в столбце [Менеджер] осталось одно значение «Петров».

А функция HASONEFILTER возвращает FALSE, даже несмотря на то, что в поле [Менеджер] всего одно значение, так как эта функция учитывает только прямые фильтры, которых на столбце сейчас нет.

Если же, мы расширим фильтр по отделам до двух значений, то косвенный фильтр, распространяющийся на столбец [Менеджер], также, будет расширен до 2 значений. И обе функции HASONEVALUE, HASONEFILTER будут вновь возвращать логическое значение FALSE, так как TRUE они возвращают именно в той ситуации, когда в результате прямых или косвенных фильтров остается одно конкретное значение (одна строка):

 

На этом, с разбором DAX функций HASONEVALUE и HASONEFILTER, проверяющих количество оставшихся значений в столбце с наложенными на него прямыми или косвенными фильтрами в Power BI или Power Pivot, все.

Также, Вы можете изучить в этой статье формулу расчета в DAX количества новых, постоянных и потерянных клиентов с участием функции HASONEVALUE

Пожалуйста, оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(4 голоса, в среднем: 4.8 из 5 баллов)

 

[Экспресс-видеокурс] Быстрый старт в языке DAX

 
 
Антон БудуевУспехов Вам, друзья!
С уважением, Будуев Антон.
Проект «BI — это просто»
 
 
 
 

Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
 
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.

 
Понравился материал статьи?
Избранные закладкиДобавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D

Автор статьи:
Категория: Язык функций и формул DAX для Power BI и Excel (Power Pivot)

Добавить комментарий

* Заполняя форму отправки комментария своими персональными данными (имя, email, сайт и др.), Вы автоматически подтверждаете свое согласие на обработку своих персональных данных


  1. Василий:

    Здравствуйте!

    Данный формулы можно применить к общему итогу сводной?
    Это бывает полезным, когда в общем итоге по столбцу необходимо суммировать средние в промежуточных итогах?
    Если эти формулы этого не могут, то какие смогут?

    1. Антон Будуев:

      Здравствуйте, Василий.

      Да, конечно, можно. В общем итоге сводной таблицы по сведенному столбцу будут множественные значения, соответственно, функция HASONEVALUE возвратит по указанному столбцу значение FALSE.

      Поэтому, если за этот результат зацепиться, то можно написать такую формулу:

      IF(
      HASONVALUE([Столбец сведения];
      -- код для строк сводной таблицы;
      -- код для итога сводной таблицы
      )
      

      Тогда, для строк сводной таблицы HASONVALUE будет возвращать TRUE, а значит IF будет выполнять 2-параметр (код для строк сводной таблицы), а для итога сводной таблицы HASONVALUE будет возвращать FALSE, а значит IF будет выполнять 3-параметр (код для итога сводной таблицы)