Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Power Query - Объединение столбцов с "пустыми" заголовками
 
Уважаемые форумчане, подскажите, пожалуйста, как реализовать задачу объединения столбцов по условию.
Даны таблицы, в которых частично отсутствуют заголовки столбцов.
Столбцы с "пустыми" заголовками могут быть в разных местах.
Таблица1
ИмяПараметр1Параметр 2Параметр 3Параметр 4Параметр 5
ае
бжл
вз1мпс
ги2но5
дк
Таблица2
ИмяПараметр1Параметр 2 Параметр 3Параметр 4 Параметр 5
т6 цчш2
у78фх щ
На выходе нужно получить таблицу вида
ИмяПараметр1Параметр 2Параметр 3Параметр 4Параметр 5
ае
бжл
вз 1мп с
ги 2н о 5
дк
т6цч ш 2
у78 ф хщ
Изменено: Alexander123 - 21 Ноя 2019 11:28:46
 
Alexander123, Я вижу в примере название столбцов
обманывать не хорошо.
Причём есть как Параметр так и столбец.
Так что вам в итоге нужно?
сливать к параметру столбец справа от параметра?

P.S. насколько мне известно в умной таблице если вы её используете для PQ не может быть "пустого заголовка". он может выглядить как пустой если там будет пробел и то только один столбец далее пойдёт нумерация  2 3 4 5
1.PNG (18.65 КБ)
Изменено: Wild.Godlike - 21 Ноя 2019 11:11:30
 
Прошу прощения, обновлю файл примера. Поторопился.
Имеются запросы к листам, где в структуре есть столбцы с отсутствующими названиями.
При формировании запроса в умной таблице появляются заголовки Столбец1 ... Столбецn.
Да, все верно, нужно сливать к параметру столбец справа или несколько столбцов справа, однако в разных запросах расположение и количество столбцов может отличаться.
Изменено: Alexander123 - 21 Ноя 2019 11:11:58
 
Вот пример обработки одной таблицы, он универсальный для таблиц такой структуры. Переделывайте его в функцию, и пропускайте все таблицы через функцию, после чего объединяйте обычным Table.Combine'ом.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],
    ChangedType = Table.TransformColumnTypes( Source, List.Transform( Table.ColumnNames(Source), each {_, type text} ) ),
    TransposedTable = Table.Transpose(ChangedType),
    FilledDown = Table.FillDown(TransposedTable,{"Column1"}),
    GroupedRows = Table.Group(FilledDown, {"Column1"}, {{"таб", each Table.FromColumns( List.Transform( Table.ToColumns( Table.RemoveColumns( _,{"Column1"}) ), each {Text.Combine( _, " ")} ) ), type table}}),
    Expanded = Table.ExpandTableColumn(GroupedRows, "таб", {"Column1", "Column2", "Column3", "Column4", "Column5"}, {"Column1.1", "Column2", "Column3", "Column4", "Column5"}),
    TransposedBack = Table.Transpose(Expanded),
    PromotedHeaders = Table.PromoteHeaders(TransposedBack, [PromoteAllScalars=true])
in
    PromotedHeaders
Вот горшок пустой, он предмет простой...
 
PooHkrd, огромное спасибо!!!
 
Вот этот вариант более универсальный. Берите лучше его.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],
    ChangedType = Table.TransformColumnTypes( Source, List.Transform( Table.ColumnNames(Source), each {_, type text} ) ),
    TransposedTable = Table.Transpose(ChangedType),
    FilledDown = Table.FillDown(TransposedTable,{"Column1"}),
    GroupedRows = Table.Group(FilledDown, {"Column1"}, {{"таб", each Table.FromColumns( List.Transform( Table.ToColumns( Table.RemoveColumns( _,{"Column1"}) ), each {Text.Combine( _, " ")} ), List.Skip( Table.ColumnNames( FilledDown ) ) ), type table}}),
    Expanded = Table.ExpandTableColumn(GroupedRows, "таб", List.Skip( Table.ColumnNames( FilledDown ) ) ),
    TransposedBack = Table.Transpose(Expanded),
    PromotedHeaders = Table.PromoteHeaders(TransposedBack, [PromoteAllScalars=true])
in
    PromotedHeaders
Изменено: PooHkrd - 21 Ноя 2019 13:02:53
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо!!!
 
PooHkrd, тут можно и без FillDown обойтись
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица4"]}[Content],
    Transpose =  Table.Transpose(Source),
    Fn=(col)  => {col, (tbl)=>Replacer.ReplaceValue(Text.Combine(List.Transform(Table.Column(tbl,col),Text.From)," "),"",null)},
    Group     =  Table.Group(Transpose, {"Column1"}, List.Transform(List.Skip(Table.ColumnNames(Transpose)),Fn),0,(a,b)=>Number.From(b[Column1]<>null))
in
    Table.PromoteHeaders(Table.Transpose(Group))
 
Андрей Лящук, я так все равно не научусь.  :D Но тем не менее спасибо!
Изменено: PooHkrd - 21 Ноя 2019 14:31:59
Вот горшок пустой, он предмет простой...
 
еще вариант
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Demoted Headers" = Table.DemoteHeaders(Source),
    #"Transposed Table" = Table.Transpose(#"Demoted Headers"),
    #"Added Conditional Column" = Table.AddColumn(#"Transposed Table", "a", each if Text.Contains([Column1], "Параметр") then [Column1] else null),
    #"Filled Down" = Table.FillDown(#"Added Conditional Column",{"a"}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Filled Down", {"Column1", "a"}, "Атрибут", "Значение"),
    #"Grouped Rows1" = Table.Group(#"Unpivoted Other Columns", {"a", "Атрибут"},  {{"Co", each Text.Combine(List.Transform(_[Значение], Text.From), " "), type text}}),
    #"Pivoted Column" = Table.Pivot(#"Grouped Rows1", List.Distinct(#"Grouped Rows1"[Атрибут]), "Атрибут", "Co"),
    #"Transposed Table1" = Table.Transpose(#"Pivoted Column"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table1", [PromoteAllScalars=true])
in
    #"Promoted Headers"
Страницы: 1
Читают тему (гостей: 1)
Наверх