Forum Discussion

Linnil's avatar
Linnil
Helper III
2 years ago
Solved

Create a Column which labels table rows as Section 1, Section 2, 3, 4 according to number of rows

Hi - I have a table with a variable amount of rows. Whenever the data is refreshed (once a week) it changes.

I would like to count all the rows and then divide those rows into 4 sections, more of less.

For instance, if I have 100 rows:

Row 1-25 = Section 1

Row 26-50 - Section 2

etc

 

if I have 200 rows:

Row 1-50 = Section 1

etc

 

Is it possible to do in PQ?

Many thanks Linnil

  • please use my code as a new step, instead of puting it in the add column function.

    click the "fx" label beside the formula edit bar, then copy code into formula area

    =let
    AAA=Table.RowCount(#"Added Index")
    in Table.FromColumns(Table.ToColumns(#"Added Index")&{List.Transform({0..AAA-1},each "Section "&Text.From(Number.IntegerDivide(_,Number.RoundUp(AAA/4))+1))},Table.ColumnNames(#"Added Index")&{"Section"}))

15 Replies

  • wdx223_Daniel's avatar
    wdx223_Daniel
    Community Champion

    NewStep=let a=Table.RowCount(PreviousStepName) in Table.FromColumns(Table.ToRows(PreviousStepName)&{List.Transform({0..a-1},each "Section "&Text.From(Number.IntegerDivide(_,Number.RoundUp(a/4))+1))},Table.ColumnNames(PreviousStepName)&{"Section"})

    • Linnil's avatar
      Linnil
      Helper III

      Hi Daniel - thanks so much. This is on the right track. I've changed variable a to AAA so I could understand the script better.

      When I created the custom column with this Let statement, I got this error:

       

      Expression.Error: The count of 'columns' (1445) doesn't match that of 'columnNames' (11).
      Details:
      [List]

      So the number of rows is correct (1445).
      And my table (with the new column we just created for Sections) has 11 columns.
      Can you help me solve this mismatch?
      Thanks 🙂

  • Hi Linnil,

     

    You can try using the following in a custom step:

    Table.Split(PreviousStepName, Number.RoundUp(Table.RowCount(PreviousStepName) / 4))

     

    This will split your table into four tables - not perfectly evenly, but it's fast and simple.

     

    Pete

    • Linnil's avatar
      Linnil
      Helper III

      Thanks Pete - I ran a few scenarios trying this out before coming to the Community. Not quite what I need but thanks for your suggestion. Very kind of you to respond.