Страницы: 1
RSS
Подстановка значений text.contains через справочник (Power query), text.contains, справочник,Power query
 
Добрый день!
Столкнулся со следующей проблемой:
Имею таблицу (в качестве примера), в  которой имеется адрес, но он не всегда корректен и нужно заменить его на необходимый мне, путем добавления нового столбца, с верным значением.
Т.к. перечень для изменений достаточно большой, хотел данный момент автоматизировать и создать справочник, в котором был бы столбец с текстом "который необходимо найти" и при его нахождении заменял бы на значение, согласно справочнику используя формулу в query text.contains., а при не нахождении ставил значения из столбца, в котором смотрятся эти значения.
ТК значения не стандартизированы и постоянно пишутся по разной логике "ООО Ромашка, Ромашка, Ромашка ООО", то мысль с объединением запросов провалилась :).
Пробуя самостоятельно и искав инфу на форумах, сделал всю процедуру через List.Accumulate, но в результате в столбце с исправленными данными, вместо результата, выдает "Function"
Помогите, пожалуйста, в чем моя ошибка в примере или подскажите, как можно решить данную задачу, иными, относительно понятными способами?
 
Purity, добрый день. "Function" - тоже результат. Вы написали код, который выдает значения с типом function. Понятно, что вы хотите получить что-то другое, но вот что конкретно - пока непонятно. Давайте разбираться.
В файле есть запрос "Данные"
код запроса
Он последовательно меняет текст Найти на Заменить. Если найден текст "Найти", то он будет заменен на "Заменить". Если не найден - ничего не происходит. Что вас не устраивает в этом запросе? Что-то, связанное вот с этим
Цитата
Purity написал:
а при не нахождении ставил значения из столбца, в котором смотрятся эти значения.
? Можете проиллюстрировать то, что вы бы хотели получить? Не в виде кода, а в виде результата преобразования какого-нибудь текста.
Пришелец-прораб.
 
Цитата
написал:
Purity , добрый день. "Function" - тоже результат. Вы написали код, который выдает значения с типом function. Понятно, что вы хотите получить что-то другое, но вот что конкретно - пока непонятно. Давайте разбираться. В файле есть запрос "Данные"
AlienSx Прикрепил обновленный файл, удалил запросы от которых пытался скорректировать, добавил на листы комментарии в каком виде хотел это увидеть. Посмотрите, пожалуйста.
Изменено: Purity - 23.09.2025 11:49:00
 
Цитата
Purity написал:
удалил запросы от которых пытался скорректировать
вернул удаленный запрос, который дает ровно то, что вы обозначили в Хочу получить в "Исправленный столбец".

что же все-таки не устраивает? Вам Text.Replace не нравится или что?
Изменено: AlienSx - 23.09.2025 12:02:48
Пришелец-прораб.
 
Цитата
написал:
Вам Text.Replace не нравится или что?
Да, я хотел эту формулу адаптировать через text.contains и не понимаю, как убрать в столбце функцию, что бы выводился необходимый результат
 
Purity, я, видимо, чего-то не понимаю, но Text.Replace делает все, что вы задумали. Зачем перед его использованием вызывать Text.Contains - загадка.
Скрытый текст
Пришелец-прораб.
 
Цитата
написал:
Purity , я, видимо, чего-то не понимаю, но Text.Replace делает все, что вы задумали. Зачем перед его использованием вызывать Text.Contains - загадка.
Text.Replace заменяет найденное значение на иное, но оставляет остальное содержимое в строке, для примера, я дописал везде "_Не нужно", эту часть Text.Replace не удаляет, а через Text.Contains я хочу что бы он сразу оставлял в новом столбце только верный вариант.
Возможно, я где то не совсем точно выражаюсь
 
Цитата
Purity написал:
Возможно, я где то не совсем точно выражаюсь
возможно. Извините, но я еще раз попрошу
Цитата
AlienSx написал:
Можете проиллюстрировать то, что вы бы хотели получить? Не в виде кода, а в виде результата преобразования какого-нибудь текста.
Пришелец-прораб.
 
Цитата
написал:
Можете проиллюстрировать то, что вы бы хотели получить? Не в виде кода, а в виде результата преобразования какого-нибудь текста.
Добавил лист "Пример"
 
Purity, другое дело
код
Пришелец-прораб.
 
Цитата
написал:
код
Большое спасибо!
Теперь буду думать, как эту формулу адаптировать на практике для решения задач, так сразу не очень понятна ее логика :)
 
Цитата
написал:
  (x) => Table.Skip(            replacements,             (w) => not Text.Contains(                x[Список компаний],                 w[Наименование для поиска]            )        ){0}?[Верный вариант наименования компании]? ?? x[Список компаний]
А можете, пожалуйста, подсказать логику функции? Не совсем понимаю, как переменные x и w выводят необходимый результат
Цитата
написал:
      ){0}?[Верный вариант наименования компании]? ?? x[Список компаний]
и последнюю строчку с вопросительными знаками
 
Purity, чтобы все это понять самому, очень рекомендую потратить время на изучение основ языка М. В этом помогут:
Ben Gribaudo. Power Query M Primer
платный курс лекций Power Query - язык M с buchlotnik
книга POWER QUERY И ЯЗЫК М. ПОДРОБНОЕ РУКОВОДСТВО
спецификация языка М от Microsoft
Отвечая на вопрос, Table.AddColumn в качестве 3-го параметра требует функцию с одним аргументом (я дал ему имя x), куда Table.AddColumn последовательно подает строки таблицы в виде записей (records). Рез-т работы окажется в новом столбце.
Про Table.Skip почитайте в спецификации или здесь. Она идет по справочнику и отсекает строки до тех пор, пока выполняется условие, заданное в функции (w) => ... Если строка найдена, то мы ее забираем как первую строку среди оставшихся строк ({0}). Если нет и остается пустая таблица , то на помощь приходят
Цитата
The item-access-expression also supports the form x{y}?, which returns null when position (or match) y does not exist in list or table x.
и null coalescing operator (??)
Пришелец-прораб.
 
Цитата
написал:
Purity , чтобы все это понять самому, очень рекомендую потратить время на изучение основ языка М. В этом помогут:
Добрый день!
Опробовал на практике для решения задач по работе, пока что все работает, как и хотел! Большое спасибо, очень упрощает работу
Страницы: 1
Читают тему
Наверх