Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
- Синтаксис функции List.Contains
- Разбор работы функции List.Contains на практике без третьего параметра «equationCriteria»
- Разбор работы функции List.Contains на практике с учетом третьего параметра «equationCriteria»
Приветствую Вас, дорогие друзья, с Вами Будуев Антон. В этой статье мы поговорим про функцию 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, в этой статье все. Успехов Вам, друзья!
Пожалуйста, оцените статью:
Успехов Вам, друзья!
С уважением, Будуев Антон.
Проект «BI — это просто»
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D
Супер, очень доступно объяснили, спасибо!