Tuần 3 · Ngày 11 · Bài mới · 4 giờ
Mục tiêu
- Phân biệt Append (nối dọc) và Merge (nối ngang)
- Append nhiều bảng cùng và khác cấu trúc, hiểu Append ghép theo tên cột
- Merge để tra cứu thông tin từ bảng danh mục, nắm 6 kiểu join
- Kiểm tra số dòng và tổng tiền trước và sau khi kết hợp bảng
Ngày 11: Append và Merge
Kế hoạch 4 giờ
| Thời gian | Nội dung |
|---|---|
| Giờ 1 | Phần 1 - 2: Append và Merge là gì, 6 kiểu join |
| Giờ 2 - 3 | Phần 3 - 4: gộp sổ cái 12 tháng, gắn tên tài khoản |
| Giờ 4 | Bài tập, có bài phụ về doanh thu |
Yêu cầu tuần này: chị Lan (kế toán trưởng) gửi file SoCai_2025_12Thang.xlsx: sổ cái năm 2025 của Sao Mai, mỗi tháng một sheet. Chị cần “một bảng sổ cái cả năm, có tên tài khoản và chỉ tiêu P&L, và tìm giúp vì sao có khoản không lên được báo cáo”. Hôm nay làm phần gộp và gắn tên; ngày mai làm phần chỉ tiêu P&L và tìm khoản bị sót.
1. Append và Merge khác nhau thế nào?
| Append | Merge | |
|---|---|---|
| Hình dung | Chồng bảng lên nhau (nối dọc) | Ghép bảng cạnh nhau (nối ngang) |
| Kết quả | Nhiều dòng hơn, số cột giữ nguyên | Nhiều cột hơn, số dòng thường giữ nguyên |
| Dùng khi | Dữ liệu cùng loại bị chia nhiều nơi: 12 tháng, 3 chi nhánh | Cần tra cứu thêm thông tin từ bảng khác: tên tài khoản, tên phòng ban |
| Giống trong Excel | Copy dán nối tiếp xuống dưới | XLOOKUP / VLOOKUP |
| Giống trong SQL | UNION ALL | JOIN |
2. Sáu kiểu join của Merge
Merge cần cột khóa chung ở 2 bảng (ví dụ Mã TK). Bảng thứ nhất gọi là bảng trái, bảng thứ hai là bảng phải. Kiểu join quyết định giữ dòng nào:
| Kiểu join | Giữ lại | Dùng khi |
|---|---|---|
| Left Outer (mặc định) | Mọi dòng bảng trái, kèm thông tin bảng phải nếu tìm thấy | Tra cứu thông thường: giữ đủ sổ cái, thêm tên tài khoản |
| Right Outer | Mọi dòng bảng phải | Ít dùng; đổi chỗ 2 bảng rồi dùng Left Outer cho dễ hiểu |
| Full Outer | Mọi dòng của cả hai bảng | Đối chiếu 2 danh sách xem bên nào thiếu |
| Inner | Chỉ dòng có ở cả hai | Khi chỉ muốn giữ dòng khớp. Nguy hiểm: dòng không khớp biến mất mà không báo |
| Left Anti | Dòng bảng trái không có ở bảng phải | Tìm ngoại lệ: tài khoản chưa có trong danh mục, hàng trả không có đơn gốc |
| Right Anti | Dòng bảng phải không có ở bảng trái | Tìm tài khoản trong danh mục chưa từng phát sinh |
Ví dụ nhỏ. Bảng trái có 3 dòng sổ cái với TK 5111, 6417, 64281. Bảng phải (danh mục) có 5111, 6417, 632.
| Kiểu join | Kết quả |
|---|---|
| Left Outer | 3 dòng; dòng 64281 có tên TK = null |
| Inner | 2 dòng (5111, 6417); dòng 64281 mất |
| Left Anti | 1 dòng: 64281 |
| Right Anti | 1 dòng: 632 |
| Full Outer | 4 dòng |
3. Thực hành: Append sổ cái 12 tháng
3.1 Nạp 12 sheet
- Tạo file mới
SaoMai_TaiChinh.pbix. Get Data > Excel workbook >SoCai_2025_12Thang.xlsx. - Ở Navigator, tick cả 12 sheet
T01…T12> Transform Data. - Power Query tạo 12 query. Mở từng query, kiểm tra bước Promoted Headers (dòng đầu đã thành tên cột). Bước Changed Type tự động sẽ đổi MaTK thành số (vì mã tài khoản toàn chữ số); không sao, bước 4 dưới đây đổi lại thành Text.
3.2 Phát hiện khác cấu trúc
Mở query T06 và T07, so sánh tên cột:
| T01 - T06 | T07 - T12 |
|---|---|
| SoCT | Số chứng từ |
| NgayCT | Ngày hạch toán (đổi thứ tự) |
| NgayHachToan | Ngày chứng từ (đổi thứ tự) |
| DienGiai | Tài khoản (đổi thứ tự) |
| MaTK | Diễn giải |
| No | Phát sinh Nợ |
| Co | Phát sinh Có |
| MaDoiTuong | Mã đối tượng |
| MaPhongBan | Mã bộ phận |
| MaNganh | Mã ngành hàng |
Từ tháng 7/2025, phần mềm kế toán được nâng cấp: tên cột chuyển sang tiếng Việt có dấu, và thứ tự cột cũng đổi. Chuyện này rất hay xảy ra trong thực tế.
Append ghép theo TÊN cột, không theo vị trí. Nếu Append ngay, Power Query thấy 20 tên cột khác nhau, kết quả có 20 cột: 6 tháng đầu có dữ liệu ở 10 cột tên cũ, 6 tháng sau ở 10 cột tên mới, còn lại là null.
3.3 Đổi tên cột rồi mới Append
- Ở query
T07, đổi tên 10 cột về tên cũ:Số chứng từ→SoCT,Ngày hạch toán→NgayHachToan,Ngày chứng từ→NgayCT,Tài khoản→MaTK,Diễn giải→DienGiai,Phát sinh Nợ→No,Phát sinh Có→Co,Mã đối tượng→MaDoiTuong,Mã bộ phận→MaPhongBan,Mã ngành hàng→MaNganh. Thứ tự cột không cần sửa. - Làm tương tự cho
T08…T12. Mẹo: mở Advanced Editor củaT07, chép bướcTable.RenameColumnssang 5 query còn lại. - Home > Append Queries > Append Queries as New > Three or more tables > chọn đủ 12 query theo thứ tự > OK. Đổi tên query mới thành SoCai.
- Ở SoCai, đặt kiểu:
MaTK,SoCT,MaDoiTuong,MaPhongBan,MaNganh= Text;NgayCT,NgayHachToan= Date;No,Co= Whole Number. - Chuột phải 12 query tháng > bỏ tick Enable load: chỉ nạp SoCai vào mô hình.
3.4 Kiểm tra sau khi Append
Đây là bước bắt buộc mỗi khi kết hợp bảng:
| Kiểm tra | Cách làm | Kết quả đúng |
|---|---|---|
| Số dòng | Xem góc dưới trái Power Query, hoặc nạp rồi đếm | 10.311 = tổng số dòng 12 sheet |
| Số cột | 10 cột | |
| Tổng Nợ = tổng Có | Group By (không chọn cột nhóm) tính Sum No, Sum Co | Cả hai 381.805.417.644 |
Số dòng từng tháng: T01 990, T02 797, T03 854, T04 916, T05 813, T06 811, T07 926, T08 793, T09 849, T10 917, T11 838, T12 807.
Vì sao tổng Nợ phải bằng tổng Có? Mỗi chứng từ Nợ = Có (ngày 7 tuần 2), nên cộng cả năm cũng bằng nhau. Nếu lệch, nghĩa là có tháng bị thiếu dòng hoặc cột No/Co bị đọc sai.
4. Thực hành: Merge để gắn tên tài khoản
- Nạp
DanhMuc_TaiKhoan_PhongBan.xlsx, sheet DanhMucTaiKhoan. Đặt kiểu Mã TK = Text. Đổi tên query thành DimTaiKhoan. - Chọn query SoCai > Home > Merge Queries (không phải “as New”).
- Bảng trên: SoCai, chọn cột MaTK. Bảng dưới: DimTaiKhoan, chọn cột Mã TK. Join Kind: Left Outer.
- Power Query báo ở cuối hộp thoại: “The selection matches 10.311 of 10.311 rows from the first table”. Đây là thông tin kiểm tra rất quý: nếu số khớp nhỏ hơn số dòng, có mã không tìm thấy.
- OK. Cột mới tên DimTaiKhoan chứa chữ Table. Bấm biểu tượng mở rộng ở tiêu đề cột > chỉ tick Tên tài khoản, bỏ tick Use original column name as prefix > OK.
Ảnh chụp màn hình sẽ được bổ sung
Hộp thoại Merge Queries: bảng SoCai chọn cột MaTK, bảng DimTaiKhoan chọn cột Mã TK, Join Kind = Left Outer, dòng thông báo “matches 10.311 of 10.311 rows”.
Kiểm tra lại: số dòng SoCai vẫn 10.311, tổng Nợ vẫn 381.805.417.644. Merge kiểu Left Outer với một bảng danh mục không trùng khóa thì không làm đổi số dòng. Ngày 4 sẽ gặp trường hợp danh mục bị trùng khóa và số dòng tăng lên.
5. Bài tập tự làm
Append không đổi tên cột (thời gian gợi ý: 15 phút)
Tạo thêm một query Append 12 sheet mà không đổi tên cột tháng 7 - 12 (Append as New, đặt tên SoCai_Thu).
- Query có bao nhiêu cột? Bao nhiêu dòng?
- Lọc cột
MaTK= null: có bao nhiêu dòng? Đó là những tháng nào? - Vì sao cách làm này nguy hiểm khi lên báo cáo?
Xong thì xóa query SoCai_Thu.
- 20 cột, vẫn 10.311 dòng. Số dòng không đổi nên rất dễ tưởng là đúng.
- 5.130 dòng có MaTK = null: toàn bộ tháng 7 - 12 (926 + 793 + 849 + 917 + 838 + 807). Dữ liệu các tháng này nằm ở cột
Tài khoản. - Báo cáo dùng cột MaTK, No, Co sẽ chỉ có 6 tháng đầu. Tổng doanh thu năm bị thiếu khoảng một nửa, nhưng không có lỗi nào hiện ra. Đây là lý do luôn kiểm tra số cột và tổng tiền theo tháng sau Append, không chỉ số dòng.
Gắn tên tài khoản và đếm theo loại chứng từ (thời gian gợi ý: 30 phút)
Trên query SoCai đã có tên tài khoản:
- Thêm cột LoaiCT = 2 ký tự đầu của SoCT.
- Group By LoaiCT, đếm số dòng và số chứng từ khác nhau (Count Distinct Rows trên SoCT không dùng được, hãy dùng thao tác Count Distinct của cột SoCT trong Group By nâng cao).
- Loại chứng từ nào nhiều dòng nhất? Có bao nhiêu dòng KC (kết chuyển)? Vì sao khi lập P&L phải bỏ các dòng KC?
-
Kết quả (năm 2025): HD nhiều dòng nhất (4.535 dòng, 648 chứng từ), tiếp theo là BC (1.311 dòng, 655 chứng từ) và BL (972 dòng, 36 chứng từ). HD và BC nhiều vì mỗi hóa đơn bán hàng có 1 dòng phải thu, 1 dòng thuế và tới 5 dòng doanh thu (mỗi ngành một dòng), còn mỗi lần NPP trả tiền là một chứng từ BC.
-
Có 351 dòng KC. Cuối mỗi tháng, kế toán kết chuyển toàn bộ doanh thu và chi phí sang tài khoản 911 để tính lãi lỗ: ghi Nợ 5111 / Có 911 (đưa doanh thu sang 911), Nợ 911 / Có 641… (đưa chi phí sang 911). Sau bút toán này, số dư tài khoản doanh thu, chi phí về 0.
Nếu cộng cả dòng KC, doanh thu tháng nào cũng ra bằng 0 (Có lúc bán hàng, Nợ lúc kết chuyển). Vì vậy khi lập P&L từ sổ cái: bỏ các chứng từ KC. Đây là bẫy rất hay gặp khi lần đầu làm báo cáo tài chính từ sổ cái.
Doanh thu: gộp sell-in 12 tháng (thời gian gợi ý: 25 phút)
File SellIn_2025_12Thang.xlsx có 12 sheet, mỗi sheet là doanh số Sao Mai bán cho các NPP trong tháng (sell-in), cùng cấu trúc.
- Append 12 sheet thành query SellIn2025. Đặt kiểu đúng cho từng cột.
- Có bao nhiêu dòng? Tổng ThanhTien bằng bao nhiêu?
- So với tổng phát sinh Có của tài khoản 5111 trên SoCai (chỉ tính chứng từ HD, bỏ KC), hai số có bằng nhau không? Vì sao phải bằng nhau?
- 6.685 dòng, tổng ThanhTien 43.902.134.500 đồng.
- Lọc SoCai: MaTK =
5111, SoCT bắt đầu bằngHD, cộng cột Co: cũng 43.902.134.500. Hai số bằng nhau vì doanh thu bán hàng của Sao Mai chính là tiền bán hàng cho NPP: mỗi hóa đơn kế toán ghi đều xuất phát từ sell-in.
Đây là đối chiếu doanh thu đầu tiên của vk iu: số của phòng kinh doanh (sell-in) khớp số của phòng kế toán (sổ cái). Ngày 5 sẽ đối chiếu chi tiết theo từng NPP, và sẽ thấy doanh thu thuần trên P&L lại thấp hơn con số này.
Chọn kiểu join (thời gian gợi ý: 15 phút)
Với mỗi yêu cầu, chọn kiểu join và cho biết bảng nào để bên trái:
- Gắn tên phòng ban vào từng dòng sổ cái, không được mất dòng nào.
- Liệt kê các mã đối tượng trên sổ cái chưa có trong danh mục khách hàng, nhà cung cấp.
- Liệt kê các tài khoản có trong danh mục nhưng năm 2025 không phát sinh lần nào.
- Tạo bảng chỉ gồm các dòng sổ cái thuộc những tài khoản có trong bảng mapping P&L.
- Left Outer, sổ cái bên trái, danh mục phòng ban bên phải.
- Left Anti, sổ cái bên trái, danh mục đối tượng bên phải. Nên Group By sổ cái theo MaDoiTuong trước để danh sách gọn.
- Left Anti, danh mục tài khoản bên trái, sổ cái (đã Group By theo MaTK) bên phải. Hoặc Right Anti nếu để sổ cái bên trái.
- Inner, sổ cái bên trái, mapping bên phải. Nhưng phải biết trước những dòng nào sẽ mất: chạy Left Anti trước để xem. Ngày mai vk iu sẽ thấy dùng Inner mà không kiểm tra làm P&L sai thế nào.
6. Tự đánh giá
- Tôi phân biệt được Append và Merge, và biết Append ghép theo tên cột
- Tôi nói được công dụng của 6 kiểu join
- Query SoCai của tôi có 10.311 dòng, 10 cột, tổng Nợ = tổng Có = 381.805.417.644
- Tôi luôn đặt kiểu Text cho cột mã trước khi Merge
- Tôi biết vì sao phải bỏ chứng từ KC khi lập P&L từ sổ cái