用户权限数据转换为用户组列表(2/3) - Power Query

实例需求:如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限,现在需要创建新的AD用户组,并根据用户当前的权限,将这些用户添加到相应的组中。

当前数据集:

Safe UserName Read permissions RW permissions
Safe1 User1 Yes Yes
Safe1 User2 Yes No
Safe1 User3 Yes Yes
Safe1 User4 Yes No
Safe2 User1 Yes Yes
Safe2 User2 Yes No
Safe2 User3 Yes Yes
Safe2 User4 Yes No

整理后输出数据集:

Safe AD Group Userlist
Safe1 Safe1-ReadGroup User1,User2,User3,User4
Safe1 Safe1-RWGroup User1,User3
Safe2 Safe2-ReadGroup User1,User2,User3,User4
Safe2 Safe2-RWGroup User1,User3
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    AddedRG = Table.AddColumn(Source, "ReadGroup", each if [Read permissions] = "Yes" then [UserName] else null),
    AddedRWG = Table.AddColumn(AddedRG, "RWGroup", each if [RW permissions] = "Yes" then [UserName] else null),
    RemovedColumns = Table.RemoveColumns(AddedRWG,{"UserName", "Read permissions", "RW permissions"}),
    GroupedRG = Table.Group(RemovedColumns, {"Safe"}, {{"UserList", each Text.Combine([ReadGroup], ","), type text}}),
    GroupedRGCol =  Table.AddColumn(GroupedRG, "AD Group", each [Safe] & "-ReadGroup"),
    GroupedRWG = Table.Group(RemovedColumns, {"Safe"}, {{"UserList", each Text.Combine([RWGroup], ","), type text}}),
    GroupedRWGCol =  Table.AddColumn(GroupedRWG, "AD Group", each [Safe] & "-RWGroup"),
    AppendedTable = Table.Combine({GroupedRGCol, GroupedRWGCol}),
    Output = Table.ReorderColumns(AppendedTable,{"Safe", "AD Group", "UserList"})
in
    Output

【代码解析】
第2行代码加载Excel表Table1作为源数据。
第3行代码基于读取权限添加新列ReadGroup,用户名赋值,否则为空。
第4行代码基于写权限添加新列RWGroup,用户名赋值,否则为空。
第5行代码删除不需要的原始数据列。
第6行代码基于Safe列分组,生成读取权限用户列表。
第7行代码添加新列作为读取权限用户组名称。
第8行代码基于Safe列分组,生成写权限用户列表。
第9行代码添加新列作为写权限用户组名称。
第10行代码合并读取权限和写权限两个表。
第11行代码重新排列列顺序。
第13行代码输出最后的结果表。


小结:
可以利用Power Query的表处理能力,同样实现按权限分组的转换需求,使用Group和Combine可以方便地进行分组和合并。

你可能感兴趣的:(数据清洗,Power,Query,公式,数据清洗,数据整理,用户清单,合并数据,数据合并)