Страницы: 1
RSS
PQ:Поиск значения из справочника в списке таблицы
 
Приветствую!
Дан список с буквено-цифровой кашей (в примере указал короткий вариант, в оригинале до 150 символов) из которого я пытаюсь "выудить" значения, которые указаны в отдельной таблице(справочник).
пытался реализовать через Text.Contains, но сослаться на справочник в 2 и 3 параметрах функции не получается.

Осложняется задача еще тем, что есть относительно схожие значения например: "м/кг" и "м/кг в/в"
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр,
из тупого вот так)
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Столбец1", type text}}),
    #"Объединенные запросы" = Table.FuzzyNestedJoin(#"Измененный тип", {"Столбец1"}, Таблица4, {"Ед.изм."}, "Таблица4", JoinKind.LeftOuter, [IgnoreCase=true, IgnoreSpace=true, Threshold=0]),
    #"Развернутый элемент Таблица4" = Table.ExpandTableColumn(#"Объединенные запросы", "Таблица4", {"Ед.изм."}, {"Таблица4.Ед.изм."}),
    #"Удаленные дубликаты" = Table.Distinct(#"Развернутый элемент Таблица4", {"Столбец1"})
in
    #"Удаленные дубликаты"
Изменено: evgeniygeo - 01.09.2021 13:53:08
 
может так?
 
evgeniygeo, Table.FuzzyNestedJoin отличная функция, плохо что ее нет в 2016 офисе:) по сути заменяет 10 шагов из примера mechanix 85
Если есть еще варианты, готов рассматривать
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Код
let
    src = Table.AddColumn( Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content], 
    "Длина", each Text.Length([#"Ед.изм."])),
    src2 = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    Join = Table.Join( src2,{},src,{}),
    Group = Table.Group(Join, {"Столбец1"}, {{"Ед.изм.", each   let a = 
    Table.SelectRows(_, each Text.Contains([Столбец1],[#"Ед.изм."])), b = List.Max(a[Длина]), c=
    Table.SelectRows(a, each  (b =Text.Length([#"Ед.изм."]))) in try c[#"Ед.изм."]{0} otherwise null}})
in
    Group
 
Михаил Л,то, что нужно! Все в 1 шаге!
Всех благодарю за помощь!
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, есть еще вариант. И побыстрее и дубли сохранятся
Код
let
    f = (x) => Excel.CurrentWorkbook(){[Name=x]}[Content], 
    g = (x,y) => y{List.PositionOf(y,x,0,(c,v)=>Text.Contains(v,c))},
    add = Table.AddColumn(f("Таблица4"), "lng", each Text.Length([#"Ед.изм."])),
    lst = List.Buffer(Table.Sort(add,{{"lng",1}})[#"Ед.изм."]),
    to = Table.AddColumn(f("Таблица2"),"cat",each g([Столбец1],lst))
in
    to
Изменено: Михаил Л - 02.09.2021 10:57:18
 
Михаил Л,я с предыдущим вариантом с трудом разобрался, а тут...мне еще далеко до таких решений :)
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Александр написал:
мне еще далеко до таких решений
Я уж промолчу)
Цитата
Александр написал:
с предыдущим вариантом с трудом разобрался
В Group три шага.
a = извлекаем строки, которые в колонке Столбец содержат значение из колонки Ед.изм. Могут быть 0-6 строки.
b = получаем  максимальную длину значений колонки Длина
c = опять извлекаем строки, где длина строки колонки Ед.изм. равна значению b
и все, боремся с ошибкой, которая появится если в шаге a строк 0
Изменено: Михаил Л - 02.09.2021 11:41:02
Страницы: 1
Наверх