Home » Top Net Salary Earner

Top Net Salary Earner

Table 1 has salary for different names and Table 2 has percentage deduction applicable for various salary ranges. Hence if salary is 51000, then 40% deduction is applicable. Hence, person gets 51000 * (1-0.4) = 30600 Find the person who gets the highest salary after the deduction.

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

Solving the challenge of Top Net Salary Earner with Power Query

Power Query solution 1 for Top Net Salary Earner, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  T2 = Table.Buffer(Excel.CurrentWorkbook(){[Name = "Table2"]}[Content]), 
  Ded = Table.AddColumn(
    Source, 
    "D", 
    each [Salary] * (1 - List.Last(Table.SelectRows(T2, (t) => t[From] <= [Salary])[Deduction]))
  ), 
  Remove = Table.RemoveColumns(Table.SelectRows(Ded, each [D] = List.Max(Ded[D])), "D")
in
  Remove
Power Query solution 2 for Top Net Salary Earner, proposed by Zoran Milokanović:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Table2 = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  AddedDeduction = Table.AddColumn(
    Source, 
    "Deduction", 
    each [Salary]
      * (
        1
          - Table.SelectRows(
            Table2, 
            (i) => [Salary] >= i[From] and (i[To] = "No Limit" or [Salary] <= i[To])
          )[Deduction]{0}
      )
  ), 
  Solution = Table.SelectRows(
    AddedDeduction, 
    each [Deduction] = List.Max(AddedDeduction[Deduction])
  )[[Names], [Salary]]
in
  Solution
Power Query solution 3 for Top Net Salary Earner, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Deduction = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  Join = Table.AddColumn(
    Source, 
    "Deduction", 
    (x) => Table.Last(Table.SelectRows(Deduction, each [From] <= x[Salary]))[Deduction]
  ), 
  Sol = Table.MaxN(Table.AddColumn(Join, "New", each [Salary] * (1 - [Deduction])), "New", 2)[
    [Names], 
    [Salary]
  ]
in
  Sol
Power Query solution 4 for Top Net Salary Earner, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  tab2 = Tabela2, 
  fx = (valor as number) =>
    let
      Fonte = Tabela2, 
      fil   = Table.SelectRows(Fonte, each [From] < valor), 
      ult   = Table.LastN(fil, 1), 
      rem   = Table.SelectColumns(ult, {"Deduction"})
    in
      rem, 
  p = Table.AddColumn(Fonte, "Ded", each fx([Salary])), 
  exp = Table.ExpandTableColumn(p, "Ded", {"Deduction"}), 
  add = Table.AddColumn(exp, "Personalizar", each [Salary] * (1 - [Deduction])), 
  max = List.Max(add[Personalizar]), 
  res = Table.SelectRows(add, each [Personalizar] = max)[[Names], [Salary]]
in
  res
Power Query solution 5 for Top Net Salary Earner, proposed by Brian Julius:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  AddAdjSalary = Table.AddColumn(
    Source, 
    "AdjSalary", 
    each (
      if [Salary] <= 40000 then
        0.90
      else if [Salary] <= 50000 then
        0.75
      else if [Salary] <= 60000 then
        0.60
      else
        0.50
    )
      * [Salary]
  ), 
  RankNFilter = Table.SelectRows(
    Table.AddRankColumn(
      AddAdjSalary, 
      "Rankx", 
      {"AdjSalary", Order.Descending}, 
      [RankKind = RankKind.Competition]
    ), 
    each [Rankx] = 1
  ), 
  CleanNSort = Table.Sort(
    Table.RemoveColumns(RankNFilter, {"AdjSalary", "Rankx"}), 
    {"Salary", Order.Ascending}
  )
in
  CleanNSort
Power Query solution 6 for Top Net Salary Earner, proposed by Tyler N.:
let
  Src = Table.AddColumn(
    Table1, 
    "R", 
    each 
      let
        a = Table2, 
        b = [Salary], 
        c = Table.SelectRows(a, each [From] < b), 
        d = Table.Last(Table.AddColumn(c, "net", each b * (1 - [Deduction])))
      in
        d[net]
  ), 
  Fin = Table.SelectRows(Src, each [R] = List.Max(Src[R]))
in
  Fin

Solving the challenge of Top Net Salary Earner with Excel

Excel solution 1 for Top Net Salary Earner, proposed by Bo Rydobon 🇹🇭:
=LET(a,B2:B10,b,a*(1-LOOKUP(a,D2:F5)),FILTER(A2:B10,b=MAX(b)))
Excel solution 2 for Top Net Salary Earner, proposed by Rick Rothstein:
=LET(b,B2:B10,x,b*(1-XLOOKUP(b,D2:D5,F2:F5,,-1)),FILTER(A2:B10,x=MAX(x)))
Excel solution 3 for Top Net Salary Earner, proposed by John V.:
=LET(s,B2:B10,d,s-s*LOOKUP(s,D2:F5),FILTER(A2:B10,d=MAX(d)))
Excel solution 4 for Top Net Salary Earner, proposed by محمد حلمي:
=LET(b,B2:B10,r,b*(1-XLOOKUP(b,D2:D5,F2:F5,,-1)),FILTER(
A2:B10,r=MAX(r)))
Excel solution 5 for Top Net Salary Earner, proposed by محمد حلمي:
=LET(b,B2:B10,r,b*(1-VLOOKUP(b,D2:F5,3)),FILTER(A2:B10,r=MAX(r)))
Excel solution 6 for Top Net Salary Earner, proposed by Kris Jaganah:
=LET(a,B2:B10,c,(1-XLOOKUP(a,D2:D5,F2:F5,,-1))*a,FILTER(A2:B10,c=MAX(c)))
Excel solution 7 for Top Net Salary Earner, proposed by Timothée BLIOT:
=FILTER(A2:B10,LET(A,MAP(B2:B10,LAMBDA(a,a*XLOOKUP(a,E2:E5,1-F2:F5,,1))),A=MAX(A)))

After-tax income of each:
=SORT(HSTACK(A2:A10,MAP(B2:B10, LAMBDA(x, x-SUM(MAP(D2:D5,E2:E5,F2:F5, LAMBDA(a,b,t, MAX(MIN(b,x)-a,0)*t ))) ))),2,-1)
Excel solution 8 for Top Net Salary Earner, proposed by Oscar Mendez Roca Farell:
=LET(_b,B2:B10,_d,_b*XLOOKUP(_b, D2:D5, 1-F2:F5, ,-1), VSTACK({"Names","Salary"}, FILTER(A2:B10,_d=MAX(_d))))
Excel solution 9 for Top Net Salary Earner, proposed by Sunny Baggu:
=FILTER(A2:B10,LET(_val,B2:B10*(1-XLOOKUP(B2:B10,D2:D5,F2:F5,,-1)),_val=MAX(_val)))

2#
=FILTER(A2:B10,LET(_val,B2:B10*(1-VLOOKUP(B2:B10,D2:F5,3)),_val=MAX(_val)))

3#
=FILTER(A2:B10,LET(_val,B2:B10*(1-INDEX(F2:F5,MATCH(B2:B10,D2:D5,1))),_val=MAX(_val)))
Excel solution 10 for Top Net Salary Earner, proposed by Md. Zohurul Islam:
=LET(u,A2:A10,v,B2:B10,w,A1:B1,p,D2:D5,q,F2:F5,
a,v*(1-LOOKUP(v,p,q)),
VSTACK(w,FILTER(HSTACK(u,v),a=MAX(a))))
Excel solution 11 for Top Net Salary Earner, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=LET(d;A2:A10;f;B2:B10;LET(u;LET(t;LAMBDA(y;LET(x;MAP(D2:D5;E2:E5;F2:F5;LAMBDA(p;o;i;IF(AND(y>=p;y<=o);(1-i)*y;"")));FILTER(x;x<>"")));LET(v;IFNA(MAP(MAP(f;t);d;LAMBDA(m;n;XLOOKUP(LARGE(MAP(f;t);1);m;n)));"");FILTER(v;v<>"")));HSTACK(u;XLOOKUP(u;d;f))))
Excel solution 12 for Top Net Salary Earner, proposed by Daniel Garzia:
=LET(s,B2:B10,d,s*(1-VLOOKUP(s,D2:F5,3)),FILTER(A2:B10,d=MAX(d)))
Excel solution 13 for Top Net Salary Earner, proposed by Rayan S.:
=LET(
 x, A2:B10,
 y, D2:F5,
 t, HSTACK(x, TAKE(x, , -1) * (1 - VLOOKUP(TAKE(x, , -1), y, 3, 1))),
 TAKE(SORTBY(t, TAKE(t, , -1), -1), 2, 2)
)
Excel solution 14 for Top Net Salary Earner, proposed by Hussain Ali Nasser:
=LET(_lookup,XLOOKUP(B2:B10,D2:D5,1-F2:F5,,-1)*B2:B10,FILTER(A2:B10,_lookup=MAX(_lookup)))
Excel solution 15 for Top Net Salary Earner, proposed by Ibrahim Sadiq:
=LET(a,B2:B10,b,a*(1-INDEX(F2:F5,MATCH(a,D2:D5,1))),FILTER(A2:B10,b=MAX(b)))
Excel solution 16 for Top Net Salary Earner, proposed by Amr Tawfik CMA®,FMVA,Lean Coach:
=LET(a,B2:B10,x,a-(a*LOOKUP(a,D2:D5,F2:F5)),xx,FILTER(A2:B10,x=MAX(x)),xx)
Excel solution 17 for Top Net Salary Earner, proposed by Amr Tawfik CMA®,FMVA,Lean Coach:
=LET(a,B2:B10,x,a-(a*LOOKUP(a,D2:D5,F2:F5)),FILTER(A2:B10,x=MAX(x)))
Excel solution 18 for Top Net Salary Earner, proposed by Enrico Giorgi:
=LET(deductions,XLOOKUP(B2:B10,D2:D5,F2:F5,,-1),net,(1-deductions)*B2:B10,max_net,MAX(net),FILTER(A2:B10,net=max_net))

ITALIAN VERSION
=LET(deductions;CERCA.X(B2:B10;D2:D5;F2:F5;;-1);net;(1-deductions)*B2:B10;max_net;MAX(net);FILTRO(A2:B10;net=max_net))

Solving the challenge of Top Net Salary Earner with Python in Excel

Python in Excel solution 1 for Top Net Salary Earner, proposed by Alejandro Campos:
df = xl("A1:B10", headers=True)
df['Salary After Deduction'] = df['Salary'].apply(lambda s: next(s*(1-r['Deduction']) 
 for _,r in xl("D1:F5", headers=True).replace('No Limit', 10**6).iterrows() if r['From'] <= s <= r['To']))
result = pd.DataFrame(df.nlargest(2, 'Salary After Deduction'), columns=['Names', 'Salary']).set_index('Names').reset_index()
                    
                  

&&&

Leave a Reply