如何使用PowerQuery创建主行与子行处理漏洞扫描导出数据
该需求完全可以通过Power Query实现,具体操作流程如下:
- 数据导入:将你的漏洞扫描源数据导入Excel后,选中数据区域,点击「数据」选项卡→「从表格/区域」,进入Power Query编辑器。
- 分组聚合:按住Ctrl选中
CVE和Description两列,右键选择「分组依据」,配置如下:- 新列名:
子行集合 - 操作:
所有行
确认后会得到每个唯一CVE+描述对应一组子行的聚合表。
- 新列名:
- 拼接主行:点击「添加列」选项卡→「自定义列」,输入如下公式:
这一步会为每个CVE生成一行Team、Locations为空的主行,再把对应子行拼接在主行后面。= Table.FromRecords({[CVE = [CVE], Description = [Description], Team = null, Locations = null]}) & [子行集合] - 展开数据:点击自定义列右上角的展开按钮,取消勾选「使用原始列名作为前缀」,确认展开后,删除不需要的
子行集合列,调整列顺序即可得到你需要的输出结构。
完整示例M代码
你可以直接替换数据源部分导入自己的表使用:
let // 替换这里的Source为你自己的数据源导入步骤 Source = Excel.CurrentWorkbook(){[Name="源数据表"]}[Content], 分组 = Table.Group(Source, {"CVE", "Description"}, {{"子行集合", each _, type table [CVE=nullable text, Description=nullable text, Team=nullable text, Locations=nullable text]}}), 添加主行 = Table.AddColumn(分组, "合并数据", each Table.FromRecords({[CVE = [CVE], Description = [Description], Team = null, Locations = null]}) & [子行集合]), 展开合并数据 = Table.ExpandTableColumn(添加主行, "合并数据", {"Team", "Locations"}, {"Team", "Locations"}), 清理列 = Table.RemoveColumns(展开合并数据, {"子行集合"}), 调整列顺序 = Table.ReorderColumns(清理列,{"CVE", "Description", "Team", "Locations"}) in 调整列顺序
如果你的源数据还有风险等级等其他基础字段,只需要把这些字段一起加入分组依据的列,同时修改自定义列的记录构造部分,加入对应的字段赋值即可,逻辑完全通用。
内容的提问来源于stack exchange,提问作者Cbohn
相关产品推荐
相关产品推荐

