Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
2 years ago
Solved

insert multiple columns that subtract previous columns

Hello - I have 50+ columns that I need to calculate the difference after every 2 columns. Currently I appended my tables in Power Query and it looks like this:

 DRAFT  ACTUAL  DRAFT  ACTUAL 
                  10                  15                  20                  10
                     5                     4                  30                100
                     1                     2                  40                  50

I need it to do this:

 DRAFT  ACTUAL  DIFF  DRAFT  ACTUAL  DIFF 
                  10                  15                   (5)                  20                  10                  10
                     5                     4                     1                  30                100                 (70)
                     1                     2                   (1)                  40                  50                 (10)

 

I can add a custom column in Power query but it shows up at the end of the table and then I have to move it. Also, it is very manual and I have to do this for 50+ columns on 50+ files.

  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi ,

    Please refer to this:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("JYqxDQAwCMN+ydyhQOkziP/fKEkXK5FdBdtYsBy4lmCDCPQq0Bzeb8lU7dIsnYkEcVjfi+4H", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [DRAFT = _t, ACTUAL = _t, DRAFT.1 = _t, ACTUAL.1 = _t, DRAFT.2 = _t, ACTUAL.2 = _t]),
        ColumnNames = Table.ColumnNames(Source),
        ChangeType = Table.TransformColumnTypes(Source, List.Transform(ColumnNames, each {_, type number})),
        AddDiffColumns = List.Accumulate(
            List.Zip({{0..List.Count(ColumnNames)-1}, ColumnNames}),
            ChangeType,
            (state, current) => 
                if Number.Mod(current{0}, 2) = 1 then 
                    let
                        diffColumnName = "DIFF" & Text.From(Number.IntegerDivide(current{0}, 2) + 1),
                        draftColumnName = ColumnNames{current{0}-1},
                        actualColumnName = current{1},
                        addedDiffColumn = Table.AddColumn(state, diffColumnName, each Record.Field(_, draftColumnName) - Record.Field(_, actualColumnName), type number)
                    in
                        addedDiffColumn
                else 
                    state
        )
    in
        AddDiffColumns



    Best Regards,
    Gao

    Community Support Team

     

    If there is any post helps, then please consider Accept it as the solution  to help the other members find it more quickly.
    If I misunderstand your needs or you still have problems on it, please feel free to let us know. Thanks a lot!

    How to get your questions answered quickly --  How to provide sample data in the Power BI Forum

2 Replies

  • I should add that each of my files has a different number of columns as well. So if I can automate to add this difference column for any number of iterations as there is data, that is what I want to do.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi ,

      Please refer to this:

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("JYqxDQAwCMN+ydyhQOkziP/fKEkXK5FdBdtYsBy4lmCDCPQq0Bzeb8lU7dIsnYkEcVjfi+4H", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [DRAFT = _t, ACTUAL = _t, DRAFT.1 = _t, ACTUAL.1 = _t, DRAFT.2 = _t, ACTUAL.2 = _t]),
          ColumnNames = Table.ColumnNames(Source),
          ChangeType = Table.TransformColumnTypes(Source, List.Transform(ColumnNames, each {_, type number})),
          AddDiffColumns = List.Accumulate(
              List.Zip({{0..List.Count(ColumnNames)-1}, ColumnNames}),
              ChangeType,
              (state, current) => 
                  if Number.Mod(current{0}, 2) = 1 then 
                      let
                          diffColumnName = "DIFF" & Text.From(Number.IntegerDivide(current{0}, 2) + 1),
                          draftColumnName = ColumnNames{current{0}-1},
                          actualColumnName = current{1},
                          addedDiffColumn = Table.AddColumn(state, diffColumnName, each Record.Field(_, draftColumnName) - Record.Field(_, actualColumnName), type number)
                      in
                          addedDiffColumn
                  else 
                      state
          )
      in
          AddDiffColumns



      Best Regards,
      Gao

      Community Support Team

       

      If there is any post helps, then please consider Accept it as the solution  to help the other members find it more quickly.
      If I misunderstand your needs or you still have problems on it, please feel free to let us know. Thanks a lot!

      How to get your questions answered quickly --  How to provide sample data in the Power BI Forum