Страницы: 1
RSS
Как разбить данные одного столбца на два в Power Query
 
Доброго времени суток всем.
Подскажите пожалуйста как можно разложить смешанные данные одного столбца на два столбца согласно критерию. Пример: в столбце последовательно расположены данные по наименованию производителя и его коды. Необходимо в Power Query получить 2 столбца в первом должны быть наименования производителя, во втором его коды. Для лучшего понимания приложил картинку примера с результатом.
Изменено: vartser - 24.11.2019 03:27:30
 
Цитата
vartser написал:
Для лучшего понимания приложил картинку
вообще то, нужен файл Excel...
Цитата
vartser написал:
Необходимо в Power Query
обязательно?
 
если коды состоят только из цифр без начальных нулей
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Custom = Table.AddColumn(Source, "a", each Number.From([Столбец1])),
    Replace = Table.ReplaceErrorValues(Custom, {{"a", null}}),
    Columns = Table.AddColumn(Replace, "b", each if [a] = null then [Столбец1] else null)[[b],[a]]
in
    Columns
Изменено: artyrH - 20.11.2019 07:43:57
 
Вариант
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
 #"Переименованные столбцы" = Table.RenameColumns(Источник,{{"Столбец1", "Производитель"}}),
 #"Строки с примененным фильтром" = Table.SelectRows(#"Переименованные столбцы", each ([Производитель] <> null)),
 #"Дублированный столбец" = Table.DuplicateColumn(#"Строки с примененным фильтром", "Производитель", "Код"),
 Преобразуем = Table.TransformColumns(#"Дублированный столбец",
 {{"Код",each if List.ContainsAny(Text.ToList(_),{"0".."9"}) then _ else ""},
 {"Производитель", each Text.Remove(_,{"0".."9"})}})
 in
 Преобразуем
Изменено: volfman - 20.11.2019 08:02:35
 
Еще вариант:
Код
let
    Source = Table.FromColumns({{"Almogaver", "18019", "Dupont", "18005"}}, {"Производитель/Код"}),
    Transform = Table.TransformColumns(Source, {{"Производитель/Код", each [Производитель = try Number.From(_) * null otherwise _, Код = if Производитель = null then _ else null], type record}}),
    Out = Table.FromRecords( Transform[#"Производитель/Код"] )
in
    Out
Изменено: PooHkrd - 20.11.2019 10:05:23
Вот горшок пустой, он предмет простой...
 
Всем большое спасибо что откликнулись на мою просьбу. Я сглупил не вложив экселевский файл, а так как я не столь грамотный в вопросах Power Query человек, мне тяжело подвязать код в моему примеру.))) Вот файл.
 
Вот.
Вот горшок пустой, он предмет простой...
 
До кучи
Код
let
    Source = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"Производитель/код","a"}}),
    Group  = Table.Group(Source, {"a"}, {{"b", each _[a]}},0,(a,b)=>1-Number.From(Value.Is(try Number.From(b[a]) otherwise null,type number)))[[b]],
    Split  = Table.SplitColumn(Group,"b",(a)=>{a{0},List.Skip(a,1)},{"Производитель","Код"}),
    Ret    = Table.TransformColumnTypes(Table.ExpandListColumn(Split,"Код"),{{"Код", type number}})
in
    Ret
 
Еще раз большое спасибо всем кто откликнулся на мой вопрос. Я абсолютный новичок в Power Query, но сегодня у меня все получилось приобщил код к своему файлу. Все заработало. :)  
 
Андрей Лящук, спасибо за 3 аргумент Table.SplitColumn. Давно собирался с ним поковыряться, найти альтернативу дефолтным сплиттерам, так и не собрался. Свои 5 копеек:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    split = Table.SplitColumn(Source, "Производитель/код", (x)=>let a = try Number.From(x) otherwise null
                                                                in {if a = null then x else null, a},
                                                           {"Производитель", "Код"})
in
    split
Изменено: Aleksei_Zhigulin - 24.11.2019 03:17:20
 
Доброго времени суток.
Если можно то, еще раз для особо одаренных
Нужно разбить 4й столбец на 3:
1. содержит раздел
2. вид работ
3. только число (сквозной порядковый номер)
Изменено: lord_21 - 01.04.2020 12:31:07
 
Цитата
lord_21 написал:
Если можно то, еще раз для особо одаренных
А чего ж нельзя то, вариант на базе решения от Aleksei_Zhigulin в посте 10.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    split = Table.SplitColumn(
        Source, 
        "Столбец4", 
        (x)=>let a = try Number.From(x) otherwise null
            in { if Text.StartsWith( Text.Combine({x,""}), "Раздел") then x else null, if (not Text.StartsWith( Text.Combine({x,""}), "Раздел") ) and a = null then x else null, a},
        {"содержит раздел", " вид работ", "только число"})
in
    split
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх