Страницы: 1
RSS
Power Query поиск значений в тексте из списка
 
Добрый день, уважаемые коллеги!


Помогите, пожалуйста, с решением следующей задачи:
В приложенном файле имеются 2 таблицы: "Смета" и "Не закупаемый материал". Необходимо в таблице "Смета" в столбце "Тип ресурса" проставить признак "Не закупаемый", если в тексте "Наименование ресурса" содержится любое значение из таблицы "Не закупаемый материал".

До сих пор я решал эту задачу путем добавления условий вручную через Условный столбец в PQ, но поскольку список все время пополняется, хотелось бы найти более автоматизированное решение. Собственно удалось найти на форуме похожую задачу тут, но причесать решение под мои нужды, к сожалению, не получилось.
 
Цитата
Danilap51 написал:
в тексте "Наименование ресурса" содержится любое значение из таблицы
Наверное, нужно другое
Код
= Table.AddColumn(Source, "Тип ресурса2", each if List.MatchesAny(Excel.CurrentWorkbook(){[Name="НЗМ"]}[Content][Не закупаемый материал], (s)=>Text.Contains([Наименование ресурса], s,Comparer.OrdinalIgnoreCase)) then "Не закупаемый" else null)
Изменено: Михаил Л - 09.04.2020 15:28:14
 
Правильнее с точки зрения быстродействия так всё же
Код
= Table.AddColumn(
    #"Changed Type", 
    "Пользовательский", 
    let 
        NZM = List.Buffer(НЗМ[Не закупаемый материал]) 
    in 
        each if List.MatchesAny(
                NZM, 
                (material)=>Text.Contains([Наименование ресурса], material, Comparer.OrdinalIgnoreCase)
                ) 
                then "Не закупаемый" 
                else null, 
    type text)
Изменено: Максим Зеленский - 09.04.2020 16:09:46
F1 творит чудеса
 
Михаил,

Большое Вам спасибо! То, что надо!

Максим,

Вам также большое спасибо!
Изменено: Danilap51 - 09.04.2020 16:55:24
 
Цитата
Максим Зеленский написал:
с точки зрения быстродействия
Спасибо. Возьму на заметку
 
Цитата
Максим Зеленский написал:
с точки зрения быстродействия
А для источника полученного из Excel.CurrentWorkbook() точно это справедливо? У меня сложилось такое стойкое ощущение, что данная функция и так берет таблички не читая их с диска, а сразу из оперативки. Т.е. по сути из Table.Buffer. Основано оно на том, что при внесении изменений в умную таблицу запрос видит эти изменения сразу, без сохранения файла на диск. Неоднократно закидывал такое в буфер, но особого прироста производительности не ощущал. Вы сталкивались с ситуациями обратного толка?
Вот горшок пустой, он предмет простой...
 
PooHkrd, думаю, зависит от размера обеих таблиц. Хотя не проверял, любопытная идея. Но тут, кмк, лучше перебдеть
F1 творит чудеса
 
Максим Зеленский, а можно по злоупотреблять вашим MVP статусом и выходом на разрабов?  ;) Можете, как освободится минутка-другая, задать им такой вопрос на Технет и кинуть сюда ссылку? Или там всем подряд гуру отвечают и имеет смысл влезть с вопросом самому?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
имеет смысл влезть с вопросом самому?
имеет. Плюс там кроме ребят из МС есть очень крутые спецы, которые могут подсказать
F1 творит чудеса
 
Цитата
PooHkrd написал:
имеет смысл влезть с вопросом самому
Общение происходит на английском языке?
 
Михаил Л, конечно.
Вот горшок пустой, он предмет простой...
 
PooHkrd, если общение состоится, ссылка для ознакомления будет же?
Гугл-переводчик переведет
 
Ссылка будет. Мне там еще зарегиться надо будет. Как сделаю скину сюда и в общую тему в курилке, а может и новую тему открою.
Вот горшок пустой, он предмет простой...
 
Получил от МС подтверждение своей гипотезы: функция Excel.CurrentWorkbook() забирает данные из оперативки. Хоть что-то тащит не с харда!  :D
Вот горшок пустой, он предмет простой...
 
PooHkrd,  :excl:
насчет второго вопроса правда Эрен что-то отморозился :)
F1 творит чудеса
 
Максим Зеленский, разбираются наверное. глюк то с лету фиг поймаешь, пока всякие пытливые типа Murderface_ не до копаются.  :D
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх