Menu

Tự động hóa việc chuyển đổi định dạng số âm và số dương trong Power Query

Hoạt Khải Trị 10/06/2026 00:00 379 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình đang làm việc với một file dữ liệu khách hàng mà các số âm (ví dụ: khoản nợ) lại được biểu thị bằng cách thêm dấu ngoặc đơn xung quanh, ví dụ (1,000,000) thay vì -1,000,000. Điều này gây khó khăn khi mình muốn tính toán hoặc phân tích dữ liệu bằng Power Query.

Mình đã thử nhiều cách nhưng vẫn chưa tìm ra giải pháp tối ưu. Có anh em nào trong diễn đàn đã từng gặp trường hợp tương tự và có cách xử lý hiệu quả bằng Power Query không ạ? Mình muốn tự động hóa việc chuyển đổi các giá trị này về định dạng số chuẩn để có thể sử dụng trong các phép tính.

Hiện tại, mình đang làm thủ công bằng cách:

  • Chọn cột cần xử lý.
  • Vào Transform -> Replace Values.
  • Replace ( with -.
  • Replace ) with (trống).
  • Sau đó đổi sang định dạng Number.

Cách này hơi mất công nếu có nhiều cột hoặc nhiều file.

Rất mong nhận được sự giúp đỡ từ các cao thủ Power Query ạ!

0

Hay đó bạn, cách làm này khá hay và trực quan.

Mình có một cách khác cũng khá gọn, có thể áp dụng cho nhiều trường hợp hơn một chút:

1. Chọn cột cần xử lý. 2. Trong tab Transform, chọn Replace Values. 3. Ở dòng Value To Find, nhập ( 4. Ở dòng Replace With, để trống. 5. Nhấn OK. 6. Lặp lại bước 2-5, lần này Value To Find)Replace With để trống. 7. Cuối cùng, chuyển kiểu dữ liệu của cột sang số.

Cách này đơn giản là xóa hết dấu ngoặc đơn. Nếu dữ liệu của bạn chỉ có định dạng (số) thì nó sẽ hoạt động tốt. Nếu có thêm ký tự khác thì mình sẽ dùng cách của bạn cho chắc ăn hơn.

Cảm ơn bạn đã chia sẻ nhé!

4

Chào bạn,

Trường hợp này khá phổ biến khi làm việc với dữ liệu từ nhiều nguồn khác nhau. Để xử lý định dạng số âm có dấu ngoặc đơn (1,000,000) trong Power Query, bạn có thể dùng một vài bước tùy chỉnh:

  1. Chọn cột chứa dữ liệu.
  2. Vào tab Add Column -> Custom Column.
  3. Nhập công thức: if Text.Contains([Tên Cột Của Bạn], "(") then "-" & Text.Replace(Text.Replace([Tên Cột Của Bạn], "(", ""), ")", "") else [Tên Cột Của Bạn].
  4. Sau đó, bạn có thể chuyển đổi kiểu dữ liệu của cột này sang số (ví dụ: Decimal Number).

Cách này sẽ thêm dấu trừ vào trước các số có ngoặc đơn và loại bỏ ngoặc đi. Hy vọng giúp bạn tự động hóa được phần nào!

2

Chào bạn,

Cảm ơn bạn đã chia sẻ cách xử lý này. Mình cũng gặp trường hợp tương tự và thấy cách dùng "Replace Values" để loại bỏ dấu ngoặc đơn rồi chuyển đổi kiểu dữ liệu là khá nhanh gọn. Tuy nhiên, đôi khi dữ liệu còn có thêm các ký tự khác đi kèm, như dấu phẩy thập phân hay ký tự tiền tệ. Trong những trường hợp đó, cách dùng Custom Column của bạn sẽ linh hoạt và mạnh mẽ hơn nhiều để đảm bảo chuyển đổi đúng định dạng số âm.

Để tối ưu hơn nữa cho trường hợp có nhiều ký tự cần loại bỏ (ví dụ: dấu $, ,), mình có thể kết hợp Text.Replace nhiều lần hoặc dùng Text.Remove sau khi đã xử lý dấu ngoặc.

Ví dụ:

if Text.Contains([Tên Cột Của Bạn], "(") 
then "-" & Text.RemoveRange(Text.RemoveRange(Text.Replace([Tên Cột Của Bạn], "(", ""), ")"), 1, 1) // Loại bỏ dấu ngoặc và ký tự đầu tiên nếu cần
else [Tên Cột Của Bạn]

Bạn đã thử áp dụng các bước này với các trường hợp dữ liệu phức tạp hơn chưa?

2

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

Đăng nhập Đăng ký