Сводка различных данных в одну строку на основе выбора приоритета в Excel - PullRequest
1 голос
/ 05 мая 2020

Данные имеют повторяющиеся «Имена учетных записей» (от 1x до 30x) в крайнем левом столбце A (отсортированы по AZ). У каждого имени учетной записи есть «Область» (столбец B) и владелец / «Имя» (столбец C), которые являются постоянными для «имени учетной записи». «Расположение» (столбец D) может быть разным для каждого экземпляра «Имя учетной записи». «Статус» (столбец E) может быть разным для каждого экземпляра «Имя учетной записи» и не зависит от «расположения» (столбец D).

Например, в столбце A один и тот же банк («Название счета») указан 2 раза, а другой банк - 10 раз. «Статус» в столбце E для каждого банка может быть одинаковым каждый раз, когда банк указан в списке, или он может иметь разный «статус» для одного и того же банка.

Мне нужно просмотреть все позиции для одного и того же банка и выбрать «статус» для помещения в другую книгу на основе порядка выбора приоритета для «статуса». Мне нужно сделать то же самое для столбца «диспозиция».

Я считаю, что мне нужна какая-то функция l oop (?), Чтобы посмотреть в столбце A на неопределенное количество повторяющихся значений, а затем применить операторы IF, чтобы выбрать правильное расположение, а затем сделать то же самое для положение дел.

Обратите внимание, что я использовал эту формулу = ЕСЛИ (И (A3 = A2, E3 <> E2), E2 & "," & E3, E3), но это вызвало две проблемы; (1) сравнивал только 2 строки за раз и (2) мне было трудно применить формулу к полученному списку, чтобы выбрать правильный статус. Любые идеи?

Входные данные, желаемые результаты, порядок приоритета для статуса и размещения

Input data, desired results, priority order for status and disposition

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Ответ на мой собственный вопрос заключается в том, что заказы должны быть указаны в нижнем регистре.

0 голосов
/ 05 мая 2020

Используя Power Query,

  • Я создал два списка с диспозициями и статусом, перечисленными в порядке приоритета.
    • ввод этих двух списков выполняется вручную. Все остальное можно сделать из GUI
  • Затем я добавил два настраиваемых столбца с соответствующими рейтингами с помощью функции List.PositionOf.
  • Группа строки по Account Name и агрегирование по Minimum, что будет наивысшим приоритетом в каждом из списков статуса и диспозиций.
  • Используйте тип поиска, чтобы вспомнить фактическое имя статуса и диспозиции.
    • Обратите внимание, что сравнения списков будут чувствительны к регистру, поэтому я немного изменил регистр списков, думая, что если они вводятся вручную, могут быть некоторые различия. Если это не так, вы можете это изменить.

M-код

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

        dispOrder = {"pending","upgrade underway","upgrade required","proposal created","waiting","no action"},
        statusOrder = {"upgrade planned","waiting on customer","in progress","complete"},

    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Account Name", type text}, {"Area", type text}, {"Name", type text}, {"Disposition", type text}, {"Status", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Text.Lower([Disposition])),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "dispOrder", each List.PositionOf(dispOrder,[Custom])),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Custom.1", each Text.Lower([Status])),
    #"Added Custom3" = Table.AddColumn(#"Added Custom2", "statusOrder", each List.PositionOf(statusOrder,[Custom.1])),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom3",{"Custom", "Custom.1"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Account Name"}, {{"StatusRank", each List.Min([statusOrder]), type number}, {"DispRank", each List.Min([dispOrder]), type number}}),
    #"Added Custom4" = Table.AddColumn(#"Grouped Rows", "Disposition", each Text.Proper(dispOrder{[DispRank]})),
    #"Added Custom5" = Table.AddColumn(#"Added Custom4", "Status", each Text.Proper(statusOrder{[StatusRank]})),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom5",{"StatusRank", "DispRank"})
in
    #"Removed Columns1"

введите описание изображения здесь

Одно из предположений в приведенном выше коде состоит в том, что каждая позиция для Диспозиции и Статус имеет действительную запись.

В своих комментариях вы указываете, что у вас может быть элемент, который пусто. Если пустое поле должно иметь "самый низкий" приоритет, вам просто нужно добавить null в массивы ...Order.

В дополнение к этому, если вы хотите проверить недопустимые записи (т. Е. Записи, которые не являются пустыми, но их нет в списке приоритетов, вы можете использовать try … otherwise …

Существует множество возможных вариантов того, что делать с недопустимыми и / или пустыми записями, но это должно дать вам некоторое представление об обработке ошибок .

Например:


… 
        dispOrder = {"pending","upgrade underway","upgrade required","proposal created","waiting","no action", null},
        statusOrder = {"upgrade planned","waiting on customer","in progress","complete", null},

…

#"Added Custom4" = Table.AddColumn(#"Grouped Rows", "Disposition", each try Text.Proper(dispOrder{[DispRank]}) otherwise "INVALID ENTRY"),
    #"Added Custom5" = Table.AddColumn(#"Added Custom4", "Status", each try Text.Proper(statusOrder{[StatusRank]}) otherwise "INVALID ENTRY"),

… 

...