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中实现此目的?
我知道你可以转动表格并做一些事情,如电子邮件数量,电子邮件数量等等.但我无法弄清楚构建上表的逻辑.
首先在查询编辑器中加载表.然后按(变换 - 选项卡)[用户名]分组.对于操作,选择所有行.像这样:
然后添加自定义列以将每个表的[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)
归档时间: |
|
查看次数: |
54 次 |
最近记录: |