Skip to main content

Unpivot Columns trong Power Query: chuyển cột thành dòng

8 phút đọc

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

Bảng doanh thu ngang được chuyển thành bảng dọc với cột thuộc tính và giá trị.
Unpivot đưa tên tháng từ cột xuống dòng để thuận tiện phân tích.
Unpivot đưa tên tháng từ cột xuống dòng để thuận tiện phân tích.

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.

MaCuaHang2026-012026-022026-03
HN01120000000135000000150000000
DN01800000000Trố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.

MaCuaHangThangDoanhThu
HN012026-01120000000
HN012026-02135000000
HN012026-03150000000
DN012026-0180000000
DN012026-020

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ệnhCách chọnTình huống phù hợp
Unpivot Other ColumnsChọ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 ColumnsChọn các cột cần xoayXoay nhóm cột, kiểm tra bước M để hiểu hành vi khi nguồn đổi
Unpivot Only Selected ColumnsChọn đúng cột cần xoayChỉ 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

Luồng biến đổi bảng ngang sang bảng dọc và đối soát tổng bằng cân cân bằng.
Sau biến đổi, cần kiểm tra tổng doanh thu và mức chi tiết.
Sau biến đổi, cần kiểm tra tổng doanh thu và mức chi tiết.

Đố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ú

Đào Ngọc Tú

Freelancer Power BI

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.

Đọc tiếp

Quay lại tất cả bài viết
Unpivot Columns Power Query: chuyển cột thành dòng | SenData