2026-07-23 · Power Query & Excel
Bạn chốt xong báo cáo tháng 3, sếp hỏi: "Sao doanh thu ngày 5/3 lại nằm ở tháng 5?". Mở lại dữ liệu, bạn tá hỏa: ngày 05/03 trong file gốc đã biến thành 03/05 sau khi qua Power Query. Ngày và tháng bị đảo cho nhau — số liệu chạy nhầm kỳ, cộng dồn sai, mà Excel không hề báo một dòng lỗi nào.
Đây là lỗi ngày tháng Power Query kinh điển với người dùng Việt Nam, và nó nguy hiểm ở chỗ: một nửa số dòng bị đảo âm thầm (ngày từ 1 đến 12), nửa còn lại (ngày 13 trở đi) thì hiện chữ Error đỏ lòm khi đổi kiểu Date. Trường hợp Error còn "may", vì bạn biết mà sửa. Trường hợp đảo ngày mới đáng sợ — báo cáo vẫn chạy, chỉ có con số là sai.
Bài viết này, đội ngũ EzTech sẽ giải thích tận gốc vì sao Power Query đọc sai ngày của dữ liệu Việt Nam, và hướng dẫn 3 cách sửa từng bước — từ tình huống đơn giản đến dữ liệu bẩn lẫn lộn nhiều định dạng.
Vì sao xảy ra lỗi ngày tháng Power Query trên máy tính ở Việt Nam?
Nguyên nhân nằm ở một chữ: locale (thiết lập vùng). Khi bạn đổi một cột text sang kiểu Date, Power Query không "đoán" định dạng ngày, mà đọc theo locale của hệ thống hoặc của file. Rất nhiều máy tính ở Việt Nam cài Windows để Region là English (United States) — tức định dạng ngày MM/DD/YYYY (tháng trước, ngày sau).
Trong khi đó, dữ liệu của chúng ta — xuất từ phần mềm kế toán, sao kê ngân hàng, file nhập tay — hầu hết ghi ngày kiểu Việt Nam: DD/MM/YYYY (ngày trước, tháng sau). Hai bên "nói hai thứ tiếng", và kết quả là:
- Chuỗi "05/03/2026" (mùng 5 tháng 3) bị Power Query hiểu thành ngày 3 tháng 5 — vì nó đọc số 05 đứng đầu là tháng. Ngày và tháng đảo cho nhau, không có bất kỳ cảnh báo nào.
- Chuỗi "25/03/2026" thì trả về Error — vì không tồn tại "tháng 25". Mọi dòng có ngày từ 13 trở đi đều dính lỗi này.
Vậy nên nếu bạn thấy cột ngày sau Changed Type có một phần Error, một phần trông "bình thường", đừng chỉ sửa mấy ô Error — phần "bình thường" kia nhiều khả năng đã bị đảo ngày tháng hết rồi. Lỗi này đặc biệt hay gặp khi bạn gộp nhiều file Excel bằng Power Query: mỗi file đến từ một máy có thiết lập vùng khác nhau, gộp vào là "loạn ngày".
Cách 1: Change Type → Using Locale — cách chuẩn, nên dùng đầu tiên
Power Query có sẵn công cụ cho đúng tình huống này: đổi kiểu dữ liệu kèm theo chỉ định locale, tức là bạn nói thẳng cho nó biết "dữ liệu này ghi ngày trước, tháng sau".
- Trong cửa sổ Power Query Editor, nếu cột ngày đã bị đổi kiểu sai, hãy xóa bước Changed Type lỗi đó ở khung Applied Steps bên phải (bấm dấu ✕) để cột quay về dạng text.
- Chuột phải vào tiêu đề cột ngày → chọn Change Type → Using Locale… (nằm cuối danh sách).
- Hộp thoại Change Type with Locale hiện ra, chọn:
- Data Type: Date
- Locale: English (United Kingdom) hoặc Vietnamese (Vietnam) — cả hai đều đọc theo DD/MM/YYYY nên cho kết quả như nhau với dữ liệu ngày kiểu Việt Nam.
- Bấm OK. Toàn bộ cột được đọc đúng: "05/03/2026" thành mùng 5 tháng 3, "25/03/2026" hết Error.
Bạn có thể xem thêm cơ chế kiểu dữ liệu và locale trong tài liệu chính thức của Microsoft về data types trong Power Query.
Cách 2: Thêm locale trực tiếp vào công thức bước Changed Type
Nếu quen thao tác nhanh, bạn không cần xóa bước cũ mà sửa thẳng trên thanh công thức (Formula Bar — nếu chưa thấy, vào tab View tích Formula Bar). Bấm vào bước Changed Type, bạn sẽ thấy công thức dạng:
= Table.TransformColumnTypes(#"Promoted Headers",{{"Ngày chứng từ", type date}})
Chỉ cần thêm tham số locale "en-GB" vào cuối hàm:
= Table.TransformColumnTypes(#"Promoted Headers",{{"Ngày chứng từ", type date}}, "en-GB")
Tham số thứ ba này chính là "using locale" phiên bản viết tay: nó ra lệnh cho hàm đọc chuỗi ngày theo chuẩn Anh (ngày/tháng/năm). Bạn cũng có thể dùng "vi-VN", kết quả tương đương. Cách này tiện khi bước Changed Type đang đổi kiểu cho nhiều cột cùng lúc — chỉ thêm một tham số là xong, không phải làm lại từng cột.
Cách 3: Dữ liệu bẩn lẫn nhiều định dạng — tách ra rồi ráp lại bằng #date
Hai cách trên chỉ chạy ngon khi cả cột thống nhất một định dạng. Thực tế nhiều bạn làm kế toán, mua hàng nhận file tổng hợp từ nhiều chi nhánh: dòng thì "05/03/2026", dòng thì "5-3-26", dòng lại "05.03.2026". Với dữ liệu lẫn lộn kiểu này, ép kiểu một phát kiểu gì cũng rơi rụng. Giải pháp chắc tay nhất: tự tách ngày – tháng – năm ra, rồi ráp lại thành Date. Vì chính tay bạn chỉ định phần nào là ngày, phần nào là tháng, nên không còn chỗ cho Power Query "tự hiểu" sai.
- Giữ cột ngày ở dạng text (xóa bước đổi kiểu nếu có).
- Nếu định dạng lẫn cả "/" lẫn "-" lẫn ".", đồng nhất trước: chuột phải cột → Replace Values, thay "-" thành "/", rồi thay "." thành "/".
- Chọn cột → tab Home → Split Column → By Delimiter → chọn dấu /, để mặc định tách tại mỗi dấu phân cách → ra 3 cột. Đặt tên lần lượt: Ngay, Thang, Nam (đổi kiểu cả 3 về Whole Number).
- Nếu cột năm có chỗ ghi 2 chữ số (26 thay vì 2026), thêm cột điều kiện xử lý: Add Column → Custom Column với công thức
if [Nam] < 100 then [Nam] + 2000 else [Nam]. - Ráp lại thành ngày: Add Column → Custom Column, nhập công thức:
Hàm#date([Nam], [Thang], [Ngay])#date(năm, tháng, ngày)tạo giá trị Date từ 3 con số — không phụ thuộc bất kỳ locale nào. - Xóa các cột tách tạm, giữ cột ngày mới, đổi kiểu về Date. Xong.
Mẹo nhỏ: nếu dữ liệu có kèm giờ ("05/03/2026 14:30"), hãy Split Column theo khoảng trắng trước để tách riêng phần giờ, rồi mới xử lý phần ngày như trên.
Làm sao biết cột ngày đã đúng hay vẫn đang bị đảo?
Đảo ngày tháng là lỗi "không kêu", nên sau khi sửa, bạn nên tự kiểm tra thay vì tin vào mắt thường:
- Lọc thử ngày lớn hơn 12. Chọn cột ngày → Add Column → Date → Day để lấy riêng phần ngày, rồi lọc các dòng có giá trị từ 13 trở lên. Một tập dữ liệu giao dịch kéo dài cả tháng mà không có dòng nào ngày vượt quá 12 thì gần như chắc chắn ngày–tháng đang đảo chỗ cho nhau.
- Đối chiếu một chứng từ mốc. Chọn 1-2 giao dịch bạn nhớ rõ ngày phát sinh (ví dụ hóa đơn ngày 25/03), tìm đúng dòng đó sau xử lý xem còn nằm ở 25/03 không.
- Nhìn phân bố theo tháng. Pivot nhanh số dòng theo tháng: nếu dữ liệu chỉ của tháng 3 mà kết quả rải từ tháng 1 đến tháng 12, chính là dấu hiệu ngày bị đọc thành tháng.
Phòng bệnh: để không bao giờ phải sửa lại lỗi này
- Chuẩn hóa từ nguồn. Nếu bạn kiểm soát được file đầu vào, hãy thống nhất một định dạng — lý tưởng nhất là YYYY-MM-DD (ví dụ 2026-03-05), định dạng "quốc tế" mà mọi locale đều đọc đúng; hoặc để ô ngày là giá trị Date thật của Excel thay vì gõ text.
- Khai báo locale cho file làm việc. Trong Excel: File → Options and settings → Query Options → Current Workbook → Regional Settings, đặt Locale là Vietnamese (Vietnam). Từ đó mọi bước đổi kiểu trong file này mặc định đọc theo ngày/tháng/năm, không còn phụ thuộc Windows của máy đang mở.
- Luôn dùng Using Locale khi nguồn là text. Tập thói quen: cột ngày dạng text thì đổi kiểu bằng Using Locale (hoặc thêm "en-GB"/"vi-VN" vào công thức), đừng để Power Query tự đổi.
- Cẩn thận khi gửi file qua máy khác. Query bạn dựng chạy đúng trên máy mình nhưng có thể sai trên máy đồng nghiệp để Region khác — nếu bước đổi kiểu không ghim locale. Ghim locale ngay trong công thức (cách 2) hoặc trong Regional Settings của workbook là chắc nhất.
Câu hỏi thường gặp
Vì sao cùng một file, máy tôi mở thì lỗi mà máy đồng nghiệp mở lại bình thường?
Vì bước đổi kiểu Date trong query không ghim locale, nên mỗi máy đọc theo thiết lập vùng của riêng nó: máy để Region English (United States) sẽ đọc tháng trước — dính lỗi; máy để Vietnamese hoặc English (United Kingdom) đọc ngày trước — chạy đúng. Sửa dứt điểm bằng cách thêm locale vào công thức Changed Type hoặc đặt Regional Settings cho workbook như hướng dẫn ở trên — khi đó file chạy giống nhau trên mọi máy.
Dữ liệu nguồn để ngày dạng text DD/MM/YYYY có sao không?
Không sao, miễn là bạn đổi kiểu đúng cách: dùng Change Type → Using Locale và chọn English (United Kingdom) hoặc Vietnamese. Text chỉ gây lỗi khi bạn để Power Query tự đổi kiểu theo locale US. Còn nếu được chọn, hãy ưu tiên nguồn lưu ngày dạng Date thật hoặc YYYY-MM-DD — đỡ phải nghĩ hẳn.
Đã đổi bằng Using Locale rồi mà vẫn còn vài ô Error thì sao?
Khi cả cột đã đọc đúng locale mà lẻ tẻ vài ô vẫn Error, thường là do ô đó sai thật: gõ nhầm "31/02/2026", thừa ký tự lạ, hoặc lẫn chữ vào chuỗi ngày. Bấm vào ô Error để xem thông báo chi tiết, hoặc dùng Home → Keep Rows → Keep Errors để gom riêng các dòng lỗi ra soát. Đây là lỗi dữ liệu, cần sửa ở nguồn chứ không phải lỗi locale nữa.
Nắm chắc Power Query để dữ liệu không còn "tự sai"
Lỗi ngày tháng chỉ là một trong nhiều cái bẫy khi làm sạch dữ liệu bằng Power Query — xử lý xong bạn sẽ thấy: hiểu bản chất một lần, đỡ mò mẫm cả về sau. Muốn kiểm tra xem mình đã nắm chắc công cụ này đến đâu, bạn có thể làm bài trắc nghiệm Power Query miễn phí của EzTech — vài phút là biết ngay mình hổng chỗ nào.
Còn nếu bạn làm kế toán – tài chính và muốn đi bài bản từ làm sạch dữ liệu bằng Power Query đến dựng báo cáo tài chính, báo cáo quản trị trên Power BI, khóa DATA FINANCE của đội ngũ EzTech được thiết kế đúng cho lộ trình đó — học trên tình huống dữ liệu thật, kiểu "file mỗi chi nhánh một định dạng ngày" như trong bài này. Có gì thắc mắc, bạn cứ liên hệ EzTech để được tư vấn nhé.