Unpivot Columns trong Power Query chuyển các cột dữ liệu, chẳng hạn từng tháng, thành các dòng gồm tên thuộc tính và giá trị. Với bảng doanh thu cửa hàng, bạn giữ mã cửa hàng rồi đưa các cột tháng về hai cột Tháng và Doanh thu để lọc, tổng hợp và vẽ biểu đồ dễ hơn. Bài này hướng dẫn thao tác trong Excel và Power BI, kèm dữ liệu mẫu để bạn đối soát kết quả.
Khi nào bảng của bạn cần Unpivot?
Giả sử phòng kinh doanh gửi một bảng: mỗi cửa hàng một dòng, tháng mới thêm một cột bên phải. Cấu trúc ấy thuận tiện để nhập và nhìn nhanh, nhưng khi dựng báo cáo, bạn phải chọn nhiều cột doanh thu thay vì chỉ chọn một trường Tháng. Unpivot đưa thông tin thời gian từ tiêu đề xuống dữ liệu.
Hãy xác định trước một dòng kết quả đại diện cho điều gì. Trong ví dụ này, đó là doanh thu của một cửa hàng trong một tháng. Nếu nguồn còn chia theo sản phẩm, bạn phải giữ thêm mã sản phẩm; nếu bỏ mất mã này, các dòng sau biến đổi sẽ khó phân biệt.
Unpivot không cộng doanh thu, không gộp file và không đổi toàn bộ hàng thành cột như Transpose. Nếu bạn cần nối bảng của nhiều chi nhánh trước khi xử lý, xem cách phân biệt Merge và Append trong Power Query.
Ví dụ: từ ba cột tháng thành một cột thời gian

Dưới đây là dữ liệu giả lập, đơn vị đồng. Giá trị 0 nghĩa là đã xác nhận không có doanh thu; ô trống nghĩa là chưa nhận được số liệu. Hai trạng thái này cần được giữ đúng ý nghĩa.
| MaCuaHang | 2026-01 | 2026-02 | 2026-03 |
|---|---|---|---|
| HN01 | 120000000 | 135000000 | 150000000 |
| DN01 | 80000000 | 0 | Trống |
Sau Unpivot, bảng có ba trường MaCuaHang, Thang và DoanhThu. Riêng HN01 tạo ba dòng; DN01 tạo hai dòng vì giá trị null không tạo cặp thuộc tính–giá trị trong phép Unpivot. Số 0 vẫn tạo một dòng bình thường.
| MaCuaHang | Thang | DoanhThu |
|---|---|---|
| HN01 | 2026-01 | 120000000 |
| HN01 | 2026-02 | 135000000 |
| HN01 | 2026-03 | 150000000 |
| DN01 | 2026-01 | 80000000 |
| DN01 | 2026-02 | 0 |
Tổng đúng là 485.000.000 đồng trên năm dòng. Việc DN01 thiếu tháng 3 không chứng minh cửa hàng ngừng hoạt động: bạn chỉ biết nguồn chưa có giá trị. Đây là điểm cần giải thích rõ khi bàn giao báo cáo.
Cách dùng Unpivot Other Columns từng bước
1. Chuẩn bị bảng nguồn
Trong Excel trên Windows có Power Query, chọn vùng dữ liệu, nhấn Ctrl+T và xác nhận bảng có tiêu đề. Chọn Data → From Table/Range. Trong Power BI Desktop, dùng Get Data → Excel workbook, chọn bảng rồi Transform Data. Tên lệnh có thể khác theo ngôn ngữ giao diện.
Bảng nguồn nên có một dòng tiêu đề, không gộp ô, không chen dòng tổng giữa các cửa hàng. Xóa cột Tổng cộng trước khi Unpivot để tránh biến tổng năm thành một “tháng” nữa. Nếu mã cửa hàng có số 0 ở đầu, đặt kiểu Text ngay từ nguồn.
2. Chọn cột định danh cần giữ
Trong Power Query Editor, chọn MaCuaHang. Nếu có TenCuaHang và KhuVuc, giữ Ctrl để chọn cả các cột đó. Bấm chuột phải rồi chọn Unpivot Other Columns. Bạn đang yêu cầu giữ nguyên thông tin nhận diện và chuyển mọi cột còn lại thành dòng.
Đổi Attribute thành Thang, Value thành DoanhThu. Kiểm tra danh sách giá trị Thang: chỉ nên xuất hiện tháng hợp lệ. Nếu thấy GhiChu hoặc TongCong, bạn đã đưa nhầm cột vào phần cần xoay.
3. Đặt kiểu và nạp kết quả
Đặt DoanhThu thành Whole Number nếu toàn bộ giá trị là số đồng nguyên. Chuyển Thang thành ngày đầu tháng bằng cách ghép thêm “-01” rồi đọc theo định dạng yyyy-MM-dd. Dùng kiểu Date giúp sắp xếp thời gian đúng, thay vì dựa vào nhãn văn bản tháng 1, tháng 10, tháng 2.
Trong Excel, chọn Close & Load To để nạp thành bảng hoặc kết nối phục vụ PivotTable. Trong Power BI, chọn Close & Apply. Khi cần một báo cáo tổng doanh thu tháng từ bảng đã chuẩn hóa, bạn có thể tiếp tục với Group By trong Power Query.
Mẫu code M tự chạy để kiểm tra
Tạo Blank Query, mở Advanced Editor rồi thay toàn bộ nội dung bằng đoạn dưới. Nguồn được tạo ngay trong code, không cần file ngoài hoặc chỉnh đường dẫn. Kết quả phải có năm dòng, với Thang là ngày đầu mỗi tháng.
let
Source = #table(
type table [
MaCuaHang = text,
#"2026-01" = nullable number,
#"2026-02" = nullable number,
#"2026-03" = nullable number
],
{
{"HN01", 120000000, 135000000, 150000000},
{"DN01", 80000000, 0, null}
}
),
Unpivoted = Table.UnpivotOtherColumns(
Source, {"MaCuaHang"}, "Thang", "DoanhThu"
),
Typed = Table.TransformColumnTypes(
Unpivoted, {{"DoanhThu", Int64.Type}}
),
Result = Table.TransformColumns(
Typed,
{{"Thang", each Date.FromText(
_ & "-01",
[Format = "yyyy-MM-dd", Culture = "en-US"]
), type date}}
)
in
Result
Hàm Table.UnpivotOtherColumns nhận danh sách cột cần giữ; các cột còn lại trở thành tên tháng và doanh thu. Phần chuyển ngày dùng Date.FromText với định dạng tường minh, phù hợp tiêu đề mẫu yyyy-MM. Nếu nguồn dùng T1 hoặc Tháng 1, bạn phải chuẩn hóa tên tháng và bổ sung năm trước.
Chọn đúng giữa ba lệnh Unpivot
Điểm dễ nhầm là cho rằng Unpivot Columns luôn cố định danh sách cột đã chọn. Theo hướng dẫn Unpivot của Microsoft, thao tác này cũng có thể đưa cột mới vào kết quả khi refresh. Muốn chỉ xử lý đúng các cột được chỉ định, bạn cần phân biệt với Unpivot Only Selected Columns.
| Lệnh | Cách chọn | Tình huống phù hợp |
|---|---|---|
| Unpivot Other Columns | Chọn cột cần giữ | Mã cửa hàng ổn định, tháng mới tiếp tục phát sinh |
| Unpivot Columns | Chọn các cột cần xoay | Xoay nhóm cột, kiểm tra bước M để hiểu hành vi khi nguồn đổi |
| Unpivot Only Selected Columns | Chọn đúng cột cần xoay | Chỉ xoay danh sách cố định, để cột phát sinh ngoài danh sách nguyên trạng |
Với báo cáo tháng, giữ cột định danh thường dễ đọc và bảo trì hơn. Tuy nhiên, tính linh hoạt chỉ hữu ích khi cột mới thực sự là tháng. Nếu người nhập thêm Người phụ trách, hãy bổ sung trường ấy vào danh sách giữ hoặc tách khỏi nguồn; đừng mặc định mọi cột mới đều là doanh thu.
Bốn kiểm tra trước khi dùng số liệu

Đối soát tổng theo tháng và cửa hàng
Với dữ liệu mẫu, tháng 1 là 200 triệu, tháng 2 là 135 triệu, tháng 3 là 150 triệu. Tổng HN01 là 405 triệu, DN01 là 80 triệu. So cả hai chiều giúp phát hiện chọn thiếu cột tháng hoặc giữ nhầm cột doanh thu mà chỉ nhìn tổng chung có thể bỏ qua.
Phân biệt null, số 0 và lỗi chuyển kiểu
Null bị loại khỏi các cặp kết quả; số 0 được giữ. Chuỗi rỗng hoặc dấu gạch ngang chưa chắc đã là null. Hãy thống nhất quy ước với người cung cấp dữ liệu, rồi chuẩn hóa trước khi xoay. Không thay toàn bộ lỗi bằng 0 chỉ để refresh thành công, vì bạn sẽ biến dữ liệu chưa xác định thành số liệu có vẻ đã xác nhận.
Thử thêm một tháng mới
Thêm cột 2026-04 với HN01 là 10 triệu, DN01 là 20 triệu. Đảm bảo cột nằm trong Excel Table nguồn rồi refresh. Với code mẫu, kết quả mong đợi là bảy dòng, tổng 515 triệu. Nếu không thấy tháng 4, kiểm tra phạm vi nguồn và những bước chọn hoặc loại cột nằm trước Unpivot.
Giữ đúng mức chi tiết
Hai dòng cùng cửa hàng và tháng có thể hợp lệ nếu thuộc hai sản phẩm khác nhau. Đừng Remove Duplicates chỉ vì thấy mã cửa hàng lặp. Ngược lại, nếu bạn cần mỗi cửa hàng–tháng duy nhất, hãy tìm nguyên nhân trùng từ nguồn trước khi tổng hợp. Với bảng có cả DoanhThu_T1 và ChiPhi_T1, cần tách thêm loại chỉ tiêu; không gộp chúng vào một cột tiền rồi cộng chung.
Câu hỏi thường gặp
Unpivot có sửa dữ liệu gốc trong Excel không?
Query biến đổi bản dữ liệu được đọc vào và nạp kết quả ở nơi bạn chọn. Hãy nạp sang bảng khác để giữ bảng nguồn phục vụ nhập liệu và đối soát. Khi nguồn thay đổi, bạn cần refresh để kết quả cập nhật.
Tại sao số dòng sau Unpivot ít hơn số cửa hàng nhân số tháng?
Kiểm tra các ô null trước tiên. Ví dụ có hai cửa hàng và ba tháng nhưng một ô null thì chỉ có năm cặp kết quả. Bạn có thể đối chiếu hành vi này trong ví dụ chính thức của Table.Unpivot.
Unpivot có giống Pivot Column không?
Unpivot đưa tên cột xuống dòng; Pivot Column đưa các giá trị thuộc tính thành cột. Pivot có thể cần tổng hợp nếu nhiều dòng cùng khóa, nên thao tác ngược lại không bảo đảm khôi phục nguyên trạng mọi bảng đã xử lý.
Có phải viết DAX để chuyển cột thành dòng không?
Không cần trong tình huống này. Bạn xử lý cấu trúc bằng Power Query trước khi nạp vào mô hình; sau đó mới dùng DAX cho phép tính báo cáo. Nên chốt cấu trúc và kiểm tra tổng trước khi bắt đầu viết measure.
Nếu bạn cần người chuẩn hóa các bảng Excel tháng và dựng báo cáo Power BI có bước đối soát, bạn có thể xem báo giá làm Power BI tại SenData để chuẩn bị phạm vi công việc và trao đổi yêu cầu.
Sẵn sàng xây dựng dashboard Power BI?
Kết nối với freelancer Power BI phù hợp, xem báo cáo nhúng ngay trên trình duyệt và tải file .pbix về sau khi thanh toán.
Đào Ngọc Tú
Cộng tác viên chuyên gia tại SenData. Chia sẻ kiến thức về phát triển Power BI, trực quan hóa dữ liệu và best practice business intelligence.

