Автоматическое разделение слитно написанных слов в Power Query

Сталкивались ли вы с ситуацией, когда нужно обработать данные, где слова написаны без пробелов? Например, такие строки как «ЗакупкаУПоставщика» выглядят нечитаемыми и неудобными для дальнейшей работы. В этой статье мы рассмотрим простой способ решения данной проблемы при помощи инструмента Power Query от Microsoft Excel или Power BI.

Что мы будем делать?
В Power Query нет специальной функции для разделения текста в ячейке по заглавным буквам и чтобы превратить все заглавные, кроме первой, в строчные. Поэтому напишем свою функцию состоящую из трех этапов.
Маленький аналитик Бизнес-консультант
Маленький аналитик Бизнес-консультант
  • Добавим пробелы между словами, начинающимися с заглавной буквы.
  • Переведем все буквы, кроме первой, в нижний регистр (строчные).
  • Сделаем исключение для аббревиатур.
Этапы решения задачи Алгоритм немного оптимизирован, в сравнении с вариантом в видео
  1. Создаем переменную "Данные", в которую один раз сохраняем данные для преобразования.
  2. Сохраняем первую букву в переменой "ПерваяБуква" с помощью функции Text.Start.
  3. Сохраняем все остальные букву в переменой "ОстальныеБуквы" с помощью функции Text.Middle.
  4. В переменной "Пробелы" добавляем пробелы перед заглавными буквами, для этого:
    • Преобразуем "ОстальныеБуквы" в список отдельных символов с помощью функции Text.ToList.
    • Если символ является заглавной буквой, перед ним добавляется пробел. Для этого используем функцию List.Transform, которая последовательно применяет заданную операцию (добавление пробела перед заглавными буквами) к каждому элементу списка символов, для этого нам помогут следующие функции:
      • Для проверки каждого символа на принадлежность списку заглавных букв используем функцию Text.Upper.
      • А в случае, если буква заглавная, чтобы сцепить ее с остальным текстом, который переведем в нижний регистр, используем функцию Text.Lower.
  5. Сцепляем все полученные символы в строку с помощью функции Text.Combine.
  6. Сцепляем первую букву и все остальное буквы.
  7. Замещаем последовательность "е а э с" на "ЕАЭС" с помощью функции Text.Replace

Вариант без комментариев:

=let
Данные = [Операция],

ПерваяБуква = Text.Start(Данные, 1),

ОстальныеБуквы = Text.Middle(Данные, 1),

Пробелы = Text.Combine( List.Transform(
Text.ToList(ОстальныеБуквы),
each if _ = Text.Upper(_) then " " & Text.Lower(_) else _ ) ),

Сборка = ПерваяБуква & Пробелы,

ТекстФинал = Text.Replace(Сборка, "е а э с", "ЕАЭС")
in
ТекстФинал

Ниже формула с комментариями:

=let
Данные = [Операция],

// Сохраняем первую букву в переменой:
ПерваяБуква = Text.Start(Данные, 1),

// Сохраняем все остальные букву в переменой:
ОстальныеБуквы = Text.Middle(Данные, 1),

// Добавляем пробелы перед заглавными буквами:
Пробелы = Text.Combine(

// Функция последовательно применяет заданную операцию (добавление пробела перед заглавными буквами) к каждому элементу списка символов:
List.Transform(

// Исходная строка преобразуется в список отдельных символов:
Text.ToList(ОстальныеБуквы),

// Каждый символ проверяется на принадлежность списку заглавных букв. Если символ является заглавной буквой, перед ним добавляется пробел:
each if _ = Text.Upper(_) then " " & Text.Lower(_) else _ ) ),

// Сцепляем первую букву и все остальное буквы, которые переводим в нижний регистр:
Сборка = ПерваяБуква & Пробелы,

// Замещаем последовательность "е а э с" на "ЕАЭС":
ТекстФинал = Text.Replace(Сборка, "е а э с", "ЕАЭС")
in
ТекстФинал
Строки, начинающиеся с двух косых черт "//" комментируют все написанное в них

Вид функции в Расширенном редакторе запросов:

Заключение

Теперь ваши данные будут выглядеть красиво и удобно для анализа! Этот подход позволит вам быстро автоматизировать обработку данных даже если они содержат большое количество записей.

Надеюсь, этот небольшой лайфхак поможет вам сэкономить время и упростить работу с большими объемами информации. Удачи в ваших проектах и до новых встреч!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *