XỬ LÝ DỮ LIỆU DẠNG SỐ TRONG POWER BI
12/26/2025•3分で読める
XỬ LÝ DỮ LIỆU DẠNG SỐ TRONG POWER BI
(Khi dữ liệu đến từ nhiều quốc gia với format khác nhau)
Chỉnh sửa dữ liệu dạng số ở các nước khác nhau.
Khi bạn upload data này vào Power BI mà setting của bạn đang theo tiêu chuẩn của US thì cột số của Việt Nam thường được hiểu là text. Và khi bạn đổi format column sang Whole Number thì PBI sẽ hiển thị lỗi Error
|
|
Cách xử lí: đầu tiên bạn xóa Change Type vừa thực hiện
Click vào mũi tên trên tên cột và chọn Using Locale
c. Lựa chọn đất nước/vùng lãnh thổ mà bạn đang muốn và thường xuyên xử lí dữ liệu ở đất nước đó. Trường hợp này, bạn chọn
Data Type: Decimal Number
Locale: Vietnamese (Vietnam)
Sau bước này, Power BI sẽ hiểu đúng:
Dấu . là phân cách hàng nghìn
Dấu , là dấu thập phân
2. Xử lý tình huống chọn dữ liệu nhiều nước: Khi cột giá trị bị lẫn số format theo các nước khác nhau
| Mình cần phải phân biệt các trường hợp khác nhau trong cột dữ liệu trước: 1. Trường hợp 1: Có cả dấu “.” và “,” → Dấu xuất hiện trước là dấu phân cách hàng nghìn/triệu/tỷ
2. Trường hợp 2: các dấu đều để phân cách hàng nghìn/triệu/tỷ, không có dấu thập phân.
3. Trường hợp 3: Chỉ có 1 dấu, và sau dấu có đúng 3 chữ số → Đây là dấu phân cách hàng nghìn/triệu/tỷ
4. Trường hợp 4: Chỉ có 1 dấu, nhưng sau dấu không phải 3 chữ số → Đây là dấu thập phân |
Hướng dẫn xử lý:
TRƯỜNG HỢP 1: Có cả “.” và “,”
Đầu tiên xóa bước Change Type sau khi nhập dữ liệu vào PBI
b. Tạo ra những cột mới để tách các trường hợp khác nhau ra. Đầu tiên chúng ta tìm ra những cột có dấu “.” bằng cách: Add Column/Custom Column
Custom column formula: = Text.Contains([Random], ".")
| Cột này trả về: TRUE nếu có dấu “.” FALSE nếu không có
|
|
|
c. Sau khi có cột Test, bạn tạo 1 cột nữa để lọc ra các giá trị trong Trường Hợp 1 (tất cả những hàng có cả dâu “.” lẫn “,”
Custom column formula = If Text.Contains([Random], ".") and Text.Contains([Random], ",") then [Random] else null
| Kết quả sẽ trả về 4 hàng đầu tiên của Trường Hợp 1
|
|
|
d. Tiếp theo mình cần đổi các giá trị có 2 dấu này về 1 kiểu dữ liệu. Ở đây mình sẽ đưa về format kiểu Mỹ trong cột Custom 1.
Custom column formula = if [Custom] = null then null else if Text.PositionOf([Random], ".", Occurrence.Last) > Text.PositionOf([Random], ",", Occurrence.Last) then Text.Replace( Text.Remove([Random], "."),",",".”) else [Custom]
| Chuẩn hóa các giá trị này về format kiểu Mỹ (dùng “.” làm dấu thập phân)
|
|
|
TRƯỜNG HỢP 2:
Để xử lí trường hợp 2 (các dấu đều để phân cách hàng nghìn/triệu/tỷ, không có dấu thập phân), đầu tiên chúng ta cần tìm xem những dòng nào có hơn 1 dấu “,”
Custom column formula = List.Count(Text.Split([Random], ",")) - 1 | Kết quả sẽ trả về số dấu “,“ xuất hiện trong mỗi hàng |
|
|
b. Trong cột Custom 2, ta sẽ đặt công thức để:
Tất cả những giá trị khác null trong Custom 1, ta giữ nguyên (vì đó là các kết qả ta đã là sạch trong TH1)
Tìm các giá trị trong cột Random mà có nhiều hơn 2 dấu “.” thì phải đổi các dấu “.” đó về dấu “,” để đưa giá trị đó về format kiểu Mỹ
Trường hợp các giá trị trong cột Random mà có nhiều hơn 2 dấu “,” thì đó chính là giá trị đúng format mà ta cần, nên ta giữ nguyên giá trị đó đưa vào Custom 2.
Còn lại chúng ta trả về “null”.
Custom column formula = if Text.Contains([Random], ",") = false and List.Count( Text.PositionOf([Random], ".", Occurrence.All) ) >= 2 then Text.Replace([Random], ".", ",")
else if Text.Contains([Random], ".") = false and List.Count( Text.PositionOf([Random], ",", Occurrence.All) ) >= 2 then [Random]
else null
| Kết quả sẽ trả về thêm 2 giá trị đúng format Mỹ mà ta cần |
|
|
TRƯỜNG HỢP 3 &4: số có dấu “.” hoặc “,” mà lại có 3 số phía sau thì đây cũng là dấu ngăn cách hàng nghìn/triệu/tỷ chứ không phải dấu thập phân.
Hướng dẫn xử lý:
Ở cột Custom 3:
i. Giữ lại các giá trị đã làm sạch ở Custom 2
ii. Với những giá trị ở cột Random chỉ có 1 dấu “,” và
Phía sau dấu phẩy là 3 số, thì đây là dấu chia hàng nghìn, ta giữ nguyên giá trị trong cột Random
Phía sau dấu phẩy khác 3 số (như là 1,2, hoặc 4,5,6) thì đây chính là dấu thập phân -> đổi sang dấu chấm để đúng format Mỹ
iii. Với những giá trị ở cột Random chỉ có 1 dấu “.” và
Phía sau dấu chấm là 3 số, thì đây là dấu chia hàng nghìn,-> đổi sang dấu phẩy để đúng format Mỹ
Phía sau dấu chấm khác 3 số (như là 1,2, hoặc 4,5,6) thì đây chính là dấu thập phân -> giữ nguyên để số đúng
Còn lại về null
Custom column formula = if (Text.Length([Random]) - Text.PositionOf([Random], ",") - 1) = 3 then [Random]
else if Text.Contains([Random], ".") = false and (Text.Length([Random]) - Text.PositionOf([Random], ",") - 1) <> 3 then Text.Replace([Random], ",", ".")
else if Text.Contains([Random], ",") = false and (Text.Length([Random]) - Text.PositionOf([Random], ".") - 1) = 3 then Text.Replace([Random], ".", ",")
else if Text.Contains([Random], ",") = false and (Text.Length([Random]) - Text.PositionOf([Random], ".") - 1) <> 3 then [Random] Else null
| Sau bước này, toàn bộ giá trị đã được đưa về format số kiểu Mỹ, sẵn sàng đổi sang Decimal Number. |
|
|
Kết luận
Không nên đổi Change Type ngay khi import dữ liệu
Với dữ liệu 1 quốc gia → dùng Using Locale
Với dữ liệu nhiều quốc gia → bắt buộc:
i. Phân loại dữ liệu
ii. Xử lý từng trường hợp bằng Power Query
Sau khi làm sạch → mới đổi sang Decimal Number