乐于分享
好东西不私藏

EXCEL|Power Query的高级应用9-横向排序

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展开到一行中,获得最后的结果,如下图所示。
以下为拓展:
(1)将左表按列排序成右表的结果:
在高级编辑器里将公式改成以下内容即可:
变化的就2步:转到列list,列=Columns;从list转到表:这里的list指列不指行。
(2)用同样的方法,还可以针对单元格内的分割内容进行排序。如下图,将左表每个单元格内的内容按照逗号进行分割排序,排序后用连接符号进行连接。
在高级编辑器里将公式改成以下内容:
结果如下图所示。
这里是3个嵌套函数的使用,从内到外依次是:按照逗号拆分(Split)—拆分后排序(Sort)—按照连接符号进行连接(Combine)。看起来有点复杂, 但是拆解开看就还好。
好了,今天内容就这些了。