Страницы: 1
RSS
PQ. Извлечение последних символов на основании выражения, Text.End(_, Text.Length())
 
Здравствуйте!
Прошу подсказать решение задачи.

Дано:
Имеется условный "Столбец 1", в котором содержится текст по типу:
Расход.янва
расход;фев
Расход,мар

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

Если идти по шагам,
я нашел кол-во символов строке и отнял 7, в итоге создан столбец с кол-вом символов, которые можно использовать для "Извлечение последних символов".
Код
#"Вставлено: длина текста" = Table.AddColumn(#"Измененный тип", "Длина", each Text.Length([Столбец 1])-7, Int64.Type),


Далее необходимо извлечь последние символы со значением полученным в #"Вставлено: длина текста". Я условно подставил цифру 5.

Код
#"Извлеченные последние символы" = Table.TransformColumns(#"Вставлено: длина текста", {{"Столбец 1", each Text.End(_, 5), type text}})

Каким образом реализовать действия в одном шаге? По типу:  
Код
#"Извлеченные последние символы" = Table.TransformColumns(#"Вставлено: длина текста", {{"Столбец 1", each Text.End(_, Text.Length([Столбец 1])-7), type text}})


У меня при подобной подстановке возникает ошибка, я допускаю, что дело типе данных, т.е. когда в Text.End(_, _) я ставлю 5, то это число. Если я ставлю выражение, то результат функции Text.Length([Столбец 1])-7 не воспринимается как число.

__________

Вопрос № 2: Если потребуется оставить только первые 3 буквы от названия месяца, то как эффективно завернуть в одну строку?


Благодарю!

 
так чтоли?
Код
= Table.AddColumn(Источник, "Длина", each Text.End([Столбец 1],Text.Length([Столбец 1])-7))
по второму вопросу:
Код
= Table.AddColumn(Источник, "Длина", each Text.Start(Text.End([Столбец 1],Text.Length([Столбец 1])-7),3))
Изменено: buchlotnik - 01.03.2020 13:36:57
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, так. Осталось только понять каким образом вы это сделали и почему не получалось у меня
Код
= each Text.End(_, Text.Length([Столбец 1])-7), type text}}) // мой вариант  
Код
= each Text.End([Столбец 1],Text.Length([Столбец 1])-7)) // вариант buchlotnik
Изменено: ivanka - 01.03.2020 13:47:52
 
Еще вариант
Код
= Table.TransformColumns(Источник,{{"Столбец 1", each Text.Start(Text.Replace(Text.Remove(Text.Lower(_),{",",";","."}),"расход",""),3)}})
или
= Table.TransformColumns(Источник,{{"Столбец 1", each Text.Range(_,7,3)}})
Изменено: Михаил Л - 01.03.2020 13:55:44
 
buchlotnik, понял чутка!)

у меня было (выдавало ошибку):    
Код
#"Извлеченные последние символы" = Table.TransformColumns(#"Вставлено: длина текста", {{"Столбец 1", each Text.End(_, Text.Length([Столбец 1])-7), type text}})

стало (работает):
Код
    #"Извлеченные последние символы" = Table.TransformColumns(#"Вставлено: длина текста", {{"Столбец 1", each Text.End(_, Text.Length(_)-7), type text}})

вся разница в:
Text.End(_, Text.Length([Столбец 1])-7)
Text.End(_, Text.Length(_)-7) - необходимо было убрать [Столбец 1], т.к. название столбца упомянуто и "задаётся" следующим образом: {{"Столбец 1", each ....
Изменено: ivanka - 01.03.2020 14:05:21
 
Цитата
ivanka написал:
вы изменяете не текущий столбец
можно и текущий
Код
 let
    from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    to = Table.TransformColumns(from, {"Столбец 1", each Text.Range(_,7,3)})
in
    to
Цитата
ivanka написал:
почему у вас так получается.
ну сравните синтаксис - что непонятного?
Изменено: buchlotnik - 01.03.2020 14:03:01
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
ivanka написал:
как-то связано
Попробуйте в своем варианте заменить [Столбец 1] на _
 
Михаил Л, благодарю! Я сам дошёл до этой мысли, но ваш комментарий мне точно помог бы.  
buchlotnik, когда ещё не умеешь "читать", то непонятно буквально всё)) Я учусь "читать" язык M.

Благодарю, господа!  
Изменено: ivanka - 01.03.2020 14:12:08
Страницы: 1
Наверх