Удаление текста между разделителями в Power Query

Продолжаем разбирать пользовательские функции в Power Query. В прошлой статье на эту тему мы рассматривали реализацию возведения числа в квадрат. В этот раз мы обсудим как удалить текст между определенными разделителями.

Имеются следующие данные, задача: убрать проценты в скобках.

В Power Query нет встроенной функции для этого, поэтому придется написать собственный код.

Решить эту проблему можно следующим образом

  • Разделить текстовую строку через каждый “)”
  • Извлечь текст из начала каждой подстроки, вплоть до “(“
  • Объединить подстроки

Разделение текста по крайнему правому разделителю

Для начала разделим текстовую строку при каждом появлении “)”.

Выбрав запрос, добавьте пользовательский столбец, используя Text.Split, чтобы разделить текстовую строку на все “)”

В результате добавится столбец со списком значений внутри.

Извлечение текста перед левым разделителем

Нужно получить текст перед “(“, сделать это можно с помощью Text.Start, который извлекает строку из каждой строки в списках в колонке Custom.

Например, Text.Start берет Индия 1426188000 (17.94%) и превращает его в это Индия 1426188000

List.Transform берет эти новые строки из Text.Start и помещает их в Lists в колонке Custom, заменяя уже имеющиеся там значения. Вот результат.

Объединение подстрок для получения результата

Последняя часть – это использование Text.Combine для объединения подстрок в списках, чтобы получить нашу текстовую строку за вычетом ненужных нам частей.

Создание функции

Есть код, который можно использовать для удаления текста между разделителями, но каждый раз, когда я захочу его использовать, мне придется переписывать или изменять его.

Однако же, если написать функцию, то можно использовать ее в любое время и не придется переписывать или изменять код.

Для начала продублируем только что выполненный запрос и переименуем его в fxУдалениеТекстаМеждуРазделителями.

Откроем расширенный редактор.

Первое, что нужно сделать для преобразования этого кода в функцию, это изменить шаг “Источник” на объявление функции и укажем, что функция принимает 3 аргумента Строка, ЛевыйРазделитель и ПравыйРазделитель. Затем переименуем шаги #”Добавлен пользовательский объект”, изменим оператор in так, чтобы возвращался шаг L3.

Затем удалим функции Table.AddColumn из каждого шага. Здесь добавление столбцов в функцию не нужно.

Последнее, что нужно сделать, это вставить ключевое слово let перед шагом “Источник” и добавить новую строку “in Источник” в самом конце, чтобы сказать, что функция возвращает значение шага Source (которое является результатом шагов L1, L2 и L3).

Добавьте отступы, чтобы сделать макет кода более читабельным, и функция готова.

Ниже представлен изначальный блок кода и результат реа

let

    Источник = (Строка as text, ЛевыйРазделитель as text, ПравыйРазделитель as text) =>

    let

        Step1 = List.RemoveMatchingItems(Text.Split(Строка, ПравыйРазделитель), {""}),

        Step2 = List.Transform(Step1, each Text.Start(_ , Text.PositionOf(_, ЛевыйРазделитель ))),

        Step3 = Text.Combine (Step2)

    in

        Step3

in Источник

Вызов функции

После закрытия расширенного редактора мы можем добавить новый столбец в основной запрос, и вызывать пользовательскую функцию.

Готово! Надеюсь, вам была полезна эта статья!

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

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