Excel的PowerQuery如何使用IN函数,原来这么方便!

在DAX中有个IN运算符非常好用,之前介绍过它的用法,参考

一文掌握Power BI中的IN运算符

有很多人问如何在PowerQuery中使用IN,其实PowerQuery中并没有这个运算符,不过也有相应的函数可以实现类似的功能。

本文以筛选下面这个表格为例来介绍一下在PowerQuery中是如何实现的。

excel的powerquery,excel的powerquery获取数据报错

假如需要筛选客户名称是"吴雷"、"孙静"、"林永"的数据,最简便的做法,可以直接使用筛选功能。

excel的powerquery,excel的powerquery获取数据报错

但是当需要筛选的数据比较多时,这样手动一个个勾选也不方便,那么还可以利用M函数实现。

需要插入一个步骤(右键最后一个步骤,点击“插入步骤后”):

excel的powerquery,excel的powerquery获取数据报错

然后在上面编辑栏输入:

= Table.SelectRows(

更改的类型,

each List.Contains({"吴雷","孙静","林永"},[客户])

)

excel的powerquery,excel的powerquery获取数据报错

这样就可以不再手动勾选,而是利用M实现筛选,其中用到的M函数是List.Contains,用来判断某个值(第2个参数)是否在列表中(第1个参数),如果在,返回true,然后通过 Table.SelectRows来返回对应的行。

上面的做法虽然可以实现,但是如果筛选的名称很多,都这样一个个列出来组成列表依然不够灵活。

对于这种情况,更常见的是有个筛选的条件表,把这个条件表导入进来:

excel的powerquery,excel的powerquery获取数据报错

对于这个表,先将它变成一个list列表,右键该列,点击“深化”:

excel的powerquery,excel的powerquery获取数据报错

然后就变成了下面这样的列表(list),这个列表的名称命名为“条件表”,

excel的powerquery,excel的powerquery获取数据报错

有了这个条件表,可以直接更改上面的M函数:

= Table.SelectRows(

更改的类型,

each List.Contains(条件表,[客户])

)

同样可以实现筛选的需求。

excel的powerquery,excel的powerquery获取数据报错

之后如果筛选范围有改动,只需要更改条件表就可以了。

以上List.Contains的做法,是不是和IN类似呢?

如果是用DAX来实现上述需求,可以直接这样来做,新建表:

表 = FILTER('示例表', '示例表'[客户] IN '条件表' )

excel的powerquery,excel的powerquery获取数据报错

更多干货

「PowerBI星球」内容合集(2022版)