Power Query — удалить символы из числовых значений

У меня есть поле таблицы, в котором данные содержат наши номера memberID, за которыми следуют символьные или символьные + числовые строки. Например:

My Data
1234567Z1
2345T10
222222T10Z1
111
111A

Should Become
123456
12345
222222
111
111

Я хочу получить только номер участника (как показано выше в разделе «Должен стать»). т.е. все цифры, которые ОСТАЛИСЬ от первого символа. Поскольку длина номера участника может быть разной для каждого человека (от первых 1 до 7 цифр) и используемые буквы могут быть разными (от a до z, от 0 до 8 символов), я не думаю, что смогу РАЗДЕЛИТЬ поле .

Прямо сейчас в Power Query я выполняю 27 команд поиска и замены для очистки этих данных (например, найти замену T10 ничем, найти замену T20 ничем и т. д.).

Может ли кто-нибудь предложить лучший способ добиться этого?

Я успешно создал формулу для этого в Excel... но сейчас я пытаюсь сделать это в Power Query и не знаю, как преобразовать формулу, и я не уверен, что это самое эффективное решение.

=iferror(value(left([MEMBERID],7)),
     iferror(value(left([MEMBERID],6)),
         iferror(value(left([MEMBERID],5)),
             iferror(value(left([MEMBERID],4)),
                 iferror(value(left([MEMBERID],3)),0)
             )
         )
     )
 )

Спасибо


person Kerry    schedule 08.05.2015    source источник


Ответы (1)


Вероятно, есть несколько способов сделать это. Вот один из способов:

  1. Создать запрос Письма:

let Source = { "a" .. "z" } & { "A" .. "Z" } in Source

  1. Создайте запрос GetFirstLetterIndex:

let Source = (text) => let // For each letter find out where it shows up in the text. If it doesn't show up, we will have a -1 in the list. Make that positive so that we return the index of the first letter which shows up. firstLetterIndex = List.Transform(Letters, each let pos = Text.PositionOf(text, _), correctedPos = if pos < 0 then Text.Length(text) else pos in correctedPos), minimumIndex = List.Min(firstLetterIndex) in minimumIndex in Source

  1. В таблицу, содержащую ваши данные, добавьте пользовательский столбец с этой формулой:

Text.Range([ColumnWithData], 0, GetFirstLetterIndex([ColumnWithData]))

Эта формула возьмет все от вашего текста данных до первой буквы.

person Alejandro Lopez-Lago - MSFT    schedule 08.05.2015