Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

July 28 - August 9 | Final Round of the Power BI Dataviz World Championships. This is your chance. Learn more

Reply
Dicken
Post Prodigy
Post Prodigy

Accumulated average


I want to accumulte the but as ans average,   so :  { 1, 1, 1 ,1} =  1 / 1 ,  2 /2 ,  3/3 , 4/ 4 
so here the average is calculated in select;

let
  alist =
    let
      alist = List.Numbers(1, 12, 1)
    in
      alist,
  result = List.Generate(
    () => [x = 0, y = alist{0}, z = y / (x + 1)],
    each [x] < List.Count(alist),
    each [x = [x] + 1, y = alist{x}, z = [z] + y],
    each [z] / ([x] + 1)
  )
in
  result


but can i get the average in the function, i have tried various such as ;

= List.Generate
               ()=> [ x = 1 ,  y = alist {0} , z = y / x  ] , 
               each [x] < List.Count( alist ), 
               each [ x  = [x] + 1, y = alist {x} , z =  List.Sum( { [z], y} ) / x  ],
               each [z] )



i have played around with various x = 0 , x = 1 etc. but cannot get one to work?

1 ACCEPTED SOLUTION

I want the cuumulative average, the example i gave shows a correct result. 

View solution in original post

7 REPLIES 7
slorin
Super User
Super User

Hi

List.Transform(
{1..List.Count(alist)},
each List.Average(List.FirstN(alist, _))
)

 

List.Generate(
()=>[i=1, x=alist{0}],
each [i]<=List.Count(alist),
each [i=[i]+1, x= ([x]*[i]+alist{[i]}) / ([i]+1) ],
each [x]
)

Stéphane

ronrsnfld
Super User
Super User

Not sure what you want for a result.

What result would you like to see for your List.Numbers(1,12,1) list?
Your code gives the average where for each row n, the average of values alist{0..n}

Perhaps if you gave an example other than {1,1,1,1}??

posssibel method adapted from post prodigy; 

let 
alist = {1..12},
    Custom1 = List.Generate( ()=> 1, 
 each _ < List.Count( alist ) , 
 each _ + 1, each List.Average( List.Range( alist, 0,_ )) ) 
in Custom1

o as is said, but done within the  fuunction, not select part of generate so;

Still not sure exactly what you want.

If you want a standalone function that will do the computation, then try:

(alist as list)=>
    List.Generate(
        ()=>[a=alist{0}, idx=0],
        each [idx] < List.Count(alist),
        each [idx=[idx]+1, a = List.Sum(List.Range(alist,0, idx+1))/(idx+1)],
        each [a])

You could use like:

let
  alist = List.Numbers(1,12,1),
  avg = fnRunningAvg(alist),
  tbl = Table.FromColumns({alist, avg}, type table[Numbers=Int64.Type, Running Avg = number])
in
   tbl

 

ronrsnfld_0-1785006156007.png

 

 



Good idea, but it can be somplfied so no need for  a record  and use avverage instead of sum,
i have posted as a solution, I'm nto sure how effecient range is  . 

I want the cuumulative average, the example i gave shows a correct result. 

Helpful resources

Announcements
FabCon and SQLCon Barcelona 2026

FabCon & SQLCon – Barcelona 2026

Join us in Barcelona for FabCon and SQLCon, the Fabric, Power BI, SQL, and AI community event. Save €200 with code FABCMTY200.

Fabric Community Sticker Design Challenge Barcelona Carousel

Fabric Community Sticker Challenge - Barcelona 2026

If you love stickers, then you will definitely want to check out our community sticker challenge, Barcelona edition!

July Power BI Update Carousel

Power BI Monthly Update - July 2026

Check out the July 2026 Power BI update to learn about new features.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.