Power Query中如何将XML重复子元素转为动态命名列?
完全可以实现这个需求
下面是具体的操作方案,分为可视化界面操作和M代码两种方式,适合新手快速上手:
方式一:可视化界面操作
导入XML数据
打开Excel/Power BI,点击「数据」>「获取数据」>「自文件」>「自XML」,选中你的XML文件导入。导入后会看到root表,点击entries列右侧的展开箭头,选择「展开到新行」,得到每条entry对应的行。提取ID列
点击entry列右侧的展开箭头,勾选otherData和images字段展开。接着展开otherData列,只勾选id字段,保留id列。生成动态图片列
- 点击
images列右侧的展开箭头,选择「展开到新行」,得到每个image对应的行; - 点击「添加列」>「索引列」>「从1开始」,将生成的索引列重命名为
图片序号,手动修改值为img1、img2格式; - 选中
id和图片序号列,点击「转换」>「透视列」,值列选择url,即可自动生成img1、img2...等动态列,图片不足的行对应列自动填充空值。
- 点击
方式二:直接使用M代码
如果你想快速实现,可以在Power Query编辑器中打开「高级编辑器」,替换现有代码为以下内容(记得替换XML文件的完整路径):
let Source = Xml.Tables(File.Contents("你的XML文件完整路径")), 展开entries = Table.ExpandTableColumn(Source, "entries", {"entry"}, {"entry"}), 展开entry字段 = Table.ExpandTableColumn(展开entries, "entry", {"otherData", "images"}, {"otherData", "images"}), 提取ID = Table.ExpandTableColumn(展开entry字段, "otherData", {"id"}, {"id"}), 提取图片URL列表 = Table.AddColumn(提取ID, "图片URL", each Table.ExpandTableColumn([images], "image", {"url"}, {"url"})[url]), 生成带序号的记录 = Table.TransformColumns(提取图片URL列表, {{"图片URL", each let 序号列表 = List.Transform({1..List.Count(_)}, each "img"&Text.From(_)), 记录 = Record.FromList(_, 序号列表) in record}}), 展开动态图片列 = Table.ExpandRecordColumn(生成带序号的记录, "图片URL", List.Distinct(List.Combine(Table.Column(生成带序号的记录, "图片URL") |> List.Transform(Record.FieldNames)))), 移除冗余列 = Table.RemoveColumns(展开动态图片列,{"images"}) in 移除冗余列
执行后就能得到你想要的表格:包含id列,以及根据图片数量动态生成的img1、img2...imgN列,图片不足的行对应列显示为空。
内容的提问来源于stack exchange,提问作者bilak
相关产品推荐
相关产品推荐

