PowerQuery嵌套筛选问题求助:按指定条件过滤数据集
PowerQuery 嵌套筛选的M代码修正
先把筛选规则拆明白:
- 直接排除年龄是9或10的孩子
- 年龄7岁的孩子里,只留班级是A或B的
- 其他年龄(比如6、8岁这类)的孩子,只要不是9/10都保留(如果这是你要的效果;要是你只想要7岁A/B的,直接看后面的简化版)
你之前代码大概率踩的坑
多数情况是逻辑运算符用错了:
- 没给「班级是A或B」的条件加括号,导致and/or优先级混乱,比如写成
[年龄]=7 and [班级]="A" or [班级]="B",结果变成“7岁且A班,或者所有B班”,完全不符合要求 - 没把「排除9/10」和「7岁A/B保留」的逻辑组合对,顾此失彼
修正后的M代码
假设你的数据源表叫源,下面两种写法都能用:
写法一:清晰的组合逻辑
= Table.SelectRows( 源, each ([年龄] <> 9 and [年龄] <> 10) and ([年龄] <> 7 or ([年龄] = 7 and ([班级] = "A" or [班级] = "B"))) )
写法二:更简洁的语法
用in来简化多值判断,代码更易读:
= Table.SelectRows( 源, each [年龄] not in {9, 10} and (if [年龄] = 7 then [班级] in {"A", "B"} else true) )
如果你只想要7岁A/B的记录
要是其他年龄哪怕不是9/10也不想留,直接用这个极简版:
= Table.SelectRows( 源, each [年龄] =7 and [班级] in {"A", "B"} )
怎么验证对不对
- 先查9岁、10岁的记录是不是全没了
- 再看7岁的孩子里,只有A、B班的留下来了,其他班的7岁孩子被筛掉了
- 要是需要保留其他年龄,确认6、8岁这类记录还在
内容的提问来源于stack exchange,提问作者Chandler Shores
相关产品推荐
相关产品推荐

