EXCEL|Power Query的高级应用9-横向排序在Excel中,对数据进行排序时,只能将整个数据区域按一定的规则进行排序,如果要对每一行数据进行单独排序,就不大行。但我们可以使用Power Query的区域转换排序的方法,对指定区域中的每行数据进行独立排序。案例如下:将以下左图所示数据顺序,转换为右图所示顺序(每一行都按照字母的先后顺序进行了排序)。1)将左表导入到查询编辑器,在导入前, 在【从表】对话框中注意取消选择【表包含标题】选项,操作如下图所示。2)将每行数据装入list,在list内部进行排序,然后再转换成表格。这些步骤只能在【高级编辑器】中编写公式来完成。具体公式如下图所示:这个看起来比较轻松,咱们来返回到【高级编辑器】里,逐步来解析下公式。1. 转到行list=Table.ToRows(源)此函数将表格中的每行数据逐行转换成list,单击任何一个list可以查看预览效果,如下图所示。2. 排序list公式为:=List.Transform(转到行list,each List.Sort(_))将数据从表格转换到list之后,对步骤【转到行list】中的每个list内存数据进行排序操作,效果如下图所示。咱们来重点拆解下这个嵌套函数:
each List.Sort(_)
List.Sort( ):排序函数;_:当前遍历到的子列表;
List.Transform 会循环遍历每一个子列表,逐个处理。
3. 从list转到表公式为:=Table.FromRows(排序list)将排序后的list转换到表,每个list展开到一行中,获得最后的结果,如下图所示。变化的就2步:转到列list,列=Columns;从list转到表:这里的list指列不指行。(2)用同样的方法,还可以针对单元格内的分割内容进行排序。如下图,将左表每个单元格内的内容按照逗号进行分割排序,排序后用连接符号进行连接。这里是3个嵌套函数的使用,从内到外依次是:按照逗号拆分(Split)—拆分后排序(Sort)—按照连接符号进行连接(Combine)。看起来有点复杂, 但是拆解开看就还好。