Страницы: 1
RSS
Объединение строк в одну по уникальным значениям в столбце, Объеденение дубликатов в столбце, с последующим сопоставлением строк
 
Здравствуйте уважаемые форумчане!

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

Сам вопрос: Как можно сформировать итоговую версию документа, в которой все дубликаты ячеек столбца D - будут объеденены в одно уникальное значение,а в столбцах с E по N подтянется самая длинная серия ответов пользователей (самая длинная по итогу строка)?

P.S. Заранее извиняюсь, если данная тема уже была, но я не смог сформулировать свою мысль в поиске правильно.
P.S.S. К своему сожалению, совершенно не разбираюсь в макросах.
 
Код
Исходник!P2:Y35      =ЕСЛИ($A3<>"";ЕСЛИ(ЕПУСТО(E2);"";E2);ЕСЛИ(E2="";ЕСЛИ(ЕПУСТО(P3);"";P3);E2))
Итог!A2:D6           =ВПР(СТРОКА(1:1);Исходник!$A:$Y;СТОЛБЕЦ();0)
Итог!E2:N6           =ВПР(СТРОКА(1:1);Исходник!$A:$Y;СТОЛБЕЦ()+11;0)
 
V Z, исходники Вы не предоставили, поэтому Ваш запрос дополнить не могу. В рабочем файле можете сразу так же обрабатывать Ваш запрос. В Record.RemoveFields в шаге group можете добавить и другие поля, которые Вам не нужны в результате.
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  addAnswersCount = Table.AddColumn (
    src,
    "answersCount",
    ( r ) =>
      List.NonNullCount (
        Record.ToList ( Record.SelectFields ( r, List.Select ( Record.FieldNames ( r ), ( x ) => Text.End ( x, 6 ) = "вопрос" ) ) )
      )
  ),
  group = Table.Group (
    addAnswersCount,
    { "Имя пользователя" },
    { { "recs", ( x ) => Record.RemoveFields ( Table.Max ( x, "answersCount" ), "answersCount" ) } }
  ),
  toTable = Table.FromRecords ( group[recs] )
in
  toTable

upd: Вероятнее всего, для одинаковых пользователей поля, кроме вопросов, будут заполнены одинаково. Поэтому их количество в строке не повлияет на определение наибольшего количества ответов и код можно упростить:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  addAnswersCount = Table.AddColumn ( src, "answersCount", ( r ) => List.NonNullCount ( Record.ToList ( r ) ) ),
  group = Table.Group (
    addAnswersCount,
    { "Имя пользователя" },
    { { "recs", ( x ) => Record.RemoveFields ( Table.Max ( x, "answersCount" ), "answersCount" ) } }
  ),
  toTable = Table.FromRecords ( group[recs] )
in
  toTable
Изменено: surkenny - 17.01.2022 12:55:29
 
, , Спасибо Вам большое за помощь!
Страницы: 1
Наверх