Страницы: 1
RSS
Объединить уникальные значения из разных столбцов в один с помощью Power Query
 
Добрый день, коллеги.

Никак не могу решить следующую проблему.
Есть Таблица 1 и Таблица 2, у которых есть один общий ключ TxID. Значения в TxID могут иметь совпадения в Таблицах 1 и 2, а могут быть уникальными. При объединении этих двух таблиц нужно сохранить все значения из колонок TxID из Таблицы 1 и Таблицы 2 и записать их в одну общую колонку в новой Таблице 3 при этом подтянув остальные данные из Таблицы 1 и 2.

Пример во вложении.

Заранее спасибо!
Изменено: Tavis - 19.04.2018 15:12:27
 
Пока не пришел Максим Зеленский, так:
Код
let
    tab1 = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Table1"]}[Content],{{"Date", type date}, {"Date3", type date}}),
    tab2 = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Table2"]}[Content],{{"Date2", type date}}),
    tabcomb=Table.Combine({tab1, tab2}),
    grouprow = Table.Group(tabcomb, {"TxID"}, {{"Date", each List.Sum([Date]), type date}, {"Date2", each List.Sum([Date2]), type date}, {"Date3", each List.Sum([Date3]), type date}}),
    sort = Table.Sort(grouprow ,{{"TxID", Order.Ascending}})

in
    sort
 
StepanWolkoff, оказывается все проще, чем я думал, спасибо!
 
Цитата
StepanWolkoff написал:
Пока не пришел Максим Зеленский
:D
Чудес не бывает - прямого решения для данной задачи нет :) Кроме группировок есть еще кнопочный вариант на джойнах:
Код
// Table1
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content]
in
    Source

// Table2
let
    Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content]
in
    Source

// Append1
let
    Source = Table.Combine({Table1, Table2}),
    #"Removed Other Columns" = Table.SelectColumns(Source,{"TxID"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Merged Queries" = Table.NestedJoin(#"Removed Duplicates",{"TxID"},Table1,{"TxID"},"Table1",JoinKind.LeftOuter),
    #"Merged Queries1" = Table.NestedJoin(#"Merged Queries",{"TxID"},Table2,{"TxID"},"Table2",JoinKind.LeftOuter),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Merged Queries1", "Table1", {"Date", "Date3"}, {"Date", "Date3"}),
    #"Expanded {0}1" = Table.ExpandTableColumn(#"Expanded {0}", "Table2", {"Date2"}, {"Date2"})
in
    #"Expanded {0}1"
Но если вдруг количество столбцов дат динамическое, или группировка не радует (я бы, кстати, советовал для дат использовать не сумму, а Min или Max), то такой вариант (тоже кнопочный, тут просто чуть-чуть сократил) вообще плевать хотел на количество доп.столбцов:
Код
let
    Table1_2 = Table.UnpivotOtherColumns(Table1, {"TxID"}, "Атрибут", "Значение")
    Table2_2 = Table.UnpivotOtherColumns(Table2, {"TxID"}, "Атрибут", "Значение")
    Source = Table.Combine({Table1_2, Table2_2}),
    #"Pivoted Column" = Table.Pivot(Source, List.Distinct(Source[Атрибут]), "Атрибут", "Значение")
in
    #"Pivoted Column"
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
я бы, кстати, советовал для дат использовать не сумму, а Min или Max
для варианта с текстовым полем, как раз пригодилось, спасибо.

Другие способы тоже попробую.
Страницы: 1
Наверх