最开始看到“删除列”和“删除其他列”,觉得Microsoft多此一举,这两个命令其实差不多。但仔细用过之后,真心觉得这两个命令用好了就是如虎添翼,用差了就是噩梦。
“删除列”类似于Windows的“选择”,只不过这个命令选择了列并立即删除;“删除其他列”相当于反选命令,只不过反选之后立即删除。
这两个命令可以理解为一个完整的集合,只不过是互为补集。如果我只需要表格中很少的列,要删除其他所有列,理所当然要选择“删除其他列”;如果我只有个别列需要删除,那么选择“删除列”就好了。
如果深入PowerQuery代码,可以更深理解两个命令的差别:
删除的列 = Table.RemoveColumns(替换的值6,{"单位"}),
删除的其他列 = Table.SelectColumns(删除的列,{"联系方式"})
可以看到,“删除列”的代码是Table.RemoveColumns,“删除其他列”的命令是Table.SelectColumns,所以,“删除其他列”其实也就是选中并保留列(没选中的列就删除了)。
有意思的是PowerQuery在查询编辑器设置了一个专门的“选择列”按钮,点击它之后,会弹出一个列选择器,通过勾选来选择要保留的列,那些未被勾选的列则被删除。这个命令的效果其实和“删除其他列”的效果是一模一样的;如果查看代码,也都是用的Table.SelectColumns这个函数。所以,实现同一个操作可以有不同的路径。
啰嗦了这么多,现在该到具体应用场景了:
假设我们忧一个搜集信息的表格,分发给客户去填写;客户很配合,不仅提供了我们给的表格中的信息,还新增了其他信息(字段)到表格中;不同的客户增加的信息(字段)不同。
当我们搜集了这些表格,并汇总成一个单一的表格的时候,我们有两种办法保留我们最开始需要的信息:选中那些不属于原始表格的列,然后选择“删除列”;选择我们原始表格里边的那些列,然后选择“删除其他列”。这两种方法都会形成一个PowerQuery模板。我们给这两种模板分别取名为模板A和模板B。
我们刚刚做好模板,又有客户提交了表格来;或者,业务部门把原始信息表格发给了新的客户,要求他们填写。当我们把新数据分别导入到两个模板,会发生什么?
当把新数据导入模板A,刷新,系统很快提示,找不到xx列,找不到xxx列,找不到xxx列;于是,我们不得不重新编辑PowerQuery代码,重新选择那些要删除的列。每当有新数据进来,我们都要做一次这样的操作。烦不烦?
当把新数据导入模板B,刷新,很快,结果就出来了,没有任何错误提示,一切都非常非常完美。爽不爽?
当我们需要把模板A和B提供给其他完全不懂PowerQuery代码的其他小伙伴(假设我们已经用Parameters Table简化了小伙伴们的输入),我们会选择哪个模板?很明显是模板B!
所以,小命令有大用途。