Menu

Xử lý chuỗi ký tự có dấu phân cách thay đổi liên tục bằng Power Query

Trịnh Hằng Hoa 10/04/2026 07:13 601 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình làm việc với một bộ dữ liệu mà cái cột mô tả của nó có những ký tự rất 'khó chiều'. Ban đầu thì nó dùng dấu phẩy (,) để phân tách, nhưng sau đó lại chuyển sang dấu chấm phẩy (;) hoặc thậm chí là dấu gạch ngang (-). Việc này làm mình đau đầu khi cố gắng tách chuỗi để lấy thông tin cần thiết.

Mình đã thử dùng hàm Text.Split thông thường nhưng không hiệu quả vì nó chỉ nhận một loại dấu phân cách cố định.

Sau một hồi mày mò, mình phát hiện ra một cách khá hay ho để xử lý vấn đề này bằng Power Query. Đó là sử dụng kết hợp Text.SplitList.Transform.

Cách làm của mình như sau:

  • Đầu tiên, bạn cần xác định tất cả các loại dấu phân cách có thể xuất hiện trong chuỗi của bạn.
  • Sau đó, bạn có thể áp dụng một hàm tùy chỉnh hoặc một bước Power Query để thay thế lần lượt các dấu phân cách khác nhau bằng một dấu phân cách chung (ví dụ: dấu phẩy).
  • Cuối cùng, bạn dùng Text.Split với dấu phân cách chung đó để tách chuỗi thành các cột.

Ví dụ, nếu bạn có chuỗi như "Sản phẩm A;Mô tả chi tiết,Giá rẻ", bạn có thể xử lý nó như sau:

Text.Split(Text.Replace(Text.Replace("Sản phẩm A;Mô tả chi tiết,Giá rẻ", ";", ","), "-", ","), ",")

Cách này giúp mình xử lý triệt để các trường hợp dấu phân cách không đồng nhất. Hy vọng chia sẻ này hữu ích cho các bạn nào đang gặp tình huống tương tự.

Có ai có cách nào khác hay hơn không, cùng chia sẻ cho mọi người biết với nhé!

5

Chào bạn,

Vấn đề này mình cũng từng gặp phải với các bộ dữ liệu không đồng nhất. Thay vì dùng Text.Split trực tiếp, bạn có thể thử kết hợp với Text.Replace để chuẩn hóa dấu phân cách trước. Ví dụ, bạn có thể thay thế tất cả dấu chấm phẩy (;) và dấu gạch ngang (-) bằng dấu phẩy (,). Sau đó, mới dùng Text.Split với dấu phẩy thì sẽ hiệu quả hơn.

Cách của bạn là gì vậy, chia sẻ thêm cho mọi người cùng học hỏi nhé!

4

Hay quá bạn ơi! Mình cũng hay gặp trường hợp này lắm, đúng là dữ liệu không đồng nhất làm mất thời gian xử lý thật.

Cách bạn gợi ý dùng Text.Replace để chuẩn hóa dấu phân cách trước khi Text.Split là một ý tưởng rất thông minh. Mình sẽ thử áp dụng ngay.

Bạn có thể chia sẻ cụ thể hơn về cách bạn đã "mày mò" để xử lý vấn đề này không? Có thể có những kỹ thuật khác hay ho mà mình chưa biết đấy!

1

Đúng là dữ liệu "khó chiều" như vậy dễ gây ức chế thật! Cách bạn dùng Text.Replace để chuẩn hóa dấu phân cách trước khi Text.Split là một hướng đi rất hay. Mình cũng hay áp dụng tương tự.

Nhân tiện, mình có một cách khác cũng khá hiệu quả cho trường hợp này. Thay vì thay thế từng ký tự, bạn có thể thử dùng biểu thức chính quy (Regex) để tìm và thay thế nhiều loại dấu phân cách cùng lúc. Power Query có hỗ trợ Text.Combine với các tùy chọn Regex.

Bạn có thể chia sẻ thêm chi tiết về cách bạn đã "mày mò" được không? Rất tò mò muốn học hỏi thêm!

5

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký