Страницы: 1
RSS
Привести ФИО к единому формату с помощью PQ
 
Добрый день!
Помогите, пожалуйста, с помощью PQ привести ФИО к формату Фамилия И.О., если указано как то иначе. Если ФИО указаны полностью, то оставить как есть.
Встречающиеся чаще всего варианты:
Цитата
степанов   сергей михайлович
Ермолов Р. О.
Кузнецов МС
Аширов С С
РогаКопыта   АО
Как делал до этого: вручную в столбце менял " ." и ". " на "."
Затем в фильтре ставил "* ??", т.е. слово и две буквы или "* ? ?", т.е. слово и две буквы через пробел и вставлял точки руками.
При условии, что это физ.лица. Юр.лица не трогать совсем, даже если тоже под эти маски попадают (РогаКопыта АО бы тоже попал под маску, но его оставить как есть).
На макрос, думаю, толку хватит, но т.к. я так и так это потом в PQ добавлять планирую, лучше им сразу одним действием и форматировать контрагентов.

Спасибо за помощь или советы.
Изменено: whateverlover - 29.06.2020 16:54:34
 
Доброе время суток
Цитата
whateverlover написал:
с помощью PQ привести ФИО к формату Фамилия И.О
Может я что-то упустил. Подскажите, пожалуйста, когда в Power Query появилась возможность распознавания фамилий?
Иначе, как отличить Кузнецов МС от РогаКопыта АО?
 
Андрей VG, там в примере есть столбец с признаком. Но у меня сейчас нет времени ковырять эту тему.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
есть столбец с признаком
Что ж, тогда остаётся принести свои извинения. Оплошал. Лето, жара, пора на дачу...
 
Код
// Таблица1
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Исходные данные", type text}, {"Тип контрагента", type text}, {"Что хотело бы получить", type text}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Тип контрагента] = "Физ.лицо")),
    #"Duplicated Column" = Table.DuplicateColumn(#"Filtered Rows", "Исходные данные", "Name"),
    #"Trimmed Text" = Table.TransformColumns(#"Duplicated Column",{{"Name", Text.Trim, type text}}),
    #"Cleaned Text" = Table.TransformColumns(#"Trimmed Text",{{"Исходные данные", Text.Clean, type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Cleaned Text", "Name", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Name.1", "Name.2"}),
    #"Added Custom" = Table.AddColumn(#"Split Column by Delimiter", "PowerSplit", each List.RemoveMatchingItems(Text.SplitAny([Name.2]," ."),{" ","",null})),
    #"Added Custom2" = Table.AddColumn(#"Added Custom", "Name.3", each let count = List.Count([PowerSplit]) in if count > 2 then [#"Name.2"] else List.Accumulate([PowerSplit], "",(s,c)=>let len = Text.Length(c), end = Text.End(c,1)
in s & 
(if count > 2 then c & " " else
    if len = 2
        then if end = "." 
            then c else Text.Combine(Text.ToList(c),".") & "."
        else if len = 1 then c & "." else c & " "
    ))),
    #"Merged Columns" = Table.CombineColumns(#"Added Custom2",{"Name.1", "Name.3"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Name"),
    #"Removed Columns" = Table.RemoveColumns(#"Merged Columns",{"Name.2", "PowerSplit"}),
    #"Trimmed Text1" = Table.TransformColumns(#"Removed Columns",{{"Name", Text.Trim, type text}})
in
    #"Trimmed Text1"

ну, там допилить надо про юр лиц
Изменено: Максим Зеленский - 29.06.2020 19:23:22
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
ну, там допилить
Привет, Максим.
А если будет Алиев ИГ оглы? Или Цзиньпин Си?
 
это все мелочи) обычно Оглы и всякие китайцы указываются в моем случае полностью, их т.е. преобразовывать нет необходимости

Максим, спасибо большое, завтра попробую на рабочем файле
 
Цитата
Андрей VG написал:
Цзиньпин Си
станет Цзиньпин С.и., а как иначе?  :D
F1 творит чудеса
Страницы: 1
Наверх