Forum Discussion

Dicken's avatar
Dicken
Icon for Post Prodigy rankPost Prodigy
1 year ago
Solved

Power Query ; Access record field;

 

 

Hi, I have a record,  to insert range to a list; 

 

= [ alist = {1..25} , grupe = 3 , insertN = 2 ,
rc = List.Count( alist) ,
inserts = {"",""} , max = (Number.IntegerDivide(
rc , insertN )*insertN) + rc ,
maxlist = {grupe..max } ,
check = Number.Mod( rc , grupe ) = 0 ,
altlist =
List.Alternate( maxlist, (grupe + insertN ) -1, 1,1) ,
pos = if check = true then List.LastN( altlist,1) else
altlist ,
result = List.Accumulate( pos, alist, (s,c)=>
List.InsertRange( s, c, inserts ) ) ]

 

the problem is i do not seem to be able to access the result field? I   if I put  ie [pos] at end I get that list but [result] = error? 

any suggestions as to why  ? 

Richard. 

 

 

 



  • inserts = {"",""}

    is not doing what you think it does. instead

     

     

3 Replies

  • inserts = {"",""}

    is not doing what you think it does. instead

     

     

    • Dicken's avatar
      Dicken
      Icon for Post Prodigy rankPost Prodigy

      Thanks, 
      I had actually re done and got working, but thank you for taking the time to reply. 

       

      RD

  • The issue is that Power Query records are evaluated lazily, and when you try to access [result], it fails due to how List.Accumulate processes the alist.

    Instead of defining the record (rc), define result outside the record structure.

     

    let
    alist = {1..25},
    grupe = 3,
    insertN = 2,
    rc = List.Count(alist),
    inserts = {"", ""},
    max = (Number.IntegerDivide(rc, insertN) * insertN) + rc,
    maxlist = {grupe..max},
    check = Number.Mod(rc, grupe) = 0,
    altlist = List.Alternate(maxlist, (grupe + insertN) - 1, 1, 1),
    pos = if check then List.LastN(altlist, 1) else altlist,
    result = List.Accumulate(pos, alist, (s, c) => List.InsertRange(s, c, inserts))
    in
    result // Return the evaluated result