Home » Date Range Spend Total

Date Range Spend Total

This problem is contributed by Mehmet Çiçek. Find the total spend corresponding for the date range given in columns F & G. Ex. For range 1-Jun-2015 to 10-Jun-2015 From 1-Jun-2015 to 3-Jun-2015, rate is 5 & people 8. Hence total for 3 days = 3 * 5 * 8 = 120 From 4-Jun-2015 to 10-Jun-2015, rate is 10 & people 12. Hence total for 7 days = 7 * 10 * 12 = 840 Hence total = 120 + 840 = 960

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 215
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Date Range Spend Total with Power Query

Power Query solution 1 for Date Range Spend Total, proposed by Bo Rydobon 🇹🇭:
let
  Source = Table.Buffer(
    Table.AddColumn(
      Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
      "Ex", 
      each [Rate] * [No of People]
    )
  ), 
  T2 = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  Spend = Table.AddColumn(
    T2, 
    "Total Spend", 
    each List.Sum(
      List.Transform(
        List.Dates(
          Date.From([From Date]), 
          Number.From([To Date] - [From Date]) + 1, 
          Duration.From(1)
        ), 
        (d) =>
          List.Sum(
            Table.SelectRows(
              Source, 
              each [From Date] <= DateTime.From(d) and DateTime.From(d) <= [To Date]
            )[Ex]
          )
      )
    )
  )
in
  Spend
Power Query solution 2 for Date Range Spend Total, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  Solution = Table.AddColumn(
    Source, 
    "Total Spend", 
    each List.Sum(
      List.Transform(
        {Number.From([From Date]) .. Number.From([To Date])}, 
        each 
          let
            d = Date.From(_), 
            r = Table.SelectRows(
              Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
              each d >= DateTime.Date([From Date]) and d <= DateTime.Date([To Date])
            )
          in
            r[Rate]{0} * r[No of People]{0}
      )
    )
  )
in
  Solution
Power Query solution 3 for Date Range Spend Total, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Dias = Table.AddColumn(Table1, "Dias", each {Number.From([From Date]) .. Number.From([To Date])}), 
  CalDiario = Table.AddColumn(Dias, "Diario", each [No of People] * [Rate])[[Dias], [Diario]], 
  TablaDias = Table.ExpandListColumn(CalDiario, "Dias"), 
  Zip = List.Zip({TablaDias[Dias], TablaDias[Diario]}), 
  Sol = Table.AddColumn(
    Table2, 
    "Total Spend", 
    each 
      let
        a = {Number.From([From Date]) .. Number.From([To Date])}, 
        b = List.Sum(List.ReplaceMatchingItems(a, Zip))
      in
        b
  )
in
  Sol

Solving the challenge of Date Range Spend Total with Excel

Excel solution 1 for Date Range Spend Total, proposed by Bo Rydobon 🇹🇭:
=MAP(F2:F4,
    G2:G4,
    LAMBDA(f,
    g,
    SUM(MAP(SEQUENCE(
        g-f+1,
        ,
        f
    ),
    LAMBDA(d,
    SUM((d>=A2:A6)*(d<=B2:B6)*C2:C6*D2:D6))))))
Excel solution 2 for Date Range Spend Total, proposed by Bo Rydobon 🇹🇭:
=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        f,
        g,
        SUM(
            LOOKUP(
                SEQUENCE(
                    g-f+1,
                    ,
                    f
                ),
                A2:A6,
                C2:C6*D2:D6
            )
        )
    )
)
Excel solution 3 for Date Range Spend Total, proposed by Rick Rothstein:
=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        f,
        g,
        SUM(
            C2:C6*D2:D6*IFERROR(
                MAP(
                    A2:A6,
                    B2:B6,
                    LAMBDA(
                        a,
                        b,
                        ROWS(
                            INDIRECT(
                                a&":"&b
                            ) INDIRECT(
                                f&":"&g
                            )
                        )
                    )
                ),
                0
            )
        )
    )
)
Excel solution 4 for Date Range Spend Total, proposed by John V.:
=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        a,
        b,
        LET(
            f,
            LAMBDA(
                x,
                LOOKUP(
                    SEQUENCE(
                        1+b-a,
                        ,
                        a
                    ),
                    A2:x
                )
            ),
            SUM(
                f(
                    C6
                )*f(
                    D6
                )
            )
        )
    )
)

✅=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        a,
        b,
        SUM(
            LOOKUP(
                SEQUENCE(
                        1+b-a,
                        ,
                        a
                    ),
                A2:A6,
                C2:C6*D2:D6
            )
        )
    )
)
Excel solution 5 for Date Range Spend Total, proposed by محمد حلمي:
=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        a,
        b,
        LET(
            r,
            SEQUENCE(
                B6-A2+1,
                ,
                A2
            ),
            SUM(
                XLOOKUP(
                    SEQUENCE(
                        b-a+1,
                        ,
                        a
                    ),
                    
                    r,
                    XLOOKUP(
                        r,
                        A2:A6,
                        C2:C6*D2:D6,
                        ,
                        -1
                    )
                )
            )
        )
    )
)
Excel solution 6 for Date Range Spend Total, proposed by محمد حلمي:
=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        a,
        b,
        LET(
            n,
            REDUCE(
                0,
                A2:A6,
                LAMBDA(
                    a,
                    d,
                    LET(
                        r,
                        SEQUENCE(
                            OFFSET(
                                d,
                                ,
                                1
                            )-d+1,
                            ,
                            d
                        ),
                        
                        VSTACK(
                            a,
                            HSTACK(
                                r,
                                r^0*OFFSET(
                                    d,
                                    ,
                                    2
                                ),
                                r^0*OFFSET(
                                    d,
                                    ,
                                    3
                                )
                            )
                        )
                    )
                )
            ),
            SUM(
                XLOOKUP(
                    SEQUENCE(
                        b-a+1,
                        ,
                        a
                    ),
                    TAKE(
                        n,
                        ,
                        1
                    ),
                    
                    INDEX(
                        n,
                        ,
                        2
                    )*TAKE(
                        n,
                        ,
                        -1
                    ),
                    0
                )
            )
        )
    )
)
Excel solution 7 for Date Range Spend Total, proposed by Kris Jaganah:
=LET(a,
    A2:A6,
    b,
    B2:B6,
    c,
    C2:C6*D2:D6,
    d,
    F2:F4,
    e,
    G2:G4,
    f,
    MIN(
        a
    ),
    g,
    SEQUENCE(
        MAX(
            b
        )-f+1,
        ,
        f
    ),
    h,
    MAP(g,
    LAMBDA(x,
    SUM((x>=a)*(x<=b)*c))),
    MAP(d,
    e,
    LAMBDA(y,
    z,
    SUM(FILTER(h,
    (g>=y)*(g<=z))))))
Excel solution 8 for Date Range Spend Total, proposed by Julian Poeltl:
=LET(
    F,
    A2:A6,
    C,
    C2:C6*D2:D6,
    MAP(
        F2:F4,
        G2:G4,
        LAMBDA(
            A,
            B,
            SUM(
                XLOOKUP(
                    SEQUENCE(
                        1+B-A,
                        ,
                        A
                    ),
                    F,
                    C,
                    ,
                    -1
                )
            )
        )
    )
)
Excel solution 9 for Date Range Spend Total, proposed by Timothée BLIOT:
=MAP(
    F2:F4,
    G2:G4,
     LAMBDA(
         x,
         y,
          SUM(
              XLOOKUP(
                  SEQUENCE(
                      y-x+1,
                      ,
                      x
                  ),
                  B2:B6,
                  C2:C6*D2:D6,
                  ,
                  1
              )
          )
     )
)
Excel solution 10 for Date Range Spend Total, proposed by Oscar Mendez Roca Farell:
=MAP(
    F2:F4,
     G2:G4,
     LAMBDA(
         fd,
          td,
          LET(
              _f,
               LAMBDA(
                   i,
                    BYROW(
                        A2:B6,
                         LAMBDA(
                             r,
                             MEDIAN(
                                 i,
                                  r
                             )
                         )
                    )
               ),
              _m,
               FILTER(
                   HSTACK(
                       _f(
                           td
                       ),
                       _f(
                           fd
                       ),
                        C2:C6*D2:D6
                   ),
                   _f(
                           fd
                       )-_f(
                           td
                       )<0
               ),
               SUM(
                   BYROW(
                       TAKE(
                           _m,
                            ,
                           2
                       ),
                        LAMBDA(
                            j,
                            SUM(
                                j*{1,
                                -1}
                            )+1
                        )
                   )*TAKE(
                       _m,
                       ,
                       -1
                   )
               )
          )
     )
)
Excel solution 11 for Date Range Spend Total, proposed by Sunny Baggu:
=MAP(
 F2:F4,
    
 G2:G4,
    
 LAMBDA(a,
     b,
    
 LET(
 _seq,
     SEQUENCE(
         b - a + 1,
          ,
          a
     ),
    
 _e1,
     LAMBDA(
         rng,
          XLOOKUP(
              _seq,
               A2:A6,
               rng,
               ,
               -1
          )
     ),
    
 SUMPRODUCT(_e1(C2:C6),
     _e1(D2:D6))
 )
 )
)
Excel solution 12 for Date Range Spend Total, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(z;
    LET(
        f;
        MIN(
            A2:B6
        );
        f+SEQUENCE(
            ;
            MAX(
            A2:B6
        )-f+1
        )-1
    );
    MAP(F2:F4;
    G2:G4;
    LAMBDA(p;
    o;
    SUM(VALUE(FILTER(MAP(
        z;
        LAMBDA(
            e;
            TEXTJOIN(
                ;
                ;
                MAP(
                    A2:A6;
                    B2:B6;
                    C2:C6;
                    D2:D6;
                    LAMBDA(
                        a;
                        b;
                        c;
                        d;
                        IF(
                            AND(
                                e>=a;
                                e<=b
                            );
                            c*d;
                            ""
                        )
                    )
                )
            )
        )
    );
    ((z>=p)*((z<=o)))))))))
Excel solution 13 for Date Range Spend Total, proposed by Julien Lacaze:
=LET(bf,
    $A$2:$A$6,
    bt,
    $B$2:$B$6,
    cost,
    $C$2:$C$6*$D$2:$D$6,
    
MAP(F2:F4,
    G2:G4,
    LAMBDA(a,
    b,
    SUM(((bf<=a)*(a<=bt)*(bf<=b)*(b<=bt)*(1+b-a)+(bf<=a)*(a<=bt)*(b>bt)*(1+bt-a)+(bf<=b)*(b<=bt)*(1+b-bf)*(a
Excel solution 14 for Date Range Spend Total, proposed by Pieter de Bruijn:
=LET(a,
    A2:A6,
    b,
    B2:B6,
    d,
    C2:C6*D2:D6,
    f,
    F2:F4,
    g,
    G2:G4,
    h,
    MAKEARRAY(ROWS(
        f
    ),
    ROWS(
        a
    ),
    LAMBDA(r,
    c,
    LET(x,
    INDEX(
        f,
        r
    ),
    y,
    INDEX(
        a,
        c
    ),
    
SUM(--((SEQUENCE(
    1,
    1+INDEX(
        g,
        r
    )-x,
    x
))=(SEQUENCE(
    1+INDEX(
        b,
        c
    )-y,
    ,
    y
))))))),
    BYROW(
        h,
        LAMBDA(
            z,
            MMULT(
                z,
                d
            )
        )
    ))
Excel solution 15 for Date Range Spend Total, proposed by Nicolas Micot:
=LET(tabFiltre;
    FILTRE($A$2:$D$6;
    ($A$2:$A$6<=G2)*($B$2:$B$6>=F2));
    SOMME(BYROW(tabFiltre;
    LAMBDA(a;
    INDEX(
        a;
        1;
        3
    )*INDEX(
        a;
        1;
        4
    )*(MIN(
        G2;
        INDEX(
            a;
            1;
            2
        )
    )-MAX(
        F2;
        INDEX(
            a;
            1;
            1
        )
    )+1)))))
Excel solution 16 for Date Range Spend Total, proposed by Hussain Ali Nasser:
=MAP(
    F2:F4,
    G2:G4,
    LAMBDA(
        _from,
        _to,
        SUM(
            XLOOKUP(
                SEQUENCE(
                    _to-_from+1,
                    ,
                    _from
                ),
                A2:A6,
                C2:C6*D2:D6,
                ,
                -1
            )
        )
    )
)

Solving the challenge of Date Range Spend Total with Python in Excel

&&&

Leave a Reply