供参考,用List.Accumulate。这有点类似累计求和的逆过程。- let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
替换 = Table.ReplaceValue(源,null,0,Replacer.ReplaceValue,{"行驶里程表数"}), //把行驶里程表数这一列中的null替换为0
变形 = let L = Table.ToRecords(替换),
f = (x,y)=>List.PositionOf(x,y,2,each [牌照号] )
in List.Accumulate(L , { {},{} },
(s,c)=>{ s{0}&{c}, //相当于一个动态引用的区域,类似于工作表函数中的A$1:A1
s{1}&{ c & [ l = f(L,c), //计算当前车牌号在源表牌照号这一列中出现的所有位置
p = List.Count(f(s{0},c)),//计算当前车牌号在当前记录之前出现的次数
i =[ 里程数= if p=0 then null
else L{l{p}}[行驶里程表数]-L{l{p-1}}[行驶里程表数] ]
] [i] } } ){1},
结果 = Table.FromRecords(变形)
in
结果
复制代码
|