Skip to main content

Merge và Append trong Power Query: dùng đúng, tránh nhân dòng

8 phút đọc

Append trong Power Query dùng để xếp thêm dòng từ nhiều bảng; Merge dùng để ghép dữ liệu theo khóa chung rồi mở rộng những cột cần lấy. Bạn chọn Append khi gom doanh số các tháng, chọn Merge khi bổ sung tên cửa hàng vào từng giao dịch. Với Merge, hãy kiểm tra khóa trùng trước khi bung cột để tránh doanh thu bị nhân lên.

Bài này dùng một tình huống bán hàng giả lập, có mã M để bạn tự chạy trong Excel hoặc Power BI. Mục tiêu là chọn đúng thao tác và biết cách kiểm tra kết quả trước khi đưa số liệu lên dashboard.

Merge và Append khác nhau ở đâu?

Tiêu chí

Append Queries

Merge Queries

Mục đích

Gom các dòng cùng loại nghiệp vụ

Ghép các bảng theo giá trị khóa

Ví dụ

Doanh số tháng 8 và tháng 9

Giao dịch và danh mục cửa hàng

Điểm cần thống nhất

Tên cột và ý nghĩa dữ liệu

Khóa ghép, kiểu dữ liệu, mức chi tiết

Rủi ro chính

Cột bị tách, giao dịch bị nhập hai lần

Mất dòng hoặc nhân dòng khi mở rộng

Đừng quyết định chỉ bằng việc hai bảng có tên cột giống nhau. Hai bảng cùng chứa MaCH nhưng một bảng là danh mục, bảng kia là giao dịch thì thường cần Merge. Ngược lại, doanh số hai tháng cần Append dù thứ tự cột trong hai file khác nhau.

Chuẩn bị dữ liệu: mỗi dòng đại diện cho điều gì?

Trước khi bấm nút, hãy viết một câu mô tả mỗi bảng. Chẳng hạn, bảng bán hàng có một dòng cho mỗi giao dịch; danh mục cửa hàng có một dòng cho mỗi MaCH. Đây là mức chi tiết dữ liệu, quyết định bạn có thể nối hai bảng an toàn hay không.

  • Giữ mã cửa hàng dạng văn bản nếu có số 0 đầu, chẳng hạn 001.

  • Loại khoảng trắng thừa ở khóa, thống nhất quy tắc viết hoa nếu nghiệp vụ yêu cầu.

  • Đặt tên cột rõ ràng: MaGD, MaCH, DoanhThu; không để hai cột khác nghĩa cùng mang tên GiaTri.

  • Chuyển doanh thu sang kiểu số và kiểm tra lỗi chuyển đổi trước khi tính tổng.

Nếu nguồn là bảng tính, bạn có thể xem hướng dẫn kết nối Power BI với Excel bằng Table để chuẩn bị nguồn ổn định. Trong ví dụ dưới đây, dữ liệu được tạo trực tiếp bằng M nên bạn không cần tải file.

Append: gom giao dịch nhiều tháng thành một bảng

Trong Power Query Editor, chọn Home, Append Queries as New, rồi chọn hai query nguồn. Tạo query mới giúp giữ riêng các bước làm sạch nguồn và bước tổng hợp, thuận tiện khi tìm lỗi sau này.

Hai bảng giao dịch được xếp các dòng thành một bảng dài hơn
Append gom dòng từ các bảng cùng loại nghiệp vụ.
Append gom dòng từ các bảng cùng loại nghiệp vụ.

Append ghép cột theo tên, không dựa vào vị trí. Nếu một bảng thiếu cột, phần tương ứng trong kết quả nhận null. Đây là hành vi được mô tả trong tài liệu Append của Microsoft; null không đồng nghĩa với số 0.

Để thực hành, tạo Blank Query, mở Advanced Editor và thay toàn bộ nội dung bằng đoạn dưới. Cột ở bảng tháng 9 được cố ý đảo thứ tự.

let
    Thang8 = #table(
        type table [MaGD = text, MaCH = text, DoanhThu = number],
        {{"GD01", "CH01", 1000000}, {"GD02", "CH02", 1500000}}
    ),
    Thang9 = #table(
        type table [DoanhThu = number, MaCH = text, MaGD = text],
        {{2000000, "CH01", "GD03"}}
    ),
    KetQua = Table.Combine({Thang8, Thang9})
in
    KetQua

Kết quả phải có 3 dòng, 3 cột và tổng DoanhThu là 4.500.000 đồng. Cột đảo vị trí vẫn ghép đúng. Nếu một nguồn đặt tên cột là Doanh thu thay vì DoanhThu, hãy đổi tên trước khi Append để tránh tạo hai cột riêng.

Append không tự loại bản ghi trùng. Nếu file tháng 9 đã bao gồm cả GD01 từ tháng 8, giao dịch đó vẫn được thêm lần nữa. Hãy xác định khóa giao dịch và phạm vi ngày của từng nguồn; chỉ xóa trùng khi đã biết dòng nào thực sự bị nhập lặp.

Merge: bổ sung tên cửa hàng bằng khóa chung

Giả sử bạn đã có doanh thu nhưng cần tên cửa hàng để trình bày báo cáo. Chọn bảng giao dịch làm bảng trái, danh mục làm bảng phải, chọn MaCH ở cả hai và dùng Left Outer. Sau khi ghép, mở rộng cột bảng con để lấy TenCH.

Hai bảng được ghép ngang dựa trên các cột khóa tương ứng
Merge bổ sung cột theo khóa; cần kiểm tra số lần khớp.
Merge bổ sung cột theo khóa; cần kiểm tra số lần khớp.

Tên hai cột khóa không bắt buộc giống nhau. Giá trị và kiểu dữ liệu phải phù hợp; nếu ghép bằng nhiều cột, thứ tự chọn các cặp phải tương ứng. Bạn có thể đối chiếu quy tắc này trong hướng dẫn Merge Queries của Microsoft.

let
    BanHang = #table(
        type table [MaGD = text, MaCH = text, DoanhThu = number],
        {{"GD01", "CH01", 1000000},
         {"GD02", "CH02", 1500000},
         {"GD03", "CH01", 2000000}}
    ),
    CuaHang = #table(
        type table [MaCH = text, TenCH = text],
        {{"CH01", "Cua hang Ha Noi"},
         {"CH02", "Cua hang Da Nang"}}
    ),
    Ghep = Table.NestedJoin(
        BanHang, {"MaCH"}, CuaHang, {"MaCH"},
        "DanhMuc", JoinKind.LeftOuter
    ),
    KetQua = Table.ExpandTableColumn(
        Ghep, "DanhMuc", {"TenCH"}, {"TenCuaHang"}
    )
in
    KetQua

Kết quả vẫn là 3 giao dịch, tổng doanh thu 4.500.000 đồng và có thêm TenCuaHang. Mã M dùng tên cửa hàng không dấu để dễ sao chép; dữ liệu tiếng Việt có dấu vẫn dùng được. Đây là ví dụ tự chứa, không phụ thuộc query của phần Append.

Vì sao Merge làm doanh thu tăng dù không báo lỗi?

Hãy thêm một dòng CH01 nữa vào danh mục, với tên Cua hang Ha Noi moi. Khi mở rộng kết quả ghép, mỗi giao dịch CH01 có hai dòng khớp. GD01 và GD03 xuất hiện hai lần, còn GD02 giữ nguyên: kết quả thành 5 dòng và tổng doanh thu tăng lên 7.500.000 đồng.

Điểm cần phân biệt là bước NestedJoin tạo cột chứa bảng con; số dòng tăng trong ví dụ này khi bạn mở rộng các bảng con có nhiều dòng khớp. Microsoft mô tả hành vi mở rộng tại Table.ExpandTableColumn.

Để tìm khóa trùng, chọn MaCH trong danh mục, dùng Group By, đếm số dòng rồi lọc số đếm lớn hơn 1. Đừng xóa trùng tùy ý nếu danh mục lưu lịch sử đổi tên hoặc nhiều chi nhánh dùng chung mã. Khi đó bạn cần sửa khóa hoặc bổ sung quy tắc thời gian hiệu lực.

Nếu cả hai bảng đều chứa nhiều dòng trên mỗi cửa hàng, chẳng hạn doanh số từng hóa đơn và chi phí từng chứng từ, Merge chỉ bằng MaCH có thể tạo nhiều cặp khớp. Hãy tổng hợp chúng về cùng mức cửa hàng–tháng trước khi ghép, hoặc giữ hai bảng nghiệp vụ riêng theo mô hình sao trong Power BI.

Chọn kiểu nối nào để không mất giao dịch?

  • Left Outer: giữ mọi dòng bảng trái; dùng khi bổ sung danh mục cho giao dịch, rồi kiểm tra các giá trị chưa khớp.

  • Inner: chỉ giữ các dòng có cặp khớp; phù hợp khi bạn chủ động muốn lọc giao dịch theo danh sách hợp lệ.

  • Left Anti: lấy dòng bảng trái không có đối tác; hữu ích để tìm mã cửa hàng chưa được khai báo.

  • Full Outer: giữ dữ liệu từ cả hai phía; dùng khi đối chiếu hai danh sách và cần thấy cả phần thiếu bên này lẫn bên kia.

Ví dụ có giao dịch CH03 nhưng danh mục chỉ có CH01 và CH02: Left Outer giữ giao dịch CH03 với tên null, còn Inner loại nó khỏi kết quả. Nếu đổi sang Inner chỉ để hết null, bạn có thể vô tình làm thiếu doanh thu. Hãy xuất riêng danh sách chưa khớp để xử lý nguồn.

Checklist đối soát trước khi đưa lên dashboard

  1. Ghi lại số dòng và tổng tiền ở từng nguồn sau khi làm sạch.

  2. Với Append, kiểm tra số dòng kết quả bằng tổng số dòng nguồn nếu chưa có bước lọc hay loại trùng.

  3. Với Merge bổ sung danh mục có khóa duy nhất, kiểm tra số dòng và tổng doanh thu sau mở rộng không đổi.

  4. Kiểm tra khóa null, khóa trùng và các giao dịch chưa khớp bằng query riêng.

  5. Đối chiếu vài mã cụ thể, sau đó refresh lại với dữ liệu kỳ tiếp theo.

Nên giữ thêm cột nguồn hoặc kỳ dữ liệu để truy ngược sai lệch. Với bảng lớn, kiểm tra trên toàn bộ dữ liệu được tải và đối chiếu báo cáo nguồn; phần xem trước trong Editor không thay thế được bước đối soát cuối cùng.

Câu hỏi thường gặp

Merge có giống VLOOKUP không?

Có thể dùng Merge để lấy thông tin theo mã, nhưng một khóa có nhiều dòng khớp sẽ tạo nhiều kết quả khi mở rộng. Vì vậy, đừng mặc định nó chỉ lấy dòng đầu tiên như cách dò tìm thường dùng.

Hai bảng khác tên cột có Append được không?

Có, nhưng các tên khác nhau tạo thành các cột riêng. Nếu chúng cùng ý nghĩa, đổi về một tên trước khi Append. Nếu khác ý nghĩa, giữ riêng và xác định cách xử lý null.

Nên Append trước hay Merge trước?

Nếu các bảng giao dịch có cùng cấu trúc và dùng chung danh mục, thường nên làm sạch từng nguồn, Append rồi Merge một lần. Nếu mỗi nguồn dùng một hệ mã riêng, hãy chuẩn hóa mã trước khi gom.

Có cần Merge danh mục vào bảng bán hàng trong Power BI?

Không phải lúc nào cũng cần. Bạn có thể giữ danh mục riêng và tạo relationship để lọc báo cáo. Merge phù hợp khi cần một bảng đầu ra phẳng hoặc cần thông tin danh mục ngay trong bước biến đổi.

Nếu bạn cần người làm hộ quy trình gom dữ liệu, đối soát và dựng dashboard, hãy chuẩn bị file mẫu cùng quy tắc tính chỉ tiêu rồi xem báo giá làm Power BI để trao đổi phạm vi phù hợp.

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
Merge và Append trong Power Query: cách dùng đúng | SenData