Ravindra BagaleCourses & study guides English Track your progress

Power BI Power Query मध्ये messy sales data clean कसा करायचा

तुम्ही orders ची file download करता, Power BI मध्ये load करता आणि chart बनवता. Total बरोबर वाटतो म्हणून पाठवून देता. दुसऱ्या दिवशी कोणीतरी विचारतं: एक order दोनदा का मोजलाय? Table च्या पहिल्या row मध्ये "Blinkit Maharashtra orders export" का लिहिलंय? Sales column add up का होत नाही? Problem chart मध्ये नव्हता, data मध्ये होता. या chapter मध्ये आपण कोणताही visual बनवण्याआधी Power Query मध्ये file clean करणार, आणि कोणते rows delete करायचे आणि कोणते ठेवायचेच, हे ठरवणारा एक नियम शिकणार.

या chapter मध्ये काय शिकणार

  • Get data › Text/CSV › Transform Data
  • Remove Top Rows आणि Use First Row as Headers
  • ID columns आणि metric columns: काय delete करायचं
  • Blank आणि duplicate order IDs काढणं
  • NA ऐवजी null, 0 नाही
  • "$" च्या आधीचा number काढणं
  • Whole Number, Decimal आणि Date types
  • Close & Apply नंतर row count check

Practice files: blinkit-orders-small-raw.csv (या page वरचे 12 rows) आणि blinkit-orders-raw.csv (असाच गोंधळ असलेले 315 rows, practice साठी).

काल्पनिक data: इथले सगळे orders, products, stores आणि आकडे practice साठी बनवलेले आहेत. File Maharashtra मधल्या शहरांतल्या Blinkit सारख्या quick-commerce app च्या export सारखी दिसते, पण कोणताही खरा order, दुकान किंवा माणूस वापरलेला नाही. Amounts ₹ मध्ये आणि dates DD-MM-YYYY मध्ये आहेत.

1. Problem काय आहे

Notepad मध्ये उघडली की file अशी दिसते:

Line काय दिसतं
1 Blinkit Maharashtra orders export (fictional practice data),,,,,,,,,,,, – हे title आहे, data नाही
2 order_id,product_id,store_id,city,order_date,sales,price,revenue,stock,promo_type,promo_bin,delivery_date,Column13 – खरे headers
3 पासून 12 order rows: काही blank, काही repeat, काहींमध्ये NA

अशीच report मध्ये load केली तर:

  1. पहिली line title असल्यामुळे Power BI columns ना Column1, Column2 … म्हणतो.
  2. BLK1003 आणि BLK1006 दोनदा मोजले जातात.
  3. "2$" हा text आहे, म्हणून sales चा sum होत नाही.
  4. Price मधल्या "NA" मुळे column text राहतो, किंवा number केल्यावर errors येतात.

2. सोप्या भाषेत idea

Power Query म्हणजे स्वयंपाकघर, report म्हणजे जेवणाचं टेबल. भाज्या एकदाच स्वयंपाकघरात धुवायच्या आणि चिरायच्या; मग पुढे जे वाढाल ते clean असतं. प्रत्येक cleaning action step म्हणून save होते, आणि refresh केल्यावर Power BI ते steps परत चालवतो.

काय delete करायचं, ते हा एक नियम ठरवतो:

Column type उदाहरण Blank / NA Duplicates
Primary ID (एक row = एक order) order_id row delete जास्तीचे rows delete
Foreign ID (दुसऱ्या table कडे बोट) product_id, store_id row delete ठेवा (एक product अनेक वेळा विकला जातो)
Metric (add किंवा average करायचे आकडे) price, revenue, stock, sales row ठेवा, NA ऐवजी null ठेवा

Metric missing असेल तरी row का ठेवायचा? कारण order तर झालाय ना. एका order चा revenue माहीत नसला तरी तो order "Total orders" मध्ये मोजला जातो, त्याचे units "Sales" मध्ये जातात आणि त्याचं city chart मध्ये दिसतं. Row delete केला तर हे सगळंच जातं.

0 का नाही, null का? Null म्हणजे "माहीत नाही". Power BI चे SUM आणि AVERAGE null सोडून देतात. 0 हा खरा आकडा आहे: तो सांगतो की price शून्य होती, आणि प्रत्येक average खाली ओढतो.

Primary IDorder_idblank → row deleteduplicate → जास्तीचे rows deleteForeign IDproduct_id / store_idblank / NA → row deleteduplicate → ठेवाMetricprice / revenue / stockNA → null, row ठेवाrow कधीच delete नाहीचित्र (काल्पनिक data)

Figure 1. कोणते rows delete करायचे: blank किंवा duplicate primary ID आणि blank foreign ID जातात; metric missing असलेले rows राहतात, रिकाम्या cell मध्ये null (चित्र).

3. Data

12 order rows (line 1 आणि header line दाखवलेली नाही). लक्ष द्यायचे cells bold मध्ये:

# order_id product_id store_id city order_date sales price revenue stock
1 BLK1001 P101 PUN01 Pune 05-04-2025 2$ 120 240 35
2 BLK1002 P102 NSK01 Nashik 05-04-2025 1$ 450 450 12
3 BLK1003 P103 SLP01 Solapur 18-04-2025 3$ NA 270 20
4 BLK1003 P103 SLP01 Solapur 18-04-2025 3$ NA 270 20
5 (blank) P104 PUN01 Pune 20-04-2025 1$ 60 60 50
6 BLK1004 NA KOP01 Kolhapur 02-05-2025 2$ 80 160 18
7 BLK1005 P101 PUN01 Pune 05-05-2025 4$ 120 NA 33
8 BLK1006 P105 NSK01 Nashik 05-05-2025 1$ 999 999 7
9 BLK1007 (blank) SLP01 Solapur 12-06-2025 2$ 90 180 25
10 BLK1008 P102 KOP01 Kolhapur 21-06-2025 2$ 450 900 10
11 BLK1009 P103 PUN01 Pune 05-07-2025 5$ 90 450 NA
12 BLK1006 P105 NSK01 Nashik 05-05-2025 1$ 999 999 7

File मध्ये promo_type, promo_bin, delivery_date आणि रिकामा Column13 पण आहे. promo_bin आणि Column13 कोणत्याच report ला लागत नाहीत, म्हणून ते काढून टाकायचे.

काहीही click करण्याआधी pencil घेऊन अंदाज लावा: कोणते rows उरतील? (उत्तर section 5 मध्ये.)

4. Step by step

File load करा

  1. Power BI Desktop उघडा. Home › Get data › Text/CSV.
  2. blinkit-orders-small-raw.csv निवडा आणि Open करा.
  3. Preview window मध्ये Transform Data वर click करा (Load नाही). Power Query Editor उघडतो.

Table चा वरचा भाग नीट करा

  1. Home › Remove Rows › Remove Top Rows, 1 टाका, OK. Title line गेली.
  2. Home › Use First Row as Headers. आता columns ची नावं order_id, product_id वगैरे झाली.

Primary ID: order_id

  1. order_id चा filter arrow उघडा, (blank) untick करा, OK. Row 5 गेला.
  2. order_id header select करा. Home › Remove Rows › Remove Duplicates. दुसरा BLK1003 आणि दुसरा BLK1006 गेले.

Foreign ID: product_id

  1. product_id चा filter arrow उघडा, (blank) आणि NA untick करा, OK. Rows 6 आणि 9 गेले.
  2. इथे duplicates काढायचे नाहीत. P101, P102, P103, P105 एकापेक्षा जास्त वेळा विकले गेलेत, आणि ते बरोबरच आहे.

नको असलेले columns काढा

  1. Ctrl+click करून promo_bin आणि Column13 headers select करा, right-click › Remove Columns.

Metric columns: rows ठेवा, values fix करा

  1. sales header वर right-click › Transform › Extract › Text Before Delimiter, $ टाका, OK. "2$" चा "2" झाला.
  2. sales header च्या डावीकडचा type icon (ABC) › Whole Number.
  3. price header वर right-click › Replace Values. Value To Find: NA. Replace With: रिकामं ठेवा. Advanced options उघडून Match entire cell contents tick करा. OK.
  4. price चा type Decimal Number करा. रिकाम्या cell मध्ये आता null दिसतो.
  5. revenue साठी steps 13 आणि 14 करा.
  6. stock साठी step 13 करा, आणि type Whole Number करा.

DD-MM-YYYY मधल्या dates

  1. order_date वर right-click › Change Type › Using Locale…. Data Type: Date. Locale: English (India). OK.
  2. delivery_date साठी पण तेच करा.

Load करा आणि check करा

  1. Home › Close & Apply.
  2. Table view मध्ये जा (डावीकडचा grid icon) आणि screen च्या खाली row count वाचा.
1. Top row काढा + headers12 rows2. Blank order_id काढले11 rows3. Duplicates काढले9 rows4. Blank/NA product_id काढले7 rows5. sales, price, revenue, stock fix7 rows6. Locale ने dates + Close & Apply7 rowsचित्र (काल्पनिक data)

Figure 2. Cleaning steps क्रमाने, आणि प्रत्येक step नंतर 12-row file चा row count (चित्र).

5. तुमचा result असा दिसला पाहिजे

Table view मध्ये 7 rows:

order_id product_id store_id city order_date sales price revenue stock
BLK1001 P101 PUN01 Pune 05-04-2025 2 120 240 35
BLK1002 P102 NSK01 Nashik 05-04-2025 1 450 450 12
BLK1003 P103 SLP01 Solapur 18-04-2025 3 null 270 20
BLK1005 P101 PUN01 Pune 05-05-2025 4 120 null 33
BLK1006 P105 NSK01 Nashik 05-05-2025 1 999 999 7
BLK1008 P102 KOP01 Kolhapur 21-06-2025 2 450 900 10
BLK1009 P103 PUN01 Pune 05-07-2025 5 90 450 null

(Table view तुमच्या computer च्या date format मध्ये dates दाखवतो; dates त्याच असतात.)

हाताने check करा:

Check Value
Rows 7
Sales (units) चा sum 2 + 1 + 3 + 4 + 1 + 2 + 5 = 18
Revenue चा sum 240 + 450 + 270 + 999 + 900 + 450 = ₹3,309 (BLK1005 null आहे, तो सोडला जातो)
Average price (120 + 450 + 120 + 999 + 450 + 90) ÷ 6 = ₹371.50

6. काय झालं

Step उरलेले rows का
Headers नंतर 12 title line गेली, सगळे orders आहेत
Blank order_id काढले 11 order number नसलेला row order म्हणून मोजता येत नाही
Duplicate order_id काढले 9 BLK1003 आणि BLK1006 दोनदा होते
Blank / NA product_id काढले 7 product नसलेली order line product table शी जोडता येत नाही
Metric steps (sales, price, revenue, stock) 7 values fix झाल्या; एकही row delete झाला नाही

शेवटची line लक्षात ठेवा: metric steps values बदलतात, rows ची संख्या कधीच नाही.

Classroom line

Never leave NA in an ID column. Never leave null there either.

7. अजून थोडं खोलात

  • प्रत्येक click एक step आहे. उजवीकडे Applied Steps बघा: Source, Promoted Headers, Filtered Rows, Removed Duplicates… कोणत्याही step वर click केलं की त्या क्षणाचा data दिसतो. पुढच्या chapter मध्ये error fix करायला हेच वापरणार आहोत.
  • रिकामे cells आपोआप null होतात. Number column मध्ये रिकामा cell असेल तर type बदलल्यावर तो null होतो. "NA", "-" किंवा "n/a" सारखा text तसा होत नाही; तो आधी replace करावा लागतो.
  • "Match entire cell contents" का? ते नसेल तर त्याच column मधल्या मोठ्या value मधले NA अक्षरं पण replace होतात, जसं "NA-12" चं "-12" होईल. Tick केलं की फक्त पूर्ण NA असलेले cells बदलतात.
  • Dates साठी Using Locale का? English (United States) वर set असलेला computer 05-04-2025 ला 4 May वाचतो. File English (India) आहे असं सांगितलं की ती 5 April होते. बदलल्यानंतर तुम्हाला माहीत असलेली एक date check करा.
  • मोठ्या files साठी computer महत्त्वाचा. Power BI Desktop Windows वर चालतो आणि data memory मध्ये ठेवतो, म्हणून मोठ्या files ना RAM लागते. Hexa-core processor म्हणजे 6 cores असलेला एक CPU; जास्त cores आणि जास्त RAM मुळे refresh fast होतो. Power BI अडकला तर Task Manager (Ctrl+Shift+Esc) उघडा, आणि तो सतत "Not responding" असेल तरच Power BI चा task end करा, कारण save न केलेलं काम जातं.

8. नेहमीच्या चुका

चुकीचा result कारण उपाय
Columns ची नावं Column1, Column2 … Title line header म्हणून वापरली Remove Top Rows (1), मग Use First Row as Headers
7 ऐवजी 6 rows price मधला NA filter arrow ने काढला, त्यामुळे BLK1003 delete झाला तो Filtered Rows step delete करा; price वर Replace Values वापरा
7 ऐवजी 5 rows price आणि revenue दोन्हीमधून NA filter केला दोन्ही columns साठी तोच उपाय
Average price ₹371.50 ऐवजी ₹318.43 NA ऐवजी 0 टाकला, म्हणून 2,229 ला 6 ऐवजी 7 ने भागलं NA रिकाम्या value ने replace करा, म्हणजे null होईल
P101, P102 … एकदाच दिसतात आणि orders गायब product_id वर Remove Duplicates चालवलं Duplicates फक्त primary ID वर काढा
sales अजून डावीकडे (text) "$" काढला पण type बदलला नाही sales Whole Number करा
05-04-2025 ही 4 May दिसते Computer च्या US locale ने type बदलला Change Type › Using Locale › English (India)

Classroom line

If you filter this out, the whole row goes, not just the one cell.

Ravindra Bagale's Tip

Before you click Close & Apply, write down how many rows you expect and why. If Table view shows fewer, open Applied Steps and click each step from the top until the count drops: the step where it drops is the step that deleted good rows.

9. स्वतः practice करा

Practice task

blinkit-orders-raw.csv (315 order rows) याच steps ने clean करा.

  1. Table view मध्ये किती rows दिसतात?
  2. Sales (units) चा sum किती?
  3. Revenue चा sum किती?
  4. price, revenue आणि stock मध्ये किती nulls आहेत?

Hints: file मध्ये 12 blank order IDs आणि 15 repeat झालेले order rows आहेत. काही revenue cells NA नाहीत, रिकामे आहेत: ते replace न करताच null होतात.

Solution बघा
Step Rows
Headers नंतर 315
Blank order_id काढले 303
Duplicates काढले 288
Blank / NA product_id काढले 274
  1. 274 rows.
  2. Sales चा sum: 664 units.
  3. Revenue चा sum: ₹1,69,509 (default format मध्ये Power BI 169,509 दाखवतो).
  4. price: 18 nulls, revenue: 22 nulls (14 NA होते, 8 रिकामे), stock: 10 nulls.

256 rows आले तर तुम्ही price मधून NA filter केलाय. 234 आले तर price आणि revenue दोन्हीमधून.

10. Professional सारखा विचार करा

  • Business view. Revenue missing असणं हा source team साठी प्रश्न आहे, order घालवण्याचं कारण नाही. Row ठेवा, notes मध्ये null count लिहा ("22 orders चा revenue export मध्ये नाही") आणि team ला source मध्येच fix करायला सांगा.
  • Performance. नको असलेले columns लवकर काढा. कमी columns म्हणजे छोटं model आणि fast refresh.
  • Maintenance. पुन्हा शोधावे लागतील ते steps rename करा (step वर right-click › Rename, उदा. "Removed blank order_id"). पुढच्या महिन्याची file refresh वर याच steps मधून जाते.
  • प्रत्येक refresh ला check. Hidden check page वर row-count card ठेवा. Refresh नंतर count अचानक कमी झाला, तर export बदललाय.

Interview questions

  1. ID blank असेल तर कोणते rows delete करता, आणि metric blank असेल तर? Primary किंवा foreign ID blank असलेले rows delete; metric blank असलेले rows ठेवायचे, metric null ठेवायचा.
  2. NA ऐवजी 0 का नाही, null का? SUM आणि AVERAGE null सोडून देतात; 0 मोजला जातो आणि averages चुकतात.
  3. Duplicates कुठे काढता? फक्त primary key वर, उदा. order_id.
  4. Locale ने Change Type का? Computer चं region काहीही असो, DD-MM-YYYY dates day-month म्हणूनच वाचल्या जाव्यात म्हणून.

Recap

थोडक्यात

  1. Transform Data ने load करा, मग Remove Top Rows आणि Use First Row as Headers.
  2. Primary ID: blanks आणि duplicates काढा. Foreign ID: blanks काढा, duplicates ठेवा.
  3. Metric columns: rows कधीच delete नाहीत; NA ऐवजी null.
  4. "$" च्या आधीचा number काढा, बरोबर types लावा; dates साठी English (India).
  5. Row count check करा: छोट्या file साठी 12 → 11 → 9 → 7.

या lesson साठी Ravi Sir's Cards

English cards