fbpx

Cách group đối tượng sử dụng Fuzzy Matching trong Power Query

Chia sẻ bài viết này:
  •  
  •  
  •  
  •  
  •  
  •  
  •   
  •   

Trong bài viết này, Học Excel Online sẽ hướng dẫn bạn một cách để xử lý các dữ liệu “na ná” nhau bằng tính năng Fuzzy Matching trong Power Query, nhằm mục đích Group các đối tượng lại phục vụ cho các report.

(Một bài viết khác để tham khảo và hiểu rõ hơn: Levenshtein Distance trong VBA – tìm chuỗi gần đúng)

Lỗi kí tự – lỗi bộ gõ?

Khi viết bài này, mình đang là một tình nguyện viên trong tổ phản ứng nhanh phòng chống COVID-19, vừa kết thúc giai đoạn on-site, thu dọn đồ về nghỉ tết và chuyển qua làm việc online. Trong quá trình chống dịch, tổ bọn mình có triển khai quy trình trên google sheets, thu thập các số liệu và chuyển tới các địa phương.

Vấn đề xảy ra khi mình làm một task phụ – báo cáo. Mình cần thống kê dữ liệu của các tỉnh, nhưng khi group đối tượng thì lỗi như sau:

Bằng một cách nào đó, tên của các tỉnh bị nhân đôi (duplicate), dù trong quá trình tính toán, các đồng đội của mình đã sử dụng hàm COUNTIF để đếm tỉnh, và dữ liệu trả về vẫn chính xác.

Bài học rút ra: Nên xem xét khi dùng COUNTIF với dữ liệu Text.

Khi đó, mình đã đưa dữ liệu lên Diff Checker (Computed Diff – Diff Checker) để kiểm tra. Và kết quả trả về thể hiện ở hình dưới:

 

Vậy là rõ ràng đã có một sự khác biệt nào đó giữa 2 từ “Hải”. Mình đoán rằng sẽ có thể tìm ra nguyên nhân chính xác hơn bằng cách bóc tách kí tự.

Đầu tiên, mình thử kiểm tra với một hàm “chính xác hơn” so với phương thức COUNTIF thường sử dụng: Hàm EXACTKết quả trả về không ngoài dự đoán: FALSE

Một phương pháp khác để kiểm tra: Sử dụng SEARCH.

Bài học rút ra: Sử dụng các hàm xử lý chuỗi kí tự sẽ tốt hơn

Bước tiếp theo là bóc tách. Mình đoán rằng, sự khác biệt nằm ở từ “ả”, vì thế mình đã sử dụng hàm UNICODE để kiểm tra.

Vậy là đã rõ! Có lẽ nguyên nhân ở đây là do bộ gõ của các đồng đội mình khác nhau, cách bỏ dấu khác nhau nên đã xảy ra lỗi khi có hơn 10 người cùng làm việc trong sheet.

Vậy làm sao để sửa lỗi?

Fuzzy matching trong Power Query tìm kiếm và nhóm các giá trị gần giống nhau

Tại thời điểm viết bài, không rõ tại sao hàm Table.FuzzyGroup cũng như tính năng Group By với Fuzzy Matching ngừng hoạt động. Bởi vậy, mình đã sử dụng một cách khác đi đường dài hơn. Các bạn hoàn toàn có thể xử lý nhanh gọn hơn bằng việc chọn Group => chọn tính năng Fuzzy Grouping có sẵn.

Để xử lý dữ liệu này, mình đã có ý định sẽ Find & Replace, nhưng bỏ đi ngay sau đó vì không chỉ có hơn 60 tỉnh thành mà còn rất nhiều dữ liệu nhỏ hơn ở các cấp Quận/huyện, Phường/Xã bị sai. Thay vào đó, mình đã tìm kiếm trên web cũng như trên google, và mình chợt nhớ ra bài viết của anh Thanh về một vấn đề tương tự: SO SÁNH CHUỖI, TÌM CHUỖI GẦN ĐÚNG TRONG EXCEL.

Có chăng là, mình sẽ không sử dụng cách đó, mà “mượn” Fuzzy Matching trong Power Query để giải quyết vấn đề.

Các bước mình làm, cụ thể như sau:

1. Đẩy dữ liệu vào trong Excel, format dưới dạng Table để dễ xử lý

 

2. Đẩy dữ liệu vào trong Power Query

 

3. Sử dụng tính năng Merge Queries với Fuzzy matching

 

4. Tạo một Custom Column để lấy ô đầu tiên trong dữ liệu self-merge sau đó Expand Column

 

 

5. Xóa cột cũ, giữ cột mới, tiến hành Group với Operation All rows.

 

6. Kết quả:

 

Vậy là các dữ liệu đã không còn “sai” nữa.

_____________
Không biết ứng dụng “hay ho” này của Power Query có khiến các bạn – những người đọc – cảm thấy hứng thú chưa? Để hiểu nhiều hơn về Power Query cũng như ứng dụng của nó, các bạn có thể đọc thêm các bài viết tại blog.hocexcel.online về chủ đề Power Query, chẳng hạn như bài viết này:

Tìm hiểu về Power Query – Học Excel Online Miễn Phí (hocexcel.online)

Power Query là gì? – Học Excel Online Miễn Phí – Ứng dụng Power Query (hocexcel.online)


Chia sẻ bài viết này:
  •  
  •  
  •  
  •  
  •  
  •  
  •   
  •