Ravindra BagaleCourses & study guides मराठी Track your progress

Swiggy Dashboard in Excel: Food Delivery KPIs, Kitchen Prep Time, On-Time % and Rain Delays

A food delivery app must bring hot food fast. Kitchen time, rider time and rain all change how happy the customer is. This page gives you a ready Excel dashboard for it. It has 1,600 example rows, 15 KPI cards, 6 charts and 3 drop-down filters.

What you'll learn on this page

  • Why a Swiggy-style food delivery business needs a dashboard
  • What is inside each sheet of the workbook
  • What the 15 KPIs mean and the formula behind each
  • How the City, Cuisine and Month drop-downs change every number
  • How to add new data safely
  • Common mistakes and how to avoid them

Download the template: swiggy-dashboard-template.xlsx (Excel workbook, 6 sheets, example data).

Example data only

Every number in this workbook is made up for practice. It is not real Swiggy data and not an official report. The colours are only inspired by the brand; there is no logo.

Swiggy-style food delivery dashboard in Excel: 15 KPI cards, 3 drop-down filters, 6 charts and a Top 5 table, with example data

Figure 1. The Dashboard sheet with all filters set to All (example data)

In short

This Swiggy-style food delivery dashboard shows 1,600 example rows on one screen. Pick a filter and all 15 KPI cards and 6 charts change at once. All data is made up for practice.

1. Why this dashboard, what it shows, how to start

Why

A food delivery app must bring hot food fast. Kitchen time, rider time and rain all change how happy the customer is. Looking at 1,600 rows one by one is slow. A dashboard turns them into a few clear numbers.

What

The dashboard answers questions like these:

  • Orders placed: Every order placed, delivered or cancelled.
  • Food GMV: Total menu value of delivered orders, before discounts.
  • Avg total time: Kitchen prep + rider time, order to door.
  • Cancellation rate: Cancelled orders ÷ all orders.

How

  1. Download swiggy-dashboard-template.xlsx.
  2. Open it in Excel. Click Enable Editing if Excel asks.
  3. Stay on the first sheet, Dashboard.
  4. Read the 15 cards from left to right, top to bottom.
  5. Then change one drop-down in row 6 and watch the numbers move.

2. What is inside the workbook

Why

Each sheet has one job. When you know the job, you know where to look and what not to touch.

What

Sheet What it holds
Dashboard 15 KPI cards, 3 yellow drop-down filters, 6 charts and a Top 5 table.
Data The example rows, one row per order. The last column, Inc, is a formula.
Calc Small helper tables (by month, by city and so on) that feed the charts.
Rules & Instructions How to use it, what each KPI means, data rules, how to add data, do's and don'ts.
Formulas used Every formula in the file, cell by cell, with what it does.
Lists The values shown in each drop-down list.

The Data sheet has these columns: OrderID, Month, City, Restaurant, Cuisine, Slot, Rain, DistanceKm, PrepMin, RideMin, TotalMin, OrderValue, Coupon, Discount, Member, DeliveryFee, RainFee, Status, Rating and Inc.

How

  1. Click each sheet tab at the bottom once.
  2. On Data, press Ctrl+Down to see the last row.
  3. On Rules & Instructions, read section 3 (data rules) before you type anything.
  4. On Formulas used, find any formula you want to learn.

3. The 15 KPIs: what each one means

Why

KPI means Key Performance Indicator: one number that tells you if the business is doing well. A KPI is useful only if everyone reads it the same way.

What

Example values are for all rows (every filter set to All). In the formulas, Data[Column] means that whole column on the Data sheet; in the workbook it is written as a range like Data!$B$2:$B$1601.

KPI What it means Formula (Dashboard cell) Example value
Orders placed Every order placed, delivered or cancelled. =COUNTIFS(Data[Inc],1)
Dashboard!B9
1,600
Delivered Orders with Status = Delivered. =COUNTIFS(Data[Inc],1,Data[Status],"Delivered")
Dashboard!E9
1,523
Food GMV Total menu value of delivered orders, before discounts. =SUMIFS(Data[OrderValue],Data[Inc],1,Data[Status],"Delivered")
Dashboard!H9
₹6,20,910
Avg order value Average bill of a delivered order. =IFERROR((SUMIFS(Data[OrderValue],Data[Inc],1,Data[Status],"Delivered"))/(COUNTIFS(Data[Inc],1,Data[Status],"Delivered")),0)
Dashboard!K9
₹408
Avg total time Kitchen prep + rider time, order to door. Target rule: card turns red when the value is > 35. =IFERROR(AVERAGEIFS(Data[TotalMin],Data[Inc],1,Data[Status],"Delivered"),0)
Dashboard!N9
30.9 min
Avg kitchen prep Minutes the restaurant took to pack the food. =IFERROR(AVERAGEIFS(Data[PrepMin],Data[Inc],1,Data[Status],"Delivered"),0)
Dashboard!B13
15.9 min
On-time (≤35 min) Delivered orders that arrived in 35 minutes or less. Target rule: card turns green when the value is ≥ 0.7. =IFERROR((COUNTIFS(Data[Inc],1,Data[Status],"Delivered",Data[TotalMin],"<=35"))/(COUNTIFS(Data[Inc],1,Data[Status],"Delivered")),0)
Dashboard!E13
72.3%
Avg distance Average km the rider travelled. =IFERROR(AVERAGEIFS(Data[DistanceKm],Data[Inc],1,Data[Status],"Delivered"),0)
Dashboard!H13
4.2 km
Cancellation rate Cancelled orders ÷ all orders. Target rule: card turns red when the value is > 0.06. =IFERROR((COUNTIFS(Data[Inc],1,Data[Status],"Cancelled"))/(COUNTIFS(Data[Inc],1)),0)
Dashboard!K13
4.8%
Member orders Share of orders from paid members (free delivery in this example). =IFERROR((COUNTIFS(Data[Inc],1,Data[Member],"Yes"))/(COUNTIFS(Data[Inc],1)),0)
Dashboard!N13
31.2%
Coupon usage Share of orders where a coupon was applied. =IFERROR((COUNTIFS(Data[Inc],1,Data[Coupon],"Yes"))/(COUNTIFS(Data[Inc],1)),0)
Dashboard!B17
45.9%
Discount % of GMV Discount given ÷ GMV. Target rule: card turns red when the value is > 0.1. =IFERROR((SUMIFS(Data[Discount],Data[Inc],1,Data[Status],"Delivered"))/(SUMIFS(Data[OrderValue],Data[Inc],1,Data[Status],"Delivered")),0)
Dashboard!E17
9.1%
Fee income Delivery fees plus rain fees on delivered orders. =SUMIFS(Data[DeliveryFee],Data[Inc],1,Data[Status],"Delivered")+SUMIFS(Data[RainFee],Data[Inc],1,Data[Status],"Delivered")
Dashboard!H17
₹41,394
Rain-hour time gap How many minutes slower rainy-hour orders were. =IFERROR(AVERAGEIFS(Data[TotalMin],Data[Inc],1,Data[Status],"Delivered",Data[Rain],"Yes"),0)-IFERROR(AVERAGEIFS(Data[TotalMin],Data[Inc],1,Data[Status],"Delivered",Data[Rain],"No"),0)
Dashboard!K17
+5.9 min
Avg rating Average customer rating of delivered orders. Target rule: card turns green when the value is ≥ 4.2. =IFERROR(AVERAGEIFS(Data[Rating],Data[Inc],1,Data[Status],"Delivered"),0)
Dashboard!N17
4.33 ★

How

  1. Read the small grey line under each card: it says what the card counts.
  2. A green card meets its target rule. A red card needs attention.
  3. Click a card and look at the formula bar to see the real formula.
  4. Change a filter, for example City = Pune, and see which cards turn red or green.

4. The drop-down filters

Why

A total for the whole business hides problems. Filters let you look at one City, one Cuisine or one Month at a time.

What

Row 6 has three yellow cells with drop-down lists: City, Cuisine and Month. Each list starts with All. The Data sheet has one extra column, Inc (include). Its formula gives 1 when the row matches all three filters, otherwise 0:

=IF(AND(OR(Dashboard!$C$6="All",C2=Dashboard!$C$6),OR(Dashboard!$F$6="All",E2=Dashboard!$F$6),OR(Dashboard!$I$6="All",B2=Dashboard!$I$6)),1,0)

Every KPI and chart uses Data[Inc],1 as its first condition, so only matching rows are counted.

How

  1. Click the yellow cell next to City.
  2. Click the small arrow and pick a value.
  3. Look at the line 'Rows in view' to see how many rows match.
  4. Pick All to remove that filter.
  5. Set all three back to All before you save.

5. The charts and the Top 5 table

Why

Numbers tell you how much. Charts show you where and when: which month dropped, which city leads.

What

  • Orders and GMV by meal slot
  • GMV share by cuisine
  • Prep vs ride minutes by city
  • GMV by month
  • Avg kitchen prep by cuisine (min)
  • Rain vs dry: avg delivery minutes
  • Table: Top 5 restaurants by GMV (uses INDEX, MATCH and LARGE)

Each chart reads a small table on the Calc sheet. Those tables also use the Inc column, so the charts follow the filters.

How

  1. Point at a bar or line to see its exact value.
  2. To see where a chart's numbers come from, right-click it and choose Select Data.
  3. Open the Calc sheet and find the table with the same title.
  4. Do not type in Calc; it is all formulas.

6. How to add new data

Why

A dashboard is only useful if you keep feeding it. Adding rows the wrong way breaks totals without any error.

What

Column What it holds Rule
OrderID Unique order code Never repeat
Month, City When and where From Lists
Restaurant, Cuisine, Slot Kitchen code, food type, meal slot Exact spellings
Rain Was it raining when ordered Yes/No
DistanceKm Restaurant to door Decimal km
PrepMin, RideMin, TotalMin Kitchen, rider and total minutes Blank for cancelled; TotalMin = Prep + Ride
OrderValue, Coupon, Discount Menu value ₹, coupon used, ₹ off Discount 0 when Coupon = No
Member, DeliveryFee, RainFee Member flag and ₹ fees Members pay 0 delivery fee in this example
Status, Rating Delivered/Cancelled and 1-5 stars Rating blank for cancelled

How

  1. Go to the first empty row under the Data table.
  2. Type or paste the new rows. Keep the same spelling as the lists (for example Pune).
  3. Check that Inc filled down by itself (it shows 1 or 0).
  4. The formulas read rows 2 to 1601. If your data goes past row 1601, use Find & Replace on the Dashboard and Calc sheets to change 1601 to your new last row.
  5. Press F9 if numbers do not update, then set the filters to All and compare totals.

Use it in 3 steps

1) Open the Dashboard sheet. 2) Pick a value in a yellow cell in row 6, like City = Pune. 3) Read the cards: green is good, red needs attention.

7. Formulas used

This is the same list as the 'Formulas used' sheet. A formula marked 'copied down' is the same in the rows below it.

Cell Formula What it does
Data!T2 =IF(AND(OR(Dashboard!$C$6="All",C2=Dashboard!$C$6),OR(Dashboard!$F$6="All",E2=Dashboard!$F$6),OR(Dashboard!$I$6="All",B2=Dashboard!$I$6)),1,0) Inc flag: 1 when the row matches every Dashboard filter (copied down every row)
Dashboard!K6 ="Rows in view: "&TEXT(SUM(Data!$T$2:$T$1601),"#,##0")&" of 1,600 | Yellow cells = drop-down filters" Counts rows in view
Dashboard!B9 =COUNTIFS(Data!$T$2:$T$1601,1) KPI: Orders placed
Dashboard!E9 =COUNTIFS(Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered") KPI: Delivered
Dashboard!H9 =SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered") KPI: Food GMV
Dashboard!K9 =IFERROR((SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered"))/(COUNTIFS(Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered")),0) KPI: Avg order value
Dashboard!N9 =IFERROR(AVERAGEIFS(Data!$K$2:$K$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered"),0) KPI: Avg total time
Dashboard!B13 =IFERROR(AVERAGEIFS(Data!$I$2:$I$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered"),0) KPI: Avg kitchen prep
Dashboard!E13 =IFERROR((COUNTIFS(Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered",Data!$K$2:$K$1601,"<=35"))/(COUNTIFS(Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered")),0) KPI: On-time (≤35 min)
Dashboard!H13 =IFERROR(AVERAGEIFS(Data!$H$2:$H$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered"),0) KPI: Avg distance
Dashboard!K13 =IFERROR((COUNTIFS(Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Cancelled"))/(COUNTIFS(Data!$T$2:$T$1601,1)),0) KPI: Cancellation rate
Dashboard!N13 =IFERROR((COUNTIFS(Data!$T$2:$T$1601,1,Data!$O$2:$O$1601,"Yes"))/(COUNTIFS(Data!$T$2:$T$1601,1)),0) KPI: Member orders
Dashboard!B17 =IFERROR((COUNTIFS(Data!$T$2:$T$1601,1,Data!$M$2:$M$1601,"Yes"))/(COUNTIFS(Data!$T$2:$T$1601,1)),0) KPI: Coupon usage
Dashboard!E17 =IFERROR((SUMIFS(Data!$N$2:$N$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered"))/(SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered")),0) KPI: Discount % of GMV
Dashboard!H17 =SUMIFS(Data!$P$2:$P$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered")+SUMIFS(Data!$Q$2:$Q$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered") KPI: Fee income
Dashboard!K17 =IFERROR(AVERAGEIFS(Data!$K$2:$K$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered",Data!$G$2:$G$1601,"Yes"),0)-IFERROR(AVERAGEIFS(Data!$K$2:$K$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered",Data!$G$2:$G$1601,"No"),0) KPI: Rain-hour time gap
Dashboard!N17 =IFERROR(AVERAGEIFS(Data!$S$2:$S$1601,Data!$T$2:$T$1601,1,Data!$R$2:$R$1601,"Delivered"),0) KPI: Avg rating
Calc!B5 =COUNTIFS(Data!$T$2:$T$1601,1,Data!$F$2:$F$1601,$A5) By meal slot: Orders for Breakfast (copied down)
Calc!C5 =SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$F$2:$F$1601,$A5,Data!$R$2:$R$1601,"Delivered") By meal slot: GMV for Breakfast (copied down)
Calc!B14 =SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$E$2:$E$1601,$A14,Data!$R$2:$R$1601,"Delivered") By cuisine: GMV for Biryani (copied down)
Calc!C14 =COUNTIFS(Data!$T$2:$T$1601,1,Data!$E$2:$E$1601,$A14) By cuisine: Orders for Biryani (copied down)
Calc!D14 =IFERROR(AVERAGEIFS(Data!$I$2:$I$1601,Data!$T$2:$T$1601,1,Data!$E$2:$E$1601,$A14,Data!$R$2:$R$1601,"Delivered"),0) By cuisine: Avg prep for Biryani (copied down)
Calc!B26 =IFERROR(AVERAGEIFS(Data!$I$2:$I$1601,Data!$T$2:$T$1601,1,Data!$C$2:$C$1601,$A26,Data!$R$2:$R$1601,"Delivered"),0) By city: Avg prep for Pune (copied down)
Calc!C26 =IFERROR(AVERAGEIFS(Data!$J$2:$J$1601,Data!$T$2:$T$1601,1,Data!$C$2:$C$1601,$A26,Data!$R$2:$R$1601,"Delivered"),0) By city: Avg ride for Pune (copied down)
Calc!D26 =COUNTIFS(Data!$T$2:$T$1601,1,Data!$C$2:$C$1601,$A26) By city: Orders for Pune (copied down)
Calc!B36 =SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$B$2:$B$1601,$A36,Data!$R$2:$R$1601,"Delivered") By month: GMV for Jan (copied down)
Calc!C36 =IFERROR(COUNTIFS(Data!$T$2:$T$1601,1,Data!$B$2:$B$1601,$A36,Data!$R$2:$R$1601,"Delivered",Data!$K$2:$K$1601,"<=35")/COUNTIFS(Data!$T$2:$T$1601,1,Data!$B$2:$B$1601,$A36,Data!$R$2:$R$1601,"Delivered"),0) By month: On-time % for Jan (copied down)
Calc!B46 =IFERROR(AVERAGEIFS(Data!$K$2:$K$1601,Data!$T$2:$T$1601,1,Data!$G$2:$G$1601,$A46,Data!$R$2:$R$1601,"Delivered"),0) Rain vs dry hours: Avg total min for No (copied down)
Calc!C46 =IFERROR(COUNTIFS(Data!$T$2:$T$1601,1,Data!$G$2:$G$1601,$A46,Data!$R$2:$R$1601,"Cancelled")/COUNTIFS(Data!$T$2:$T$1601,1,Data!$G$2:$G$1601,$A46),0) Rain vs dry hours: Cancel % for No (copied down)
Calc!B52 =SUMIFS(Data!$L$2:$L$1601,Data!$T$2:$T$1601,1,Data!$D$2:$D$1601,$A52,Data!$R$2:$R$1601,"Delivered") By restaurant: GMV for Pune R-01 (copied down)
Calc!C52 =COUNTIFS(Data!$T$2:$T$1601,1,Data!$D$2:$D$1601,$A52) By restaurant: Orders for Pune R-01 (copied down)
Calc!D52 =IFERROR(AVERAGEIFS(Data!$I$2:$I$1601,Data!$T$2:$T$1601,1,Data!$D$2:$D$1601,$A52,Data!$R$2:$R$1601,"Delivered"),0) By restaurant: Avg prep for Pune R-01 (copied down)
Calc!E52 =IFERROR(AVERAGEIFS(Data!$S$2:$S$1601,Data!$T$2:$T$1601,1,Data!$D$2:$D$1601,$A52,Data!$R$2:$R$1601,"Delivered"),0) By restaurant: Avg rating for Pune R-01 (copied down)
Calc!F52 =B52+ROW()/1000000 By restaurant: Rank key for Pune R-01 (copied down)
Dashboard!D55 =IFERROR(INDEX(Calc!$A$52:$A$99,MATCH(LARGE(Calc!$F$52:$F$99,$B55),Calc!$F$52:$F$99,0)),"-") Top 5 restaurants by GMV: column 'Restaurant' (copied down)
Dashboard!F55 =IFERROR(INDEX(Calc!$B$52:$B$99,MATCH(LARGE(Calc!$F$52:$F$99,$B55),Calc!$F$52:$F$99,0)),"-") Top 5 restaurants by GMV: column 'GMV' (copied down)
Dashboard!H55 =IFERROR(INDEX(Calc!$C$52:$C$99,MATCH(LARGE(Calc!$F$52:$F$99,$B55),Calc!$F$52:$F$99,0)),"-") Top 5 restaurants by GMV: column 'Orders' (copied down)
Dashboard!J55 =IFERROR(INDEX(Calc!$D$52:$D$99,MATCH(LARGE(Calc!$F$52:$F$99,$B55),Calc!$F$52:$F$99,0)),"-") Top 5 restaurants by GMV: column 'Avg prep' (copied down)
Dashboard!L55 =IFERROR(INDEX(Calc!$E$52:$E$99,MATCH(LARGE(Calc!$F$52:$F$99,$B55),Calc!$F$52:$F$99,0)),"-") Top 5 restaurants by GMV: column 'Avg rating' (copied down)

8. Common mistakes

Mistake What goes wrong Fix
Typing ₹ or a comma as text in a number cell SUMIFS and AVERAGEIFS skip text, so totals become too small. Type only the number. The cell format adds ₹.
A different spelling, like an extra space after a name The row never matches the City filter or the Calc tables. Copy values from the Lists sheet, or use Data Validation.
Averaging the per-row values to get Avg order value An average of averages gives the wrong answer. Divide totals, as the KPI formula does: =IFERROR((SUMIFS(Data[OrderValue],Data[Inc],1,Data[Status],"Delivered"))/(COUNTIFS(Data[Inc],1,Data[Status],"Delivered")),0)
Adding rows below row 1601 and not updating the ranges New rows are left out of every KPI. Update the last row number in the formulas (see step 4 above).
Typing over a KPI card or the Inc column The formula is lost and the card stops changing. Press Ctrl+Z, or copy the formula back from the 'Formulas used' sheet.
Showing these numbers as real company results This is example data, not Swiggy data. Always say 'example data' when you share a screenshot.

9. FAQ

How do I calculate Avg order value in Excel?

Average bill of a delivered order. The workbook uses =IFERROR((SUMIFS(Data[OrderValue],Data[Inc],1,Data[Status],"Delivered"))/(COUNTIFS(Data[Inc],1,Data[Status],"Delivered")),0) in Dashboard!K9.

How do I calculate Cancellation rate in Excel?

Cancelled orders ÷ all orders. Formula: =IFERROR((COUNTIFS(Data[Inc],1,Data[Status],"Cancelled"))/(COUNTIFS(Data[Inc],1)),0).

How do the drop-down filters change every KPI?

Each Data row has an Inc formula. It gives 1 when the row matches all three drop-downs (City, Cuisine, Month), or the drop-down says All. Every KPI counts only rows where Inc = 1.

Is this real Swiggy data?

No. All 1,600 rows are made up for practice. The colours are only inspired by the brand. It is not an official Swiggy report.

Which Excel version do I need?

Excel 2010 or newer works, because the file uses COUNTIFS, SUMIFS, AVERAGEIFS, IFERROR, INDEX and MATCH. We checked it in LibreOffice Calc with zero errors.

10. Practice tasks

  1. Set City = Pune. Write down the new value of Food GMV.
  2. Which meal slot is highest in the chart 'Orders and GMV by meal slot'?
  3. Add one new row to the Data sheet and check that Orders placed changes.
  4. Change one target rule in Conditional Formatting (Home › Conditional Formatting › Manage Rules) and watch the card colour.

Remember

KPI cards, the Calc sheet and the Inc column hold formulas, so never type on them. Add new data only under the Data table, with the same spellings.

Related: all Excel dashboards · Excel dashboards chapter · SUMIFS, COUNTIFS and AVERAGEIFS · KPI cards in Excel

Loading practice tasks...

  1. Total parcels (Easy): Add up Parcels in D2:D11.
  2. Average cost (Easy): Average of E2:E11, rounded to 2 decimals.
  3. Rows in Royal Mail (Easy): How many rows have Carrier "Royal Mail"?
  4. Largest parcels (Easy): The largest value in D2:D11.
  5. Parcels for Royal Mail (Medium): Total of D2:D11 where B is "Royal Mail".
  6. Royal Mail in Bristol (Medium): Total of D2:D11 where B is "Royal Mail" and C is "Bristol".
  7. Best in Royal Mail (Medium): Largest E2:E11 value where B is "Royal Mail".
  8. Value of row 2 (Medium): D2 times E2.
  9. Look up Sophie Martin (Medium): The Parcels for "Sophie Martin" (use a lookup on column A).
  10. Total value (Hard): Sum of D times E for all rows.
  11. Share of Royal Mail (Hard): Share of D2:D11 that is "Royal Mail", rounded to 3 decimals.
  12. Rank of row 2 (Hard): Rank of D2 among D2:D11 (largest = 1).
  13. Above average? (Hard): "Above" if E2 is above the average of E2:E11, else "Below".