Power Query - создание и заполнение столбцов Email1, Email2 ... в зависимости от наличия электронной почты в ячейках - PullRequest
0 голосов
/ 16 октября 2018

У меня есть таблица "электронных писем", подобная этой:

Username Email
john  john@gmail.com
john  john@stanford.edu
peter peter@gmail.com
...

, где один человек может иметь несколько электронных писем

Я хочу создать таблицу "людей", например:

Username Email1 Email2 Email3 ...Emailn
john     john@gmail.com john@stanford.edu *null* ... *null*
peter  peter@gmail.com *null* *null* ... *null*
...

Где n в Emailn - это количество писем человека, который имеет максимальное количество писем всех пользователей.

Как этого добиться в Power Query?

Я понимаю, что вы можете сводить таблицы и делать такие вещи, как Количество сообщений электронной почты, Максимальное количество сообщений электронной почты и т. Д. Но я не могу понять логику для построения приведенной выше таблицы.

1 Ответ

0 голосов
/ 16 октября 2018

Сначала загрузите таблицу в Query-редакторе.Затем сгруппируйте (Transform-tab) [Имя пользователя].Для операции выберите Все строки.Например:

enter image description here

Затем добавьте пользовательский столбец для преобразования столбца [Mail] каждой таблицы в список.

enter image description here

Добавьте еще один пользовательский столбец, объединяющий значения в каждом списке, в одно строковое значение, используя "|"разделитель.

enter image description here

Затем разделите столбец [Mail] по разделителю "|"(используйте разделенную колонку на главной вкладке).Наконец, удалите столбцы [mailsTable] и [mailsList].

Результат (в редакторе Power Query) выглядит следующим образом:

enter image description here

И это тот сценарий, который указан в расширенном редакторе.

let
    Source = Excel.CurrentWorkbook(){[Name="table"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Username", type text}, {"Mail", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Username"}, {{"mailsTable", each _, type table}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "mailsList", each Table.Column([mailsTable],"Mail")),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Mail", each Text.Combine([mailsList],"|")),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Added Custom1", "Mail", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"Mail.1", "Mail.2", "Mail.3", "Mail.4", "Mail.5"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Mail.1", type text}, {"Mail.2", type text}, {"Mail.3", type text}, {"Mail.4", type text}, {"Mail.5", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"mailsTable", "mailsList"})
in
    #"Removed Columns"
...