跟Excel里不一样,PQ空文本筛选不出来,为什么?
- 1 -
很多时候,数据里面会带一些空的内容,这时候,在做数据筛选的时候就要小心,因为空的内容在不同的情况下,它的处理(或计算)逻辑可能不太一样。
比如,现在在Excel里有这么一份数据,某个列里面有些空的内容:
这时候,如果要对这一列内容进行不包含“Power”内容的筛选:
你会看到,筛选出来的结果里包含了这项空的内容:
但是,如果是在Power Query里,你进行同样的筛选:
筛选条件仍然是不包含“Power”:
你会发现,得到的结果里面, 并不包括那个空的内容:
同时,我们看到生成的步骤公式里面,判断的条件是:not Text.Contains([姓名],"Power")。
既然不包含里没有,那包含里面是不是该有呢?我们把筛选条件从“不包含”改为“包含”:
得到的结果里面,仍然没有那个空的内容!
- 2 -
“不包含”里没有,“包含”里也没有,那到底算啥?
为什么?为什么?为什么?
从上面生成的筛选步骤的公式来看,我们知道,其中的关键在于筛选的条件:Text.Contains([姓名],"Power")。
既然这样,我们就可以直接对这些内容进行判断,看看其中到底发生了什么事。
在初始的内容(删除前面做的筛选步骤)基础上,添加“自定义列”,输入自定义列公式:
结果,对于空 (null) 的值,Text.Contains得到的结果是空 (null):
再添加个自定义列,加上not,即相当于做不包含筛选时的条件:not Text.Contains([姓名],"Power")
结果,对于空 (null) 的值,Text.Contains得到的结果仍然是空 (null)!
就是因为无论是包含还是不包含,判断条件的结果都是null,所以,筛选的结果里都不包含这个空内容 (null) 。
- 3 -
把问题搞清楚,解决起来就容易了。
既然问题出在null身上,我们就可以采用以下两种方法来进行处理。
1、增加筛选条件“或等于null”,即筛选的时候把带空的内容也筛选出来
2、把null替换为文本的空("")再做筛选,永远要记得,null和""是不一样的。
- 4 -
关于空值(null)的处理,我从多个大家常见的问题出发,写过了多篇文章,其中有Power Query的:
也有关于Power Pivot的:
实际上,很多不同的软件工具、编程语言等,对null值的处理方式都可能不太一样,甚至,很多软件的bug,也是因为对null值的处理不当也引起的,因此,最重要的是,学会在碰到空值的时候,怎么找到其对应的处理逻辑。
所以,为尽可能避免大家在后续学习使用过程中再走类似的弯路,我专门录制了一集关于空值处理的内容,发布如下,供大家快速学习、参考: