本期内容接着给大家讲解一个关于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
展开