XỬ LÝ DỮ LIỆU DẠNG SỐ TRONG POWER BI

Ngô Đào Nam Phương
Ngô Đào Nam Phương

12/26/20253分で読める

759
0
XỬ LÝ DỮ LIỆU DẠNG SỐ TRONG POWER BI

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) 

  1. 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 

 

 

  1. Cách xử lí: đầu tiên bạn xóa Change Type vừa thực hiện 

  2. 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ỷ 
→ Dấu xuất hiện sau là dấu thập phân 

 

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à “,” 

  1. Đầ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: 

  1. Để 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ý: 

  1. Ở 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