本期内容接着给大家讲解一个关于Power Query的案例来学习一下。

案例


原始的数据源如下图所示,每个品名都对应两行数据。



将上面的数据转化为下面的数据:



解题思路


先对品名进行分组,即每两行分为一组,然后将每一组的两行转化为两组。可以使用的函数有Table.Group函数以及Table.ToRows以及Table.FromColumns。


解题步骤


Step-01 先将数据加载至Power Query中。



Step-02 对品名列进行分组。可以使用Table.Group函数,第2个参数是分组的依据,第3个参数是分组后的列后以及元素(在下一步的操作中说明),第4个参数是0表示局部分组,第5个参数是一个函数,即function,是对第二个参数分组依据进行判断,是否为文本,如B1,下面是null,那么与BI分为一组,依次类推。



Step-03 接着对Table.Group的第三个参数,即{"n",each _}这部分进行转换,先先table转换为rows,可以使用Table.ToRows函数。即结果如下:



Step-04 接着对上面转化的rows再转成表,这里是由行转化成表的过程,使用Table.FromColumns,转化成表的时候该函数的第二个参数要赋值一个标题,使用list的类型。即:



Step-05 从上面的图中可以发现。每个table里面的第一行是不需要的,可以删除,使用Table..Skip函数。如果第二个参数省略的话表示只删除第一行的内容,即:



Step-06 从至此就可以将n列展开了,如下图所示:



最后的结果如文章开始的结果所示,将结果加载至Excel即可。

完整的代码如下:

let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 转化 = Table.Group(源 ,"品名" ,{ "n" ,each Table.Skip( Table.FromColumns( Table.ToRows(_),{"类型","数量"}) ) } ,0 ,(x,y)=>Number.From(y is text) ), 展开 = Table.ExpandTableColumn(转化, "n", {"类型", "数量"}) in 展开