Россия Нет

Как на языке M в Power Query искать нужное нам значение в исходном списке с возможностью настройки собственных правил поиска (сравнения). Функция List.Contains

 Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):


Приветствую Вас, дорогие друзья, с Вами Будуев Антон. В этой статье мы поговорим про функцию List.Contains, входящую в состав редактора запросов Power Query (языка M) для Excel (Эксель) и Power BI.

Данная функция указывает нам, содержит ли проверяемый Список нужное для нас значение. Проверка производится с возможностью задавать правила этой самой проверки. Иначе говоря, с помощью List.Contains мы можем в Списке осуществлять поиск нужного для нас значения с учетом наших правил поиска. В случае успешного поиска функция возвращает TRUE, если значение не было найдено, то FALSE.

 

Синтаксис функции List.Contains

Синтаксис:

List.Contains({Список}, ИскомоеЗначение, Функция(x, y))

Где:

  • {Список} — любой список, элементы которого путем последовательного перебора нужно проверить на соответствие ИскомомуЗначению;
  • ИскомоеЗначение — то значение, которое нам необходимо найти среди значений в Списке;
  • Функция(x, y) — необязательный параметр «equationCriteria». Пользовательская, либо другая функция из состава языка M (Power Query), которая задает порядок проверки элементов Списка на соответствие ИскомомуЗначению. Так называемый, параметр «equationCriteria». В пользовательскую функцию нужно передать два параметра «x» и «y», где List.Contains в «x» будет передавать последовательно каждый элемент Списка, а в «y» будет передано ИскомоеЗначение.

 

Разбор работы функции List.Contains на практике без третьего параметра «equationCriteria»

Давайте попробуем c помощью List.Contains найти значение «3» в списке из цифр от 1 до 10. Формула в Power Query будет простой:

= List.Contains({1..10}, 3)

Данная формула возвратит значение TRUE, так как действительно значение «3» имеется среди данного списка:

 

Теперь попробуем найти среди этого же списка значение «11»:

= List.Contains({1..10}, 11)

Естественно, результатом выполнения этой функции будет FALSE, так как такого значения в исходном Списке нет:

 

Хорошо, теперь давайте найдем значение «Хлеб» среди Списка продуктов:

= List.Contains({"Майонез", "Хлеб", "Помидоры"}, "Хлеб")

 

Результатом, естественно, будет TRUE:

 

А теперь давайте опять найдем значение «хлеб», но уже в малом регистре:

= List.Contains({"Майонез", "Хлеб", "Помидоры"}, "хлеб")

 

И вот тут уже возникает проблема. Вроде бы, искомое значение есть в исходном Списке, но функция List.Contains языка M в Power Query возвращает FALSE, то есть, она не нашла его:

 

А все дело в том, что язык M в Power Query чувствителен к регистру и чтобы все-таки найти значение в Списке, и не зависеть от проблемы регистра, мы как раз таки и можем воспользоваться третьим параметром в List.Contains «equationCriteria» и прописать собственное правило поиска искомого значения.

 

Разбор работы функции List.Contains на практике с учетом третьего параметра «equationCriteria»

Итак, как я уже писал выше (в синтаксисе List.Contains), в третьем параметре мы можем прописать свою пользовательскую или же какую-то другую функцию Power Query для задания правил поиска. В нашем рассматриваемом примере возникла проблема учета регистра букв при поиске.

Данную проблему мы легко можем решить при помощи своей пользовательской функции, где приведем все значения из исходного Списка, а также ИскомоеЗначение к малому регистру, и только после этого функция List.Contains будет сравнивать данное ИскомоеЗначение в малом регистре со Списком, в котором также весь текст будет приведет к малому регистру.

Код будет следующий:

= List.Contains({"Майонез", "Хлеб", "Помидоры"}, "хлеб", (x, y) => Text.Lower(x) = Text.Lower(y))

 

В этой формуле мы прописали свою пользовательскую функцию (x, y) => Text.Lower(x) = Text.Lower(y), в которую передали два параметра «x» и «y», где List.Contains в «x» будет передавать последовательно каждый элемент Списка, а в «y» будет передано ИскомоеЗначение.

Ну и сама наша функция сравнивает «x» и «y» между собой после того, как эти значения будут приведены к малому регистру при помощи функции языка M в Power Query — Text.Lower.

В текущей редакции нашей формулы результатом уже будет TRUE, то есть, List.Contains при помощи наших собственных правил сравнения, найдет значение «хлеб» в исходном списке, несмотря на то, что регистр искомого значения и значений в Списке различается:

 

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

На этом, с разбором функции List.Contains, входящую в состав редактора запросов Power Query (языка M) для Excel (Эксель) и Power BI, в этой статье все. Успехов Вам, друзья!

 

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

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

 

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

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

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

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

Автор статьи:
Категория: Редактор запросов Power Query (язык M)

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

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