本期内容旨在通过不同的方法来学习excel Power Query中的M语言。但是在实际应用中按照实际的需求选择相应的便捷的方法。
上一期的文章给大家推送了分类小计的方法。还没有学习的小伙伴可以单击下面的链接继续学习:从Excel到PQ:分类汇总求平均值
今天给大家介绍另外一种应用案例,将下面的数据每7行为一组插入小计,对阅读量求平均值。
结果如下图所示:
今天同样地给大家讲三个思路来学习Power Query.将数据上载到Excel Power Query编辑器中。
方法思路1:使用Table.Range函数结合List.Transform函数将数据源拆分成list,然后通过构建table的方法将小计表与分组的每个table进行连接。 具体代码如下:(向右滑动可查看代码)
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改 = Table.TransformColumnTypes(源,{"发布时间",type date}),
转化 = Table.Combine(
List.Transform({0..Number.RoundUp(Table.RowCount(更改)/7)-1},(x)=>
[
a= Table.Range(更改,x*7,7),
b=a&#table(Table.ColumnNames(更改),
{
{"周平均阅读量",null,Number.Round(List.Average(a[阅读量]))}
}
)
]
[b]
)
)
in
转化
方法思路2:与方法1的思路一样,同样使用Table.Range与List.Transform函数对数据源进行拆分后遍历每个List中的table,但与上面不同的是这个思路中使用是在构建的REcord中再次构建一个Table,然后再将需要的连接后的Table深化出来。最后进行合并。具体代码如下:(向右可滑动查看)
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改 = Table.TransformColumnTypes(源,{"发布时间", type date}),
转化 = Table.Combine(
List.Transform({0..Number.RoundUp(Table.RowCount(更改)/7-1)},(x)=>
Table.FromRows(
[
a=Table.Range(更改,x*7,7),
b=Table.ToRows(a)&
{
{"周平均阅读量",null,Number.Round(List.Average(a[阅读量]))}
}
]
[b],
Table.ColumnNames(更改)
)
)
)
in
转化
方法思路3:此方法与上面的两个方法相比更加地简单,使用List.Transform与TAble.Split函数将数据源拆分后进行遍历,对拆分的每个table连接一个构建的小计的table。最后将list进行合并。具体的代码如下:(向右滑动查看)
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改 = Table.TransformColumnTypes(源,{"发布时间", type date}),
转化 = Table.Combine(
List.Transform(
Table.Split(更改,7),(x)=>x&#table(Table.ColumnNames(更改),
{
{"周平均值阅读量",null,Number.Round(List.Average(x[阅读量]))}
}
)
)
)
in
转化
当然上面的例子中的每7行也可以做成一个自定义参数,根据自己的需要去输入值即可。