Forum Discussion

gigotomo's avatar
gigotomo
Frequent Visitor
4 years ago
Solved

Need to add more rows in powerquery based on a column value.

Hello,

I have the following table in power query. I require to add rows based on the duration

 

Hence I need the final table to look like this.

Please help

  • jbwtp's avatar
    jbwtp
    4 years ago

    Hi gigotomo,

     

    Something like this?

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WqqisUlDSUbLQNzDSNzIwMoKwjWFsEHbMyytNzFHwSU0sS1VQitWJVnJ0coZoMoQohHJM4RxjIHZOLEbT5urmDlZoZIqky8gMzsFiWSwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Employee Name" = _t, #"Start of Leave" = _t, #"End of Leave" = _t, Duration = _t, #"Type of Leave" = _t]),
        #"Parsed Date" = Table.TransformColumns(Source,{{"Start of Leave", each Date.From(_, "us-en"), type date}, {"End of Leave", each Date.From(_, "us-en"), type date}}),
        #"Changed Type" = Table.TransformColumnTypes(#"Parsed Date",{{"Employee Name", type text}, {"Start of Leave", type date}, {"End of Leave", type date}, {"Duration", Int64.Type}, {"Type of Leave", type text}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type", "Range", each {Number.From([Start of Leave])..Number.From([End of Leave])}),
        #"Expanded Range" = Table.ExpandListColumn(#"Added Custom", "Range"),
        #"Added to Column" = Table.TransformColumns(#"Expanded Range", {{"Range", Date.From, type date}})
    in
        #"Added to Column"

     

    Cheers,

    John

5 Replies

  • wdx223_Daniel's avatar
    wdx223_Daniel
    Icon for Community Champion rankCommunity Champion

    NewStep=#table({"Employee Name","Date","Shift"},List.TransformMany(Table.ToRows(PreviousStepName),each List.Dates(x{1},x{3},Duration.From(1)),(x,y)=>{x{0},y,x{4}}))

  • jbwtp's avatar
    jbwtp
    Icon for Memorable Member rankMemorable Member

    Hi gigotomo,

     

    Do you want to try Unpivot Columns from the main or context menu?

     

    It will do something like this:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WqqisUlDSUbLQNzDSNzIwMoKwjWFsEHbMyytNzFHwSU0sS1VQitWJVnJ0coZoMoQohHJM4RxjIHZOLEbT5urmDlZoZIqky8gMzsFiWSwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Employee Name" = _t, #"Start of Leave" = _t, #"End of Leave" = _t, Duration = _t, #"Type of Leave" = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Employee Name", type text}, {"Start of Leave", type text}, {"End of Leave", type text}, {"Duration", Int64.Type}, {"Type of Leave", type text}}),
        #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Employee Name", "Duration", "Type of Leave"}, "Attribute", "Value")
    in
        #"Unpivoted Columns"

     

    Cheers,

    John

    • gigotomo's avatar
      gigotomo
      Frequent Visitor

      Hello John,

       

      Thanks for the solution but I already found a way using split column. What i did was

      1. I created a dummy column with the value "a" repeated the same number of time as duration using Text.Repeat

      2. Use "Split Column" but instead of splitting the column into columns, split the column into rows

      3. delete the dummy column

       

      But my problem now is how I increment the date value.

      • jbwtp's avatar
        jbwtp
        Icon for Memorable Member rankMemorable Member

        Hi gigotomo,

         

        Something like this?

        let
            Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WqqisUlDSUbLQNzDSNzIwMoKwjWFsEHbMyytNzFHwSU0sS1VQitWJVnJ0coZoMoQohHJM4RxjIHZOLEbT5urmDlZoZIqky8gMzsFiWSwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Employee Name" = _t, #"Start of Leave" = _t, #"End of Leave" = _t, Duration = _t, #"Type of Leave" = _t]),
            #"Parsed Date" = Table.TransformColumns(Source,{{"Start of Leave", each Date.From(_, "us-en"), type date}, {"End of Leave", each Date.From(_, "us-en"), type date}}),
            #"Changed Type" = Table.TransformColumnTypes(#"Parsed Date",{{"Employee Name", type text}, {"Start of Leave", type date}, {"End of Leave", type date}, {"Duration", Int64.Type}, {"Type of Leave", type text}}),
            #"Added Custom" = Table.AddColumn(#"Changed Type", "Range", each {Number.From([Start of Leave])..Number.From([End of Leave])}),
            #"Expanded Range" = Table.ExpandListColumn(#"Added Custom", "Range"),
            #"Added to Column" = Table.TransformColumns(#"Expanded Range", {{"Range", Date.From, type date}})
        in
            #"Added to Column"

         

        Cheers,

        John