Страницы: 1
RSS
Между данными разное количество пустых строк. Как в Power Query собрать построчно в таблицу
 
Привет всем. Помогите с решением задачи. Между данными имеется разное количество пустых строк. Как  в Power Query собрать построчно в таблицу?
Изменено: abc1 - 26.12.2019 16:33:06
 
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Столбец1", type any}, {"Столбец2", type datetime}, {"Столбец3", type any}, {"Столбец4", type text}}),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Измененный тип", each ([Столбец1] <> null and [Столбец1] <> "")),
    #"Несвернутые столбцы" = Table.UnpivotOtherColumns(#"Строки с примененным фильтром", {}, "Атрибут", "Значение"),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Несвернутые столбцы",{"Атрибут"}),
    #"Добавлен индекс" = Table.AddIndexColumn(#"Удаленные столбцы", "Индекс", 1, 1),
    #"Вставлено: деление с остатком" = Table.AddColumn(#"Добавлен индекс", "Остаток от деления", each Number.Mod([Индекс], 10), type number),
    #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Вставлено: деление с остатком", {{"Остаток от деления", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Вставлено: деление с остатком", {{"Остаток от деления", type text}}, "ru-RU")[#"Остаток от деления"]), "Остаток от деления", "Значение"),
    #"Заполнение вниз" = Table.FillDown(#"Сведенный столбец",{"1", "2", "3", "4", "5", "6", "7"}),
    #"Заполнено вверх" = Table.FillUp(#"Заполнение вниз",{"9", "0"}),
    #"Строки с примененным фильтром1" = Table.SelectRows(#"Заполнено вверх", each ([8] <> null)),
    #"Удаленные столбцы1" = Table.RemoveColumns(#"Строки с примененным фильтром1",{"Индекс"}),
    #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Удаленные столбцы1",{"1", "4", "2", "0", "3", "5", "9", "6", "7", "8"})
in
    #"Переупорядоченные столбцы"
 
еще вариант
Код
let
    Source = Table.SelectRows(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], each [Столбец1] <> null and [Столбец1] <> ""),
    Custom = Table.AddColumn(Table.ReplaceValue(Source,"",null,Replacer.ReplaceValue,{"Столбец2"}), "a", each Record.FieldValues(_)),
    Index = Table.AddIndexColumn(Custom, "Индекс", 0, 1),
    Modulo = Table.AddColumn(Index, "b",  each Number.Mod([Индекс], 3), type number)[[a],[b],[Индекс]],
    Integer = Table.TransformColumns(Modulo, {{"Индекс", each Number.IntegerDivide(_, 3), Int64.Type}}),
    Pivoted = Table.Pivot(Table.TransformColumnTypes(Integer, {{"b", type text}}), List.Distinct(Table.TransformColumnTypes(Integer, {{"b", type text}})[b]), "b", "a"),
    Custom1 = Table.AddColumn(Pivoted, "a", each List.RemoveNulls([0]&[1]&[2]))[[a]],
    Values = Table.TransformColumns(Custom1, {"a", each Text.Combine(List.Transform(_, Text.From), "=="), type text}),
    Split = Table.SplitColumn(Values, "a", Splitter.SplitTextByDelimiter("==", QuoteStyle.Csv)),
    Reordered = Table.ReorderColumns(Split,{"a.1", "a.4", "a.2", "a.10", "a.3", "a.5", "a.9", "a.6", "a.7", "a.8"}),
    Type = Table.TransformColumnTypes(Reordered,{  {"a.5", type datetime}, {"a.6", type datetime},  {"a.8", type number}})
in
    Type
 
Можно еще так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Clean = List.Select( List.Combine( Table.ToRows( Source ) ), each _ <> null and _ <> "" ),
    ToTable = Table.FromRows( List.Split( Clean, 10 ) ),
    ReorderedColumns = Table.ReorderColumns(ToTable,{"Column1", "Column4", "Column2", "Column10", "Column3", "Column5", "Column9", "Column6", "Column7", "Column8"})
in
    ReorderedColumns
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
еще так
Круто!
 
Спасибо большое! Все решения работают.
Не думал что в четыре строки эту задачу можно будет решить)
 
Цитата
abc1 написал:
Не думал что в четыре строки
Это вот все можно вообще в одну строку написать.
Не смотрите на количество строк, смотрите на количество функций и их охочесть до ресурсов процессора. У коллег что отписались раньше, например, используются такие чудесные функции как Table.Pivot и Table.UnpivotOtherColumns, они на самом деле отличные, но вот они ресурсов кушают не мало. А Table.ToRows, Table.FromRows и простейшие обработчики списков - эти ребята они попроще в этом плане.
Изменено: PooHkrd - 27.12.2019 12:44:40
Вот горшок пустой, он предмет простой...
 
PooHkrd, можно вопрос
как из списка списков сделать список значений, то есть развернуть списком?
могу развернуть таблицей через Table.FromList и Table.ExpandListColumn
Код
List.Transform({2014..2019}, each List.Transform({1..12}, (y)=> #date(_,y,1)))
 
artyrH, вы про это из поста 4?
Код
= List.Combine( Table.ToRows( Source ) )

Сначала Table.ToRows преобразовывает таблицу в список строк, каждая из которых представляет собой тоже список значений. Т.е. получаем на выходе тот самый список списков
Потом List.Combine объединяет значения списков в единый список значений.
Или я чего-то не так понял?
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Сначала Table.ToRows
да, в вашем решении увидел. только хотел без конвертации в таблицу, а потом в список.
спасибо. достаточно List.Combine
Изменено: artyrH - 27.12.2019 12:19:06
Страницы: 1
Наверх