Страницы: 1
RSS
Альтернатива СЖПРОБЕЛЫ в PowerQuery
 
Здравствуйте, друзья.

В принципе в теме вопрос обозначил - Альтернатива СЖПРОБЕЛЫ в PowerQuery.
Настроил несколько запросов, а сейчас обновились справочники в исходнике, почему-то с кучей лишних пробелов.

Самостоятельно ищу ответ, но время очень поджимает.


Заранее, спасибо.
 
Используйте функцию TRIM (DAX) удаляет все пробелы из текста, за исключением единичных пробелов между словами.  Подробнее тут
Изменено: Sertg - 09.10.2017 13:22:17
 
Доброе время суток.
Sertg, а DAX-то тут причём?
Вариант.
Код
let
    Source = " Это текст с  несколькими   лишними      пробелами  между словами     ",
    words = Text.Split(Source, " "),
    realWords = List.Select(words, each _ <> ""),
    result = Text.Combine(realWords, " ")
in
    result

Успехов.
 
inженер, здравствуйте.
Text.Trim — удаляет начальные и конечные пробелы
Text.TrimStart — удаляет только начальные пробелы
Text.TrimEnd — удаляет только конечные пробелы
Вариант от Андрея VG "удалит" и лишние между словами
Изменено: Jack Famous - 09.10.2017 13:27:55
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
СЖПРОБЕЛЫ удаляет лишние пробелы и между словами, этому думаю альтернативы нет.
 
Всем спасибо.

Буду пробовать.
Нашел на ленте функцию "усечь" (обрезка пробелов слева и справа), вроде должна помогать, но попробовал, что-то не получается. Буду разбираться.
 
Уважаемый Андрей VG !

Я вам по белому очень завидую за ваши знания в Power Query. Буду признателен если ответите и на мой вопрос тоже, про SUMIF в Power Query/
Power Query, Power Pivot, Power BI и MS Excel спасут мир
 
Андрей VG, ух ты как красиво. Спасибо!
А я как дурак создавал штук 20 подряд шагов с заменой двойных пробелов на одинарные.
Не так красиво, но зато работало!  :D  
Вот горшок пустой, он предмет простой...
 
Андрей VG, не могу применить Ваш код.
Очень прошу написать в файле во вложении.

Еще раз, спасибо.
 
Цитата
inженер написал:
не могу применить Ваш код.
Что-то каких-то следов попыток я и не увидел :(  Пишите функцию, да используете её.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Исходник", type text}}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"Исходник", "Преобразование"}}),
    asExcelTrim = (this as text) as text => Text.Combine(List.Select(Text.Split(this, " "), each _ <> ""), " "),
    fullTrim = Table.TransformColumns(#"Переименованные столбцы", {"Преобразование", asExcelTrim, type text})
in
    fullTrim

Успехов.
 
Андрей VG, здравствуйте.
С файлом "Пример" Ваш код применил - вопросов нет. К рабочему не получается.

Эта строчка просто непонятна:
asExcelTrim = (this as text) as text =>
Код
Text.Combine(List.Select(Text.Split(this, " "), each _ <> ""), " "),

но думаю проблема с применением последней:
Код
fullTrim = Table.TransformColumns(#"Переименованные столбцы", {"Преобразование", asExcelTrim, type text}).

Попробовал код адаптировать, но значит где-то не догоняю.
Во вложении то, до чего смог додуматься (запрос "Семенов"). Явно видно, что не работает на 8,9 строке.

Спасибо.
 
Цитата
inженер написал:
asExcelTrim
Всего лишь объявление пользовательской функции
Цитата
inженер написал:
Явно видно, что не работает на 8,9 строке.
У вас и СЖПРОБЕЛЫ с ними работать не будут, так как там не пробел, а так называемый неразрывный пробел (код символа 160, а у пробела 32). Так что используйте функцию Text.Replace или переделайте asExcelTrim с использованием Text.SplitAny
Успехов.
 
Андрей VG, однако получилось.

Подставил неразрывной пробел в функцию Text.SplitAny:
Код
asExcelTrim = (this as text) as text => Text.Combine(List.Select(Text.SplitAny(this, "  "), each _ <> ""), " "),

Оно?
Вот же подстава, как-будто специально запутать хотели.

Спасибо.
 
Цитата
Андрей VG написал:
asExcelTrim = (this as text) as text => Text.Combine(List.Select(Text.Split(this, " "), each _ <> ""), " ")
Подскажите , что добавить чтобы вместо нескольких пробелов поставить ";", а вместо одного пробела оставить пробел
Изменено: Юрий Роменский - 01.03.2021 21:47:26
 
Цитата
mag1str написал:
что добавить
добавить файл-пример
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
buchlotnik написал:
добавить файл-пример
Изменено: Юрий Роменский - 01.03.2021 21:47:06
 
Так и не уловил, каков должен быть результат в примере - нет там спрашиваемого
Цитата
mag1str написал:
вместо нескольких пробелов поставить ";"
Буду столь же загадочным - два варианта в одном :)
Код
let
    Source = "12-ЯНВ-21 100107449       Маска марлевая Move order      1023908        МТСрц            250,00  шт        6,00432        1 501,08",
    stringSet = Table.FromColumns({Text.Split(Source, " ")}),
    accRecord = List.Accumulate(stringSet[Column1], [string="", count=0], (acc, next) =>
        if next = "" then
            [string=acc[string], count = acc[count] + 1]
        else
            [string=acc[string] & (if acc[count] = 0 then " " else ";") & next, count=0]
    ),
    shrink = Table.Group(stringSet, {"Column1"}, {
        "temp",
        each if _{0}[Column1] = "" then ";" else _{0}[Column1]
    }, GroupKind.Local),
    toString = Text.Combine(shrink[temp], " "),
    result = Text.Replace(toString, " ; ", ";"),
    accResult = Text.TrimStart(accRecord[string])
in
    accResult
 
Цитата
Андрей VG написал:
Буду столь же загадочным - два варианта в одном
Не верно задал вопрос.
Необходимо разделить текст по столбцам, по пробелам не получается.
 
Цитата
Юрий написал:
по пробелам не получается
гм, при этом тема:
Цитата
inженер написал:
Альтернатива СЖПРОБЕЛЫ в PowerQuery
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
Юрий написал:
Не верно задал вопрос.
Ну, вот и подошли к существу дела. Тогда создайте свою тему с правильно поставленным вопросом... Тогда и продолжим. :)
 
Была схожая проблема: поле «Отправитель» выгружаемого файла содержало текстовое значение и пару сотен пробелов.
Решением было добавление одной строчки в код запроса Power Query:

#"Удаление хвостовых пробелов Отправитель" = Table.TransformColumns(#"Повышенные заголовки",{{"Отправитель", Text.TrimEnd}}),
Изменено: aleck - 13.12.2021 18:04:50
 
Здравствуйте.

Подскажите, пожалуйста, как избежать ошибки в функции (см. ниже) если в столбце, к которому применяется данная функция, присутствуют значения null ?
Код
asExcelTrim = (this as text) as text => Text.Combine(List.Select(Text.Split(Text.Clean(this), " "), each _ <> ""), " ")

Файл пример во вложении.

Изменено: Виталий - 05.04.2022 22:58:35
 
Андрей VG, время идет, а советы все так же полезны!
Большое спасибо за такое изящное решение)
 
Всем добрый день.
Виталий, получилось решить при наличии данных в столбце с null? Может кто еще может помочь?
 
Кирилл Толкачев, а как Вы пробовали?
Допустим, просто замену null на "" перед применением функции не испытывали?
Вот лишь бы решение получить, а самостоятельно ничего не делают...
Вот так можно:
Код
( this ) as text => Text.Combine ( List.Select ( Text.Split ( Text.Clean ( this ?? "" ), " " ), each _ <> "" ), " " )

Если версия PQ старая, то синтаксис ?? даст ошибку. Можно так (эквивалентно):
Код
( this ) as text => Text.Combine ( List.Select ( Text.Split ( Text.Clean ( if this = null then "" else this ), " " ), each _ <> "" ), " " )

Или так:
Код
= ( this ) as text => Text.Combine ( List.Select ( Text.Split ( Text.Clean ( List.Max ( { this, "" } ) ), " " ), each _ <> "" ), " " )
Изменено: surkenny - 31.01.2023 14:53:37
 
Кирилл Толкачев, ну Вы и редиска :)
Где же обратная связь?
 
Цитата
surkenny написал:
Кирилл Толкачев, ну Вы и редиска :)
Где же обратная связь?
Да, извините, я несколько выпал из рабочей струи :)
СПАСИБО
Версия 2016 и вторая строчка помогла.
Страницы: 1
Наверх