Power Query M函数List.RemoveNulls与List.RemoveMatchingItems
将一组数据删除空值后重新排列:
在Excel中有F5定位空值,然后删除空值,单元格内容上移这样的操做,如果这个工作放到Power Query中应该如何来操作呢?
我们知道有List.RemoveNulls的函数,以及List.RemoveMatchingItems函数,我们就用这两个函数分别做空值删除的操作:
List.RemoveNulls
使用List.RemoveNulls函数的前提是要有null才能被清除,那么就要有一个替换过程,因为从Excel复制过来的数据中没有null只有空白:
第一步:需要一个函数用来做空值替换null的操作:
Table.ToColumns(Table.ReplaceValue(T,"",null,Replacer.ReplaceValue,Table.ColumnNames(T)))
Table.ReplaceValue函数就是这个功能,这个函数需要五个参数:
- T:源表
- “”:表示源表中的空白
- null:是我们要替换后的内容
- Replacer.ReplaceValue:替换函数,null要用Value
- Table.ColumnNames(T):是列名称的列表,这里我们要全部替换,所以就直接取全部的列名称列表。
第二步:删除null
= List.Transform(TC,(X)=>List.RemoveNulls(X))
在TC替换的基础上,用循环删除null
第三步:还原表格结构
我们在第一步时用的Table.ToColumns函数把表转换成列的列表,这时候再转换回来
= Table.FromColumns(RNULL)
使用Table.FromColumns函数从列的列表转换成表格。
最后合成一个大公式:
= Table.FromColumns(
List.Transform(Table.ToColumns(Table.ReplaceValue(T,"",null,Replacer.ReplaceValue,Table.ColumnNames(T))),(X)=>List.RemoveNulls(X)))
这是使用List.RemoveNulls函数来做的一个公式
List.RemoveMatchingItems
List.RemoveMatchingItems函数就要简单很多了,直接做空值删除,少了一个替换过程
第一步:按列提取列表
= Table.ToColumns(T)
很简单使用Table.ToColumns函数直接提取列表
第二步:删除空值
= List.Transform(TC1,(X)=>List.RemoveMatchingItems(X,{""}))
List.RemoveMatchingItems函数有三个参数,我们这里就用前两个参数就可以了:
- 第一个参数:源列表
- 第二个参数:要替换的值的列表
第三步:合成表格
= Table.FromColumns(RBLANK)
最后组合公式:
= Table.FromColumns(
List.Transform(Table.ToColumns(T),(X)=>List.RemoveMatchingItems(X,{""})))
就像在Excel中一样,我们选用不同的函数,同样能够解决同一个问题,主要看我们对问题的理解程度,以及对函数的熟悉程度,但是无论公式长短,最终能够解决问题才是关键,了解更多的函数,解题时的思路也就更开阔一些,更能找到简便的方法。