Power Query中基于多条件添加条件列的技术需求咨询
Power Query中基于多条件添加条件列的技术需求咨询
嗨,我来帮你搞定这个Power Query的需求~先把你的核心诉求再理一遍,确保没理解错:
- 你的表格里,原材料可能同时出现在
TopMaterial和Component列 - 空行代表没有组件(比如是服务类条目)
- 你需要让所有所属Calc No.下存在TopMaterial与Component同名的行的新列值为空——也就是只要某个Calc No.下有任意一行的TopMaterial和Component是一样的,那这个Calc No.下所有行的新列都要设为空。
接下来咱们分步骤实现,操作都在Power Query编辑器里完成:
步骤1:标记同名行
先添加一个临时自定义列,用来标记当前行的TopMaterial和Component是否相等。
点击添加列→自定义列,输入公式:
= [TopMaterial] = [Component]
把这个列命名为IsSame,它会返回true(同名)或false(不同名),空行因为Component是null,所以会返回false,刚好符合你的场景。
步骤2:提取需要排除的Calc No.
接下来要找出所有包含同名行的Calc No.,把它们存成一个列表:
- 点击
转换→分组依据,设置参数:- 分组依据:
Calc No. - 新列名:
HasSamePair - 操作:
任意行 - 列:
IsSame
- 分组依据:
- 分组完成后,筛选出
HasSamePair = true的行,只保留Calc No.列 - 把这列转成列表:选中
Calc No.列,点击转换→到列表,把这个列表命名为ExcludedCalcNos(可以在查询管理器里修改名称)
步骤3:生成目标新列
最后添加你需要的新列,判断当前行的Calc No.是否在排除列表里,是的话就设为空,否则可以按需求填充内容:
点击添加列→自定义列,输入公式:
= if List.Contains(ExcludedCalcNos, [Calc No.]) then null else "这里填你需要的非空内容"
比如你如果想保留正常的组件关联信息,就把"这里填你需要的非空内容"替换成对应的列值(比如[Component]或者其他你需要的内容)。
如果觉得中间的临时列(IsSame、分组后的表)看着麻烦,也可以把这些逻辑嵌套成一个公式,不过分步操作更直观,方便你调试和修改~
备注:内容来源于stack exchange,提问作者user21251590




