Forum Discussion
Dicken
Post Prodigy
4 months agoList.Generate, make behave like Accumulate or XL REDUCE
Hi, my staring point was this, i wanted to accumute fieds to a record; so i used; let
f = {List.Sum, List.Max, List.Average},
head = {"sum", "max", "avg"},
pos = {0, 1, 2},
...
- 4 months ago
and try this
let f = {List.Sum,List.Max, List.Average}, head = { "sum", "max", "avg"}, val = {2,3,1,5,2,1}, to= List.Generate(()=> [ i = 0, j = Record.AddField( [],head {i}, f{i}(val) ) ], (x)=> x[i] <= List.Count( head)-1, (x)=> [i = x[i] + 1, j = Record.AddField( [],head {i},f{i}(val)) ], (x)=>x[j]) in Record.Combine( to)
Ahmedx
Super User
4 months agoTo get such a result, you need to use neither List.Accumulate nor List.Generate
let
f = (x)=> {List.Sum(x), List.Max(x), List.Average(x)},
head = {"sum", "max", "avg"},
val = {2, 3, 1, 5, 2, 1},
to = Record.FromList(f(val), head)
in to
- Dicken4 months ago
Post Prodigy
yes, i know , but i wanted to use LIst.Generate, can it be done ?
- Ahmedx4 months ago
Super User
pls try
let f = {List.Sum, List.Max, List.Average}, head = {"sum", "max", "avg"}, n = List.Count(head)-1, val = {2, 3, 1, 5, 2, 1}, to = List.Generate(()=>[i=0, j=f{i}], (x)=> x[i]<=n, (x)=>[i= x[i]+1,j =f{i}], (x)=> Function.Invoke(x[j],{val})) in Record.FromList(to,head)