Страницы: 1
RSS
Объединение таблиц по нескольким столбцам в Power Query
 
Добрый день! Коллеги, подскажите пожалуйста как решить задачу через Power Query. В примере есть 2 таблицы, каждая из которых содержит 2 столбца с одинаковыми названиями День и Очередь. Необходимо объединить таблицы так, чтобы при совпадении данных в столбцах День и Очередь, значения из 3 столбца (Количество обращений и Автоматически) находились в одной строке. Сложность в том, что в одной таблице не всегда могут быть все те очереди, которые есть в другой таблице. В примере есть таблица, как должен выглядеть итоговый результат. Не смог добиться его самостоятельно.
 
Доброе время суток
Вариант
Код
let
    left = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Обращения"]}[Content], {{"День", "dl"}, {"Очередь", "ol"}}),
    right = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Автоматически"]}[Content], {{"День", "dr"}, {"Очередь", "or"}}),
    joined = Table.Join(left, {"dl", "ol"}, right, {"dr", "or"}, JoinKind.FullOuter),
    defineDay = Table.AddColumn(joined, "День", each if [dl] = null then [dr] else [dl]),
    definOrder = Table.AddColumn(defineDay, "Очередь", each if [ol] = null then [or] else [ol])
in
    definOrder[[День], [Очередь], [Количество обращений], [Автоматически]]
 
Цитата
Murderface_ написал:
Сложность в том, что в одной таблице не всегда могут быть все те очереди, которые есть в другой таблице.
Не только в этом, в таблице Автоматически есть дубли по столбцам День и Очередь, например день 1, очередь 2 - 3 строки, с этим что делать? Как показывать в одну строку?
В общем, если нужна идея, то можно, например, так:
Код
let
    Source1 = Table.UnpivotOtherColumns( Excel.CurrentWorkbook(){[Name="Обращения"]}[Content], {"День", "Очередь"}, "Атрибут", "Значение"),
    Source2 = Table.UnpivotOtherColumns( Excel.CurrentWorkbook(){[Name="Автоматически"]}[Content], {"День", "Очередь"}, "Атрибут", "Значение" ),
    PivotedColumn = Table.Pivot( Source1 & Source2, List.Distinct((Source1 & Source2)[Атрибут]), "Атрибут", "Значение", (x) => Text.Combine( List.Transform(x, Text.From), "," ) )
in
    PivotedColumn

А агрегатор, если что, свой напишите.
Изменено: PooHkrd - 10.01.2020 10:06:49
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
с этим что делать? Как показывать в одну строку?
Как в таблице с желаемым результатом  :)  
 
Андрей VG, спасибо! Буду разбираться.
 
PooHkrd, спасибо!
 
Тогда так
Код
let
    Source1 = Table.UnpivotOtherColumns( Excel.CurrentWorkbook(){[Name="Обращения"]}[Content], {"День", "Очередь"}, "Атрибут", "Значение"),
    Source2 = Table.UnpivotOtherColumns( Excel.CurrentWorkbook(){[Name="Автоматически"]}[Content], {"День", "Очередь"}, "Атрибут", "Значение" ),
    PivotedColumn = Table.Pivot( Source1 & Source2, List.Distinct((Source1 & Source2)[Атрибут]), "Атрибут", "Значение", List.Sum )
in
    PivotedColumn

Обратите внимание, что в варианте Андрея нет агрегирования с суммированием, его можете сделать сами либо после джойна, либо до него (лучше до).
Изменено: PooHkrd - 10.01.2020 10:12:24
Вот горшок пустой, он предмет простой...
 
Цитата
Murderface_ написал:
Как в таблице с желаемым результатом
То есть суммарно
Цитата
PooHkrd написал:
нет агрегирования с суммированием
Да не проблема
Код
let
    left = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Обращения"]}[Content], {{"День", "dl"}, {"Очередь", "ol"}}),
    right = Table.RenameColumns(Excel.CurrentWorkbook(){[Name="Автоматически"]}[Content], {{"День", "dr"}, {"Очередь", "or"}}),
    groupLeft = Table.Group(left, {"dl", "ol"}, {"Количество обращений", each List.Sum([Количество обращений])}),
    groupRight = Table.Group(right, {"dr", "or"}, {"Автоматически", each List.Sum([Автоматически])}),
    joined = Table.Join(groupLeft, {"dl", "ol"}, groupRight, {"dr", "or"}, JoinKind.FullOuter),
    defineDay = Table.AddColumn(joined, "День", each if [dl] = null then [dr] else [dl]),
    definOrder = Table.AddColumn(defineDay, "Очередь", each if [ol] = null then [or] else [ol])
in
    definOrder[[День], [Очередь], [Количество обращений], [Автоматически]]
 
Андрей VG, PooHkrd, еще раз спасибо)
Изменено: Murderface_ - 10.01.2020 10:21:29
Страницы: 1
Наверх