电源查询 - 根据单元格中电子邮件的出现创建和填充列Email1,Email2 ....

Lun*_*Lun 1 excel pivot-table powerquery

我有一个像这样的"电子邮件"表:

Username Email
john  john@gmail.com
john  john@stanford.edu
peter peter@gmail.com
...
Run Code Online (Sandbox Code Playgroud)

一个人可以有多个电子邮件

我想构建一个像这样的"people"表:

Username Email1 Email2 Email3 ...Emailn
john     john@gmail.com john@stanford.edu *null* ... *null*
peter  peter@gmail.com *null* *null* ... *null*
...
Run Code Online (Sandbox Code Playgroud)

其中,Emailn中的n是具有所有用户的最大电子邮件数的人的电子邮件数.

如何在Power Query中实现此目的?

我知道你可以转动表格并做一些事情,如电子邮件数量,电子邮件数量等等.但我无法弄清楚构建上表的逻辑.

Mar*_*Vos 5

首先在查询编辑器中加载表.然后按(变换 - 选项卡)[用户名]分组.对于操作,选择所有行.像这样:

在此输入图像描述

然后添加自定义列以将每个表的[Mail]列转换为列表.

在此输入图像描述

添加另一个自定义列,使用"|"将每个列表中的值连接到一个stringvalue 分隔符.

在此输入图像描述

然后用分隔符分割[Mail]列"|" (使用Home-tab上的Split Column).最后删除[mailsTable]和[mailsList]列.

结果(在Power Query Editor中)如下所示:

在此输入图像描述

这是高级编辑器中列出的脚本.

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"
Run Code Online (Sandbox Code Playgroud)