The ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM.
Get registeredEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends September 15. Request your voucher.
Hi,
I have a question regardign how gen accumulates , I have an accumulation which re starts when 10 is reached / exceeded,
So this works,
let alist = {3} & List.Repeat({2} , 25) in
List.Generate( ()=> [ x = 0 , y = alist{0} ,z = 0 ] ,
each [x] < List.Count(alist) ,
each [ x = [x] + 1, z = alist{x} ,
y = if [y] + z > 10 then z else [y] + z] ,
each [y] )
so from this ;
let alist = {3} & List.Repeat({2} , 25) in
List.Generate( ()=> [ x = 0 , y = alist{0} ,z = 0 ] ,
each [x] < List.Count(alist) ,
each [ x = [x] + 1, y = [y] + alist{x} , z = y ] ,
each [z] )
But if you try an if condtion;
= let alist = {3} & List.Repeat({2} , 25) in
List.Generate( ()=> [ x = 0 , y = alist{0} ,z = 0 ] ,
each [x] < List.Count(alist) ,
each [ x = [x] + 1, y = [y] + alist{x} , z = if y > 10 then alist{x} else y ] ,
each [z] )
then the accumulation does not re start ? , but if the current value = ie 2 then 2 < 10 so [y] + alist{x}
but that does not seem to be the case, not sure why ,
some advice help sought on this .
Richard.
Solved! Go to Solution.
As I wrote above: in that example you are never resetting y. So once y becomes greater than 10, y always remains greater than 10.
Therefore z will always be set to alist{x}
Thanks, sorry for slow response.
You can also solve this problem by List.Accumulate
let
alist = {3} & List.Repeat({2} , 25)
in
List.Accumulate(alist, {0},(a,b)=> if List.Last(a)+b>10 then a&{b} else a& {List.Last(a)+b})
In your non-working snippet, your sequence will not repeat because you never reset "y". So once y>10 = true, it will always be >10 and z will always return alist{x}
let
alist = {3} & List.Repeat({2} , 25)
in
List.Generate( ()=> [ x = 0 , y = alist{0} ,z = 0 ] ,
each [x] < List.Count(alist) ,
each [ x = [x] + 1,
y = [y] + alist{x} ,
z = if y > 10
then alist{x}
else y ] ,
each [z] )
Try:
let
alist = {3} & List.Repeat({2} , 25)
in
List.Generate( ()=> [ x = 0 , y = alist{0} ,z = 0 ] ,
each [x] < List.Count(alist) ,
each [x = [x] + 1,
y = if [y] + alist{x} > 10
then alist{x}
else [y] + alist{x},
z = y ] ,
each [z] )
although you don't really need z at all
let
alist = {3} & List.Repeat({2} , 25)
in
List.Generate( ()=> [ x = 0 , y = alist{0}] ,
each [x] < List.Count(alist) ,
each [x = [x] + 1,
y = if [y] + alist{x} > 10
then alist{x}
else [y]+alist{x}] ,
each [y] )
I still don't see why the condition does not kick in as expected the third example,
so this works y = if [y] + alist{x} > 10 then alist{x} else [y] + alist{x} ] works,
but if [y] + alist{x} is declared as a variabel y
and then ; if z = if y > 10 then alistt{x} it returns a different incorrect restult?
that's the question, I not bothered about solving it just why the two operate differently
As I wrote above: in that example you are never resetting y. So once y becomes greater than 10, y always remains greater than 10.
Therefore z will always be set to alist{x}