如何在Excel/Power Query中提取各零件最低装配层级数据?
在Power Query中保留零件最低装配层级行的解决方案
针对你的需求——每个零件仅保留其对应最低装配层级的行,以下是Power Query的具体实现步骤,同时也提供Excel公式辅助思路:
Power Query 操作步骤
1. 导入数据到Power Query
选中你的装配结构数据区域,点击Excel「数据」选项卡 → 「从表格/区域」,将数据导入Power Query编辑器(确保数据首行是列标题,比如Level1到Level6)。
2. 添加自定义列标记最低层级行
我们需要识别出每行中零件编码所在列是该行最右侧非空列的行(这一行就是该零件的最低层级行)。
点击「添加列」→「自定义列」,输入以下M语言公式:
= let // 定义你的层级列名,根据实际情况调整 LevelColumns = {"Level1", "Level2", "Level3", "Level4", "Level5", "Level6"}, // 获取当前行各层级列的非空值列表 NonEmptyValues = List.RemoveNulls(List.Transform(LevelColumns, each Record.Field(_, _))), // 取该行最后一个非空的零件编码 LastPart = List.Last(NonEmptyValues), // 找到该零件在层级列中的位置,判断是否是最后一个非空列的位置 PartColumnPosition = List.PositionOf(LevelColumns, Text.From(LastPart)), IsLowestLevel = PartColumnPosition = List.Count(NonEmptyValues) - 1 in IsLowestLevel
如果你的层级列名不同,直接修改LevelColumns里的内容即可;如果数据没有空值问题,可简化公式。
3. 筛选并整理数据
- 在新生成的自定义列中,筛选值为
true的行; - 删除这个自定义列,剩下的就是每个零件最低层级的行。
简化方案(针对固定层级结构)
如果你的层级列固定是Level1到Level6,也可以用更直接的方式:
- 添加自定义列,提取每行最后一个非空的零件编码:
= List.Last(List.RemoveNulls({[Level1],[Level2],[Level3],[Level4],[Level5],[Level6]}))
- 对这个自定义列执行「删除重复项」操作——因为每个零件的最低层级行只会出现一次,重复项都是该零件作为上层子件的行,删除后即可得到目标结果。
Excel 公式辅助思路(适合小数据集)
如果数据量不大,也可以用Excel公式标记最低层级行:
假设层级列是A到F(对应Level1到Level6),在G2单元格输入:
=IF(COUNTA(A2:F2)=MATCH(TRUE,INDEX(A2:F2<>"",0),0),"最低层级","")
下拉填充后,筛选G列为「最低层级」的行即可。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

