fx Build 1 — Sales Dashboard
ENहिन्दी

Build: Sales Dashboard — revenue trend, top products, region heatmap, salesperson leaderboard, target vs actual gauge

⏱ 60 min

आप क्या सीखेंगे

  • डेटा (resources/sales)
  • Inputs (CALC)
  • KPI ब्लॉक (CALC)

समझिए

1. डेटा (resources/sales)

फ़ाइल रो कॉलम
sales_data.csv 50,000 OrderID, OrderDate, FY, StoreName, City, Region, Product, Category, Salesperson, Qty, UnitPrice, Discount, Revenue, Cost
sales_targets.csv 48 Month, Region, Target (FY2025-26)

दोनों को Power Query (या From Text/CSV) से RAW शीट पर Tables tblSales और tblTargets के रूप में लोड करें। शीट: README | DASH | CALC | RAW_Sales | RAW_Targets।

2. Inputs (CALC)

नाम सेल में क्या
lst_FY =SORT(UNIQUE(tblSales[FY]),,-1)
lst_Regions =VSTACK("All", SORT(UNIQUE(tblSales[Region])))
inp_FY Data Validation लिस्ट =lst_FY → FY2025-26
inp_Region Data Validation लिस्ट =lst_Regions → All
inp_ShowLY checkbox link (TRUE)
k_Reg =IF(inp_Region="All","*",inp_Region) ("All" वाली तरकीब)
inp_LYFY ="FY"&(LEFT(RIGHT(inp_FY,7),4)-1)&"-"&RIGHT(LEFT(RIGHT(inp_FY,7),4),2) → FY2024-25

3. KPI ब्लॉक (CALC)

kpi_Rev      =SUMIFS(tblSales[Revenue], tblSales[FY], inp_FY, tblSales[Region], k_Reg)
kpi_RevLY    =SUMIFS(tblSales[Revenue], tblSales[FY], inp_LYFY, tblSales[Region], k_Reg)
kpi_YoY      =IFERROR(kpi_Rev/kpi_RevLY-1, "")
kpi_Margin   =IFERROR(1 - SUMIFS(tblSales[Cost], tblSales[FY], inp_FY, tblSales[Region], k_Reg)/kpi_Rev, "")
kpi_Orders   =COUNTIFS(tblSales[FY], inp_FY, tblSales[Region], k_Reg)
kpi_Target   =SUMIFS(tblTargets[Target], tblTargets[Region], k_Reg, tblTargets[Month], ">="&DATE(VALUE(MID(inp_FY,3,4)),4,1), tblTargets[Month], "<"&DATE(VALUE(MID(inp_FY,3,4))+1,4,1))
kpi_Ach      =IF(kpi_Target=0, "", kpi_Rev/kpi_Target)

(tblTargets में सिर्फ़ FY2025-26 है; कई साल के targets के लिए FY शर्त जोड़ें।)

DASH पर कार्ड (मॉड्यूल 3 लेसन 1): Revenue ₹29.50 cr ▲ 11.0% · Margin 16.5% · Orders 26,309 ▲ 11.1% · Target 96.6%।

tblTargets[Month] को real date बनाएँ। FY2024-25 के targets नहीं हैं: “Target उपलब्ध नहीं” लिखें, achievement blank रखें और gauge छिपाएँ। Blank achievement में Filled helper 0 रहे; बाकी स्थिति में उसे 0 और 1.2 के बीच रखें। Blank को 0% न दिखाएँ। Heatmap selected FY में सभी regions की तुलना है: “सभी regions — FY comparison” label दें; Region selector बाकी sales visuals बदलता है।

4. Visual 1 — Revenue trend (CY बनाम LY)

CALC!B20 में महीनों की शुरुआत, C20 में CY, D20 में LY — बिल्कुल मॉड्यूल 4 लेसन 3 वाले फ़ॉर्मूले, k_Reg के साथ। नाम ch_Months, ch_CY, ch_LY से line चार्ट; CY accent में, LY ग्रे में; सिर्फ़ आख़िरी पॉइंट पर लेबल।

FY2025-26 (₹ लाख): Apr 191.9 · May 204.7 · Jun 216.5 · Jul 175.5 · Aug 232.2 · Sep 247.5 · Oct 360.1 · Nov 364.8 · Dec 267.0 · Jan 221.8 · Feb 207.4 · Mar 260.7। जुलाई को छोड़कर (175.5 बनाम 183.6) हर महीना पिछले साल से आगे — डैशबोर्ड पर इसका नोट देने लायक है।

5. Visual 2 — Top 5 प्रोडक्ट

k_Reg और N = 5 के साथ Top-N LET फ़ॉर्मूला (मॉड्यूल 4 लेसन 3)। सॉर्ट bar चार्ट, वैल्यू ₹ लाख में। सारे रीजन: Laptop 991.0 · Smartphone 754.8 · Smartwatch 210.8 · Earbuds 178.6 · Study Table 160.4। (सिर्फ़ West: Laptop 240.2 · Smartphone 189.7 · Smartwatch 56.7 · Earbuds 46.9 · Study Table 41.5।)

6. Visual 3 — Region × Month heatmap

रीजन नीचे (A40 =SORT(UNIQUE(tblSales[Region]))), महीने आड़े (B39 =TOROW(B20#)), एक फ़ॉर्मूला 4 × 12 ग्रिड भरता है:

=SUMIFS(tblSales[Revenue], tblSales[Region], A40#, tblSales[OrderDate], ">="&B39#, tblSales[OrderDate], "<"&EDATE(B39#,1)) / 10^5

इसे DASH पर linked picture (मॉड्यूल 4 लेसन 4) या रेफ़रेंस सेल से दिखाएँ; सफ़ेद → accent 2-colour scale, 0 दशमलव, छोटा फ़ॉन्ट। सबसे गर्म सेल: North Oct 118.9 और Nov 118.8; सबसे ठंडा: East Jul 29.3।

7. Visual 4 — Salesperson leaderboard

=LET(sp, UNIQUE(tblSales[Salesperson]),
     rev, SUMIFS(tblSales[Revenue], tblSales[Salesperson], sp, tblSales[FY], inp_FY, tblSales[Region], k_Reg),
     ord, COUNTIFS(tblSales[Salesperson], sp, tblSales[FY], inp_FY, tblSales[Region], k_Reg),
     st,  XLOOKUP(sp, tblSales[Salesperson], tblSales[StoreName]),
     t,   FILTER(HSTACK(sp, st, ROUND(rev/10^5,1), ord), rev>0),
     SORTBY(t, CHOOSECOLS(t,3), -1))

रैंक (SEQUENCE) और revenue पर data bars के साथ top 5 और bottom 3 (TAKE(x,5), TAKE(x,-3)) दिखाएँ। सारे रीजन top 5 (₹ लाख): Amit (Karol Bagh) 251.8 · Pooja (Karol Bagh) 241.9 · Rohit (Connaught Place) 228.1 · Sneha (Connaught Place) 220.9 · Anjali (Andheri) 193.8। सबसे नीचे: Ritika (Salt Lake) 120.1।

8. Visual 5 — Target बनाम actual gauge

आधा-donut "progress gauge":

Helper फ़ॉर्मूला
Filled =IF(kpi_Ach="",0,MAX(0,MIN(kpi_Ach,1.2)))
Empty =1.2 - Filled
Hidden half =1.2

इन तीनों का Doughnut चार्ट → Format Series → Angle of first slice 270°, hole size 65% → Hidden half: No fill → Filled: accent (या ≥ 100% पर हरा, दो series से), Empty: हल्का ग्रे। बीच में =TEXT(kpi_Ach,"0.0%") से जुड़ा टेक्स्ट बॉक्स → 96.6%, और subtitle "₹29.50 cr of ₹30.55 cr target"।

कई रीजन चाहिए तो bullet chart (मॉड्यूल 3 लेसन 2) बेहतर — gauge एक नंबर के लिए बहुत जगह लेता है। कई डैशबोर्ड कुल target के लिए एक gauge और रीजन के लिए bullets दिखाते हैं।

9. लेआउट और इंटरैक्टिविटी

┌ Title (dynamic) · Data as of 31-Mar-2026          [FY ▼] [Region ▼] [☑ LY] ┐
│ [Revenue] [Margin] [Orders] [Target gauge]                                 │
│ [Revenue trend CY vs LY — line]          │ [Top 5 products — bar]          │
│ [Region × Month heatmap]                 │ [Leaderboard top 5 / bottom 3]  │
└────────────────────────────────────────────────────────────────────────────┘

Dynamic टाइटल: ="Sales Dashboard — "&inp_FY&" | "&IF(inp_Region="All","All regions",inp_Region)। Insight लाइन: =IF(kpi_YoY="","No prior-year data","Revenue "&IF(kpi_YoY>=0,"up ","down ")&TEXT(ABS(kpi_YoY),"0.0%")&" vs LY")&" · "&IF(kpi_Ach="","Target not available",TEXT(kpi_Ach,"0.0%")&" of target")।

10. जाँच की चेकलिस्ट (answer key)

चुनाव Revenue YoY Achievement
FY2025-26, All ₹29.50 cr +11.0% 96.6%
FY2025-26, West ₹7.48 cr +6.3% 92.4%
FY2025-26, South ₹7.14 cr +15.1% 100.1%
FY2024-25, All ₹26.57 cr (खाली — पहले का डेटा नहीं) (targets सिर्फ़ FY25-26 के)

यह भी जाँचें: Region बदलने पर region-scoped visuals अपडेट हों; labelled all-region heatmap स्थिर रहे; LY टिक हटाने पर ग्रे लाइन छिपती है; कहीं #N/A या #SPILL! नहीं; एक landscape पेज पर प्रिंट होता है।

आम गलतियाँ

inp_FY की जगह फ़ॉर्मूलों के अंदर "FY2025-26" फ़िक्स लिखना। जब कोई सेल्सपर्सन दो स्टोर में काम करे तब XLOOKUP से स्टोर लेना (यहाँ हर एक एक ही स्टोर में है — भरोसा करने से पहले COUNTIFS से जाँचें)। Gauge में असली नंबर न लिखा होना। बहुत सारे visuals — इस ब्रीफ़ को ठीक पाँच चाहिए।

अभ्यास

mediumपूरा डैशबोर्ड बनाएँ और जाँच चेकलिस्ट की हर रो पास करें। फिर किसी सहकर्मी के साथ 5-second टेस्ट करें: उन्हें कहना चाहिए "target से नीचे, West समस्या है, Oct–Nov पीक हैं"।
FY2025-26 All/West/South revenue 294996410/74771585/71432222.50; achievement लगभग 96.6%/92.4%/100.1% हों। FY2024-25 revenue 265658820 पर target/earlier-year comparison उपलब्ध नहीं। Heatmap all-region FY comparison label के साथ स्थिर, बाकी views Region से बदलें। No-data में gauge छिपे और formula errors न दिखें।

प्रश्नोत्तरी

FY2024-25 में achievement क्या दिखाए?
उपलब्ध नहीं; targets केवल FY2025-26 के हैं
FY2025-26 में सबसे कम achievement किस region का है?
West, लगभग 92.4%
क्या all-region heatmap Region selector से बदले?
नहीं; उसे selected FY का all-region comparison कहें
Build: Sales Dashboard — revenue trend, top products, region heatmap, salesperson leaderboard, target vs actual gauge · हिंदी | ExcelWalaa