Excel - Power Query 2016 - PullRequest
       21

Excel - Power Query 2016

0 голосов
/ 29 декабря 2018

Я получил данные из двух таблиц.

Клиенты (содержащие идентификатор клиента и общую стоимость заказов / финансирования

Заказы (содержащие идентификатор клиента и каждый заказ)

enter image description here

Я создал Power Query, затем выбрал опцию «Объединить запросы как новые». Выбрал соответствующие столбцы (идентификатор клиента) и выбрал опцию: Left Outer (All)из первого и, сопоставляя со второго => все из таблицы клиентов, сопоставляя из таблицы заказов.) Затем я расширил последний столбец запроса, включив в него то, что я хотел из таблицы заказов, в результате чего приведена таблица ниже слева.Справа - то, что я ищу. Проблема в том, что суммы финансирования уже являются общими для каждого клиента. Мне не нужно разбивать стоимость каждого заказа. Мне все еще нужны показанные заказы, но они мне не нужнызначения (только итоговая сумма для каждого клиента). Можно ли сделать это, как показано ниже справа? В противном случае итоговая сумма еще не получена.

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Я думаю, что вы пытаетесь соединиться только с первым экземпляром каждого значения в столбце Customer.Кажется, что нет какой-либо функции или элемента GUI, который бы позволял вам это делать (я посмотрел справочную документацию для Power Query M , возможно, я что-то пропустил).

Чтобы повторить ваши данные, я начну с нескольких таблиц (левая таблица с именем Customers, правая таблица с именем Orders):

My tables

Затем я использую приведенный ниже код M (первые несколько строк предназначены только для получения моих таблиц с листа):

let
    customers = Excel.CurrentWorkbook(){[Name = "Customers"]}[Content],
    orders = Excel.CurrentWorkbook(){[Name = "Orders"]}[Content],
    merged = Table.NestedJoin(orders, {"CUSTOMER"}, customers, {"CUSTOMER"}, "merged", JoinKind.LeftOuter),
    indexColumn = Table.AddIndexColumn(merged, "Temporary", 0, 1),
    indexes =
        let
            uniqueCustomers = Table.Distinct(Table.SelectColumns(indexColumn, {"CUSTOMER"})), // Want to keep as table
            listOfRecords = Table.ToRecords(uniqueCustomers),
            firstOccurenceIndexes = List.Accumulate(listOfRecords, {}, (listState, currentItem) =>
                List.Combine({listState, {Table.PositionOf(indexColumn, currentItem, Occurrence.First, "CUSTOMER")}})
            )
        in
            firstOccurenceIndexes,
    expandSelectively =
        let
            toBoolean = Table.TransformColumns(indexColumn, {{"Temporary", each List.Contains(indexes, _), type logical}}),
            tableOrNull = Table.AddColumn(toBoolean, "toExpand", each if [Temporary] then [merged] else null),
            dropRedundantColumns = Table.RemoveColumns(tableOrNull, {"merged", "Temporary"}),
            expand = Table.ExpandTableColumn(dropRedundantColumns, "toExpand", {"FUNDING"})
        in
            expand
in
    expandSelectively

Если имена ваших таблиц и столбцов совпадают с моими (включая регистр символов)тогда вы можете просто скопировать и вставить весь код M выше в расширенный редактор и заставить его работать на вас.В противном случае, вам может понадобиться настроить при необходимости.

Это то, что я получаю, когда загружаю запрос на лист.

Query loaded

Возможно, есть лучшие (более эффективные) способы сделать это, но это то, что у меня есть сейчас.

0 голосов
/ 29 декабря 2018

Если вы не используете столбец идентификатора заказа, то я бы предложил выполнить Группировку по OrderTable перед объединением средств, чтобы вы вместо этого получили такую ​​таблицу:

Region  Customer  OrderCount  Funding
South   A         3           2394
South   B         2           4323
South   C         1           1234
South   D         2           3423

Таким образом, у вас нет смешанных уровней детализации, которые вызывают проблемы, как вы видите с итогами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...