Страницы: 1
RSS
Проблема при разделении столбца в Power Query, Если в ячейке разделителей больше, чем было при создании запроса, дополнительные столбцы не создаются.
 
Пример будет?
Вот горшок пустой, он предмет простой...
 
PooHkrd, вот пример)
для меня тоже актуально
 
как-то так, наверное
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица3"]}[Content],
    SplitColumn=(table as table ,colname as text,fn as function)=>let 
        a=List.Transform(Table.Column(table,colname),each List.Count(Text.PositionOf(_," ",2))+1),
        b=List.Transform({1..(try List.Max(a) otherwise a)},each colname&"."&Text.From(_))
    in 
        Table.SplitColumn(table, colname, fn, b),
    #"Разделить столбец по разделителю" = SplitColumn(Источник, "Столбец1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv))
in
    #"Разделить столбец по разделителю"
Изменено: Андрей Лящук - 29.03.2019 08:36:43
 
Андрей Лящук, спасибо
у меня так получилось. хотел обойтись без добавления пользовательского объекта, но не придумал как
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "П", each Text.Length([Столбец1])-Text.Length(Text.Replace([Столбец1]," ",""))+1),
    #"Разделить столбец по разделителю" = Table.SplitColumn(#"Добавлен пользовательский объект", "Столбец1", Splitter.SplitTextByDelimiter(" ", 0),  List.Max(#"Добавлен пользовательский объект"[П]))
in
    #"Разделить столбец по разделителю"
 
еще вариант
Код
let
    a = Excel.CurrentWorkbook(){[Name="Таблица3"]}[Content],
    c = Table.SplitColumn(a, "Столбец1", Splitter.SplitTextByDelimiter(" ", 0),  List.Max(Table.AddColumn(a, "П", each List.Count( Text.PositionOfAny([Столбец1], {" "}, 3) ) + 1)[П]))
in
    c
 
Большое спасибо за ответы!
У меня был и пример, и текст с описанием проблемы. Но почему-то они не отображены на форуме.

Из варианта от artyrH
Text.PositionOfAny дает номера позиций, которые разделитель занимает в строке, начиная с нуля
List.Count дает нам количество этих позиций, т.е. количество разделителей
К этому прибавляем 1 и получаем количество столбцов, на которые надо разбить исходный столбец
Такие значения по каждой строке помещаем в дополнительный столбец (виртуальный)
По данному столбцу рассчитываем максимальное значение с помощью List.Max
И уже это максимальное значение вставляем в Splitter.SplitTextByDelimiter в качестве числа столбцов.

В решении от Андрея Лящука создается пользовательская функция, в которой формируется список имен разделенных столбцов.

Еще раз большое спасибо!
 
почти так же:
Код
= Table.SplitColumn(
    Источник, 
    "Столбец1", 
    Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), 
    List.Max(List.Transform(Источник[Столбец1], each List.Count(Text.PositionOf(_, " ", 2))+1)))
F1 творит чудеса
 
ещё вариант предложу
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    РазделениеНаСлова = Table.AddColumn(Источник, "data", each Splitter.SplitTextByDelimiter(" ")([Столбец1])),
    РазделениеСловНаСтроки = Table.FromColumns(РазделениеНаСлова[data]),
    Итог = Table.Transpose(РазделениеСловНаСтроки)
in
    Итог
Изменено: Stics - 29.03.2019 17:40:36
 
Цитата
Максим Зеленский написал:
почти так же:
Добрый день,
Максим (или кто еще знает), подскажите, что означает двойка в функции Text.PositionOf(_, " ", 2) в Вашем коде выше. Насколько понимаю, там должен стоять параметр вхождения. Эта двойка - аналог Occurrence.Last или что-то другое?
 
voodoo, это аналог Occurrence.All
 
вот же ж...
спасибо Вам, в очередной раз,  !

...а где бы это все почитать, не знаете? на docs.microsoft.com по power query я такой инфы не вижу (и вообще, бедненько там как-то все с примерами...)
Страницы: 1
Наверх