由于最近经常做一些简单的Excel处理,虽然可以写python来操作excel文件,但是一些简单的操作直接在Excel中处理会更方便,不需要事先安装python。
这次的需求是对于表中的每一行记录进行变换,生成一个list
,之后再将这个list
oflist
展平未一个list
。表示为伪代码如下
function transfrom_table(table)
result = []
for each row of table
result.append(transform(row))
return result.flattened()
function transform(row)
result = []
for ...
result.append(...)
return result
实现
循环处理
由于Power Query M类似一个函数式语言,并没有常见的for...loop
,所以就需要使用递归来代替循环了。
展平一个list of list
这里我们可以调用List.Combine。
伪代码
// 根据参数生成一个list
let
transform = (p0...) =>
if done then {}
else
// 将当前的计算结果和剩余的计算结果合并返回
... & @transform(...)
in
transform
// 变换table中每一行并展平为一个list,最后转换为table
let
Source = ... // 获取table
Temp = List.Combine(Table.Transform(Source, each transform(...)))
Result = Table.FromList(Temp)
in
Result