Forum Discussion

Shaiksamar2244's avatar
Shaiksamar2244
Frequent Visitor
3 years ago
Solved

Duplicate rows based on billing frequency

Hello Everyone,

 

Here is my issue, Based on billing frequency I need duplicate rows to generate for each row until the Term End date. I have shared the output that I'm looking for. Any suggestions would be appreciated.

 

Document#Bill DateTerm Start DateTerm End DateBilling FrequencyAmount
1237/31/20236/30/20219/30/2023Monthly200
4568/27/20231/1/20213/31/2024Quarterly200
7899/17/202311/1/202112/30/2024Annual200
9878/15/20239/29/20229/28/2024Semi-Annual200

 

Output

Document#Bill DateTerm Start DateTerm End DateBilling FrequencyAmount
1237/31/20236/30/20219/30/2023Monthly200
1238/31/20236/30/20219/30/2023Monthly200
1239/30/20236/30/20219/30/2023Monthly200
4568/27/20231/1/20213/31/2024Quarterly200
45611/27/20231/1/20213/31/2024Quarterly200
4562/27/20241/1/20213/31/2024Quarterly200
7899/17/202311/1/202112/30/2024Annual200
7899/17/202411/1/202112/30/2024Annual200
9878/15/20239/29/20229/28/2024Semi-Annual200
9872/15/20249/29/20229/28/2024Semi-Annual200
9878/15/20249/29/20229/28/2024Semi-Annual200
  • Hello, Shaiksamar2244 

     

     

    let
        Source = your_table,
        f_rec = 
            [Monthly = (x) => Date.AddMonths(x, 1),
            Quarterly = (x) => Date.AddQuarters(x, 1),
            Annual = (x) => Date.AddYears(x, 1),
            #"Semi-Annual" = (x) => Date.AddQuarters(x, 2)],
        f = (r as record) as list =>
            [fx = Record.Field(f_rec, r[Billing Frequency]),
            b = List.Generate(
                    () => r[Bill Date],
                    (x) => x <= r[Term End Date],
                    (x) => fx(x)
            )][b],
        tbl = Table.AddColumn(Source, "lst", f),
        expand = Table.ExpandListColumn(tbl, "lst"),
        remove_old = Table.RemoveColumns(expand,{"Bill Date"}),
        rename = Table.RenameColumns(remove_old,{{"lst", "Bill Date"}})
    in
        rename

     

     

  • AlienSx's avatar
    AlienSx
    3 years ago

    Shaiksamar2244 don't worry. Refresh a query or select some step in the middle and select final step again. Error should go away in PQ editor. I hope so. 

13 Replies

  • Hello, Shaiksamar2244 

     

     

    let
        Source = your_table,
        f_rec = 
            [Monthly = (x) => Date.AddMonths(x, 1),
            Quarterly = (x) => Date.AddQuarters(x, 1),
            Annual = (x) => Date.AddYears(x, 1),
            #"Semi-Annual" = (x) => Date.AddQuarters(x, 2)],
        f = (r as record) as list =>
            [fx = Record.Field(f_rec, r[Billing Frequency]),
            b = List.Generate(
                    () => r[Bill Date],
                    (x) => x <= r[Term End Date],
                    (x) => fx(x)
            )][b],
        tbl = Table.AddColumn(Source, "lst", f),
        expand = Table.ExpandListColumn(tbl, "lst"),
        remove_old = Table.RemoveColumns(expand,{"Bill Date"}),
        rename = Table.RenameColumns(remove_old,{{"lst", "Bill Date"}})
    in
        rename

     

     

    • Shaiksamar2244's avatar
      Shaiksamar2244
      Frequent Visitor

      Hello Alien, 

       

      Thank you so much for your response. I'm new to this M code, When I use this same code in a power query to understand how this works, I got this error. Please assist me.

       

       

      • AlienSx's avatar
        AlienSx
        Super User

        In step named tbl replace word Source with #"Changed Type"

    • hegler23's avatar
      hegler23
      Frequent Visitor

      Hello, I get the error message with your code.

      "Expression.Error: The name "Rename" was not recognized. Is it spelled correctly?"

      • AlienSx's avatar
        AlienSx
        Super User

        Hello, hegler23 Power Query M is case sensitive so try rename instead. Or show the code you use to locate a problem.