Подписывайтесь на Youtube канал:
Описание
В текстовой строке встречаются символы, слова и словосочетания, которые нужно заменить на другие, т. е. выполнить множественную замену подстроки.
Например, «Общество с ограниченной ответственностью» нужно заменить на «ООО», «Акционерное общество» на «АО» и т. д.

Решение
Для решения задачи предварительно нужно создать 2 вспомогательных таблицы.

Первая таблица содержит перечень всех замен. Вторая таблица содержит перечень аббревиатур. Вторая таблица нужна, чтобы привести аббревиатуры к нормальному виду после первой обработки.
После импорта источника и обеих вспомогательных таблиц нужно с помощью функции List.Generate создать цикл, который в каждом значении исходного столбца будет искать каждую подстроку для замены и выполнять замены, если она встретилась.
Примененные функции
Перечень всех примененных функций:
- Text.Proper
- List.Last
- List.Generate
- Text.Lower
- List.Count
- Text.Replace
- Table.Buffer
- Excel.CurrentWorkbook
- Table.SelectColumns
- Table.TransformColumns
Код
Код первой пользовательской функции преобразования:
(col)=>
let
source = Text.Proper(List.Last(List.Generate(()=> [index=0, txt=Text.Lower(col)],
each [index]<=List.Count(Замена_1[Найти]),
each [index=[index]+1,
txt=Text.Replace([txt],
Замена_1[Найти]{[index]},
Замена_1[Заменить]{[index]})],
each [txt])
))
in
source
Код второй пользовательской функции преобразования:
(col)=>
let
source = List.Last(List.Generate(()=> [index=0, txt=col],
each [index]<=List.Count(Замена_2[Найти]),
each [index=[index]+1,
txt=Text.Replace([txt],
Замена_2[Найти]{[index]},
Замена_2[Заменить]{[index]})],
each [txt])
)
in
source
Код запроса с решением:
let
source = Excel.CurrentWorkbook(){[Name="Гостиницы"]}[Content],
select_cols = Table.SelectColumns(source,
{"Компания"}),
transform_col_1 = Table.TransformColumns(select_cols,
{{"Компания",
ф_Замена_1,
type text}}),
transform_col_2 = Table.TransformColumns(transform_col_1,
{{"Компания",
ф_Замена_2,
type text}})
in
transform_col_2