Tách một bảng Excel lộn xộn thành nhiều bảng liên kết nghĩa là chia nó ra thành vài bảng nhỏ, mỗi bảng chỉ nói về một loại đối tượng — khách hàng, sản phẩm, đơn hàng — rồi nối chúng với nhau bằng mã. Thông tin trước đây phải gõ lại trên mỗi dòng nay chỉ ghi một lần ở bảng của nó; dòng đơn hàng chỉ mang mã khách và mã hàng. Sửa địa chỉ khách một lần là mọi đơn đều đúng theo.
Bài này đi qua một ví dụ giả định: một cửa hàng gốm ở Vĩnh Long bán qua mạng, dùng một trang tính suốt ba năm, hơn hai chục cột, mỗi người phụ việc lại thêm cột theo ý mình. Bạn sẽ thấy cách nhận ra những bảng đang trộn lẫn trong đó, cách nhờ trợ lý AI đề xuất cách tách mà không phải đưa dữ liệu khách thật cho nó, cách tách ngay trong Excel hoặc Google Sheets và ba phép đếm để chắc không rơi mất dòng nào.
Dấu hiệu cho thấy một trang tính đang gánh nhiều bảng
Cùng một thông tin bị gõ lại trên nhiều dòng. Chị khách ở phường Long Châu mua tám lần thì tên, số điện thoại, địa chỉ của chị xuất hiện tám lần. Chỉ cần một lần gõ thiếu dấu là bộ lọc theo tên khách đã đếm hụt. Lặp lại là triệu chứng rõ nhất của việc thông tin khách đang ở nhầm chỗ.
Sửa một chỗ phải sửa nhiều nơi. Khi khách đổi địa chỉ, người nhập phải tìm hết các dòng cũ để sửa, hoặc chỉ sửa dòng mới nhất và để các dòng cũ mang địa chỉ khác. Ba tháng sau không ai biết địa chỉ nào là đúng.
Có các cột đánh số kiểu Sản phẩm 1, Sản phẩm 2, Sản phẩm 3. Đây là dấu hiệu một đơn hàng có nhiều món đang bị nhét vào một dòng. Khi có đơn sáu món thì phải thêm cột, còn phần lớn đơn một món để trống cả loạt cột phía sau.
Một ô chứa nhiều giá trị. Ô ghi "2 bát men lam, 1 đĩa men nâu" đọc thì hiểu nhưng máy không cộng được số bát đã bán trong tháng. Mọi câu hỏi về số lượng theo mặt hàng đều phải đếm tay.
Câu hỏi đơn giản lại khó trả lời. Khách này đã mua bao nhiêu lần, mặt hàng nào chưa bán được chiếc nào, có bao nhiêu khách ở Cần Thơ — những câu này lẽ ra chỉ cần một bộ lọc, nhưng với bảng trộn lẫn bạn phải loại trùng, tách chữ rồi mới đếm được. Thấy từ ba dấu hiệu trở lên là đến lúc tách.
Nhận diện đối tượng: ai, cái gì và việc gì đã xảy ra
Trước khi mở máy, hãy lấy giấy viết ra mọi tiêu đề cột của trang tính, rồi hỏi từng cột một câu: cột này đang mô tả cái gì? Câu trả lời thường rơi vào vài nhóm. Có cột mô tả một người (tên khách, số điện thoại, ngày sinh, nhóm khách quen). Có cột mô tả một thứ (tên món hàng, men, kích thước, giá niêm yết). Có cột mô tả một sự việc đã xảy ra (ngày đặt, kênh đặt, phí giao hàng, trạng thái đơn). Và có cột mô tả một món trong sự việc đó (số lượng từng món, giá bán thực tế của món trong đơn).
Mỗi nhóm như vậy là một ứng viên cho một bảng riêng. Người thiết kế cơ sở dữ liệu gọi chúng là thực thể; tên gọi không quan trọng bằng thói quen tự hỏi "mỗi dòng của bảng này đại diện cho cái gì". Một bảng tốt trả lời câu đó bằng một cụm từ ngắn: mỗi dòng là một khách hàng, mỗi dòng là một mặt hàng, mỗi dòng là một đơn hàng, mỗi dòng là một món trong một đơn.
Có những cột khó xếp. Địa chỉ giao hàng thuộc về khách hay về đơn? Nếu khách hay gửi quà cho người khác thì địa chỉ giao là của đơn, còn địa chỉ liên hệ là của khách — hai cột khác nhau, hai bảng khác nhau. Giá bán thuộc về sản phẩm hay về đơn? Giá niêm yết là của sản phẩm, còn giá thực tế khách trả sau giảm là của từng món trong đơn. Ghi những cột lấn cấn này ra một danh sách riêng; chính chúng là câu hỏi bạn cần trả lời bằng hiểu biết về cửa hàng, không phải bằng công thức.
Bản thiết kế bốn bảng cho ví dụ cửa hàng gốm
Với cửa hàng gốm trong ví dụ giả định, bốn bảng là đủ cho phần việc bán hàng. Bảng dưới ghi mỗi bảng là gì, các cột chính và nó nối với bảng nào qua cột mã.
| Bảng | Mỗi dòng là | Cột chính | Nối với |
|---|---|---|---|
| khach_hang | Một khách hàng | ma_kh, ho_ten, dien_thoai, dia_chi_lien_he, tinh_thanh, ngay_tao | Được bảng don_hang tham chiếu qua ma_kh |
| san_pham | Một mặt hàng đang hoặc đã từng bán | ma_sp, ten_sp, nhom_hang, men, kich_thuoc, gia_niem_yet, con_ban | Được bảng chi_tiet_don tham chiếu qua ma_sp |
| don_hang | Một lần khách đặt mua | ma_don, ma_kh, ngay_dat, kenh_ban, dia_chi_giao, phi_giao, trang_thai | Mang ma_kh của khách; được chi_tiet_don tham chiếu qua ma_don |
| chi_tiet_don | Một món trong một đơn | ma_don, ma_sp, so_luong, don_gia_ban, giam_gia | Mang cả ma_don và ma_sp |
Hai chi tiết đáng chú ý. Thứ nhất, bảng chi_tiet_don lưu đơn giá tại thời điểm bán, không tra lại giá niêm yết: giá niêm yết tháng sau có thể tăng, nhưng đơn cũ phải giữ đúng số tiền khách đã trả. Thứ hai, cột mã là thứ duy nhất được phép lặp giữa các bảng. Tên khách không xuất hiện trong bảng đơn hàng nữa; muốn xem tên thì tra qua ma_kh. Nếu sau này cửa hàng cần quản lý nhân viên bán hoặc nhà cung cấp, bạn thêm bảng theo đúng cách đó chứ không thêm cột vào bảng đơn.
Nhờ AI đề xuất cách tách mà không lộ dữ liệu khách
Trợ lý AI như ChatGPT, Claude hay Gemini làm tốt việc đọc một dòng tiêu đề và gợi ý các bảng, vì đây là bài toán thiết kế phổ biến. Điều nó không biết là quy tắc riêng của cửa hàng bạn. Quy trình dưới đây giữ dữ liệu thật ở trong máy và dùng AI như một người góp ý.
- Sao chép dòng tiêu đề và chỉ năm dòng dữ liệu sang một trang tính mới. Thay toàn bộ tên, số điện thoại, địa chỉ thật bằng giá trị giả như Khách A, Khách B, Phường X. Đừng dán danh sách khách thật vào bất kỳ chatbot nào, kể cả khi chỉ để hỏi thiết kế.
- Ghi thêm ba đến năm quy tắc nghiệp vụ mà bạn biết chắc, ví dụ: một khách có thể đặt nhiều đơn; một đơn có thể có nhiều món; địa chỉ giao có thể khác địa chỉ khách; giá bán có thể khác giá niêm yết.
- Gửi câu lệnh mẫu: "Đây là dòng tiêu đề và năm dòng dữ liệu giả định của bảng theo dõi đơn hàng ở một cửa hàng nhỏ, kèm các quy tắc nghiệp vụ. Đề xuất cách tách thành các bảng có quan hệ. Với mỗi bảng, ghi: tên bảng, mỗi dòng đại diện cho cái gì, danh sách cột, khoá chính, khoá ngoại. Cột nào chưa rõ thuộc bảng nào thì liệt kê riêng kèm câu hỏi cần làm rõ, không tự đoán."
- Đối chiếu đề xuất với bản phác trên giấy của bạn. Chỗ nào khác nhau, hỏi tiếp AI vì sao nó đặt cột đó ở bảng đó, rồi tự quyết theo cách cửa hàng thật sự vận hành.
- Yêu cầu AI liệt kê các câu hỏi bạn sẽ trả lời được sau khi tách (khách mua bao nhiêu lần, món nào bán chậm) và kiểm xem thiết kế có trả lời được hết không. Câu nào chưa trả lời được thường báo hiệu thiếu một cột hoặc một bảng.
AI hay mắc hai lỗi trong bước này: gộp địa chỉ giao vào bảng khách, và quên bảng chi tiết đơn khi dữ liệu mẫu chỉ có đơn một món. Vì vậy năm dòng mẫu nên có ít nhất một đơn nhiều món và một đơn giao cho người khác.
Tách ngay trong Excel hoặc Google Sheets
Không cần phần mềm cơ sở dữ liệu để bắt đầu. Bốn trang tính trong cùng một tệp, mỗi trang một bảng, đã giải quyết phần lớn chuyện gõ lặp. Làm trên bản sao, giữ nguyên tệp gốc.
- Tạo trang khach_hang: sao chép các cột thông tin khách từ bảng gốc, loại các dòng trùng theo số điện thoại (trong Excel là chức năng Remove Duplicates ở thẻ Data), rồi thêm cột ma_kh đánh theo dạng KH0001, KH0002.
- Tạo trang san_pham tương tự từ cột tên hàng, gán ma_sp. Nếu tên hàng gõ lệch nhau ("bát men lam" và "Bát Men Lam 12cm"), gom chúng về một mã trước; việc làm sạch tên chi tiết có ở danh mục làm sạch dữ liệu của trang.
- Trên bản sao bảng gốc, thêm cột ma_kh bằng công thức tra theo số điện thoại. Với Excel bản mới có hàm XLOOKUP: =XLOOKUP(C2,khach_hang!C:C,khach_hang!A:A,"chưa có"). Máy cài vùng Việt Nam có thể phải đổi dấu phẩy thành dấu chấm phẩy; bản Excel cũ không có XLOOKUP thì dùng INDEX kết hợp MATCH.
- Tách các đơn nhiều món thành nhiều dòng trong trang chi_tiet_don, mỗi dòng một mã đơn, một mã hàng, một số lượng. Ô ghi gộp kiểu "2 bát, 1 đĩa" thì tách tay hoặc nhờ AI viết công thức tách trên dữ liệu giả, rồi kiểm từng đơn.
- Tạo trang don_hang chỉ giữ một dòng mỗi đơn với các cột thuộc về đơn. Định dạng mỗi trang thành Table (Ctrl+T trong Excel) để công thức tự mở rộng khi thêm dòng.
Đến đây bạn đã có bốn bảng nối bằng mã. Từ nay, nhập đơn mới là thêm một dòng ở don_hang và vài dòng ở chi_tiet_don, không gõ lại tên khách nữa.
Kiểm sau khi tách: những phép đếm không được bỏ
Tách bảng là thao tác dễ làm rơi dữ liệu một cách lặng lẽ: không có thông báo lỗi nào, chỉ có vài đơn biến mất. Làm đủ các phép kiểm dưới đây trước khi xoá bất cứ thứ gì.
- Đếm đơn: số mã đơn khác nhau trong bảng gốc phải bằng số dòng của don_hang. Lệch một đơn cũng phải tìm cho ra.
- Tổng tiền: tổng thành tiền của bảng gốc phải bằng tổng của số lượng nhân đơn giá trừ giảm giá trong chi_tiet_don, cộng phí giao trong don_hang. Lệch nhỏ thường do làm tròn; lệch lớn là do tách sai đơn nhiều món.
- Mã mồ côi: mỗi ma_kh trong don_hang phải có trong khach_hang, mỗi ma_sp trong chi_tiet_don phải có trong san_pham. Dùng COUNTIF đếm, dòng nào ra 0 là mồ côi.
- Khách trùng sót: lọc khach_hang theo tên, xem có hai mã cho cùng một người vì đổi số điện thoại hay không.
- Đối chiếu tay: chọn ngẫu nhiên năm đơn, mở bảng gốc và bảng mới cạnh nhau, đọc từng món. Năm phút này bắt được loại lỗi mà công thức không bắt.
Nếu có dùng công thức do AI viết, phép đối chiếu tay càng không được bỏ: công thức chạy không báo lỗi chưa chắc đã đúng với dữ liệu của bạn. Chỉ khi mọi phép đếm khớp mới chuyển cả cửa hàng sang dùng bộ bảng mới, và vẫn cất tệp gốc ở chế độ chỉ đọc một thời gian.
Tách quá tay và tách chưa đủ
Người mới học thiết kế bảng hay rơi vào thái cực ngược lại: thấy cột nào có giá trị lặp cũng tách thành bảng riêng. Cột giới tính, cột kênh bán chỉ có ba giá trị không cần một bảng có mã riêng; một danh sách cố định cho phép chọn là đủ. Bảng riêng chỉ đáng làm khi đối tượng đó có thông tin của riêng nó cần quản lý, chẳng hạn kênh bán có phí sàn, người phụ trách, ngày bắt đầu.
Ngược lại, tách chưa đủ thường lộ ra muộn. Dấu hiệu là bảng mới lại bắt đầu có cột Ghi chú 1, Ghi chú 2, hoặc bảng sản phẩm có cột Giá sỉ, Giá lẻ, Giá cộng tác viên rồi thêm Giá sàn A, Giá sàn B. Khi số cột kiểu này cứ tăng theo thời gian, đó là một bảng nữa đang chờ được tách ra.
Bộ bảng của cửa hàng gốm vẫn là bảng tính, chưa phải cơ sở dữ liệu theo nghĩa phần mềm: không có gì ngăn người nhập gõ một mã khách không tồn tại. Phần kiểm tra hợp lệ khi nhập có ở danh mục chất lượng dữ liệu của trang. Còn khi bảng đã sạch và bạn muốn đọc xem khách nào quay lại, mùa nào bán chạy, đó là việc phân tích, thuộc về trang AI Phân Tích. Phần việc của bài này dừng ở chỗ dữ liệu đã nằm đúng bảng, đúng mã, sẵn sàng cho bước tiếp theo.
Câu hỏi thường gặp
Tách bảng xong có phải bỏ Excel để dùng phần mềm cơ sở dữ liệu không?
Không bắt buộc. Với cửa hàng vài nghìn đơn mỗi năm, bốn trang tính trong một tệp Excel hoặc Google Sheets nối bằng mã và công thức tra cứu là dùng được lâu dài. Chỉ nên chuyển khi nhiều người cùng nhập một lúc, dữ liệu quá lớn hoặc cần ràng buộc chặt mà bảng tính không làm được.
Có nên đưa cả tệp đơn hàng thật cho AI để nó tự tách không?
Không nên. Tệp đơn hàng chứa tên, số điện thoại, địa chỉ của khách là dữ liệu cá nhân. Thiết kế chỉ cần dòng tiêu đề và vài dòng giả định; phần tách dữ liệu thật bạn làm trong máy bằng công thức hoặc thao tác có sẵn của bảng tính.
Mã khách hàng nên đặt theo số điện thoại cho dễ nhớ không?
Không nên dùng số điện thoại làm mã. Khách đổi số, hai người dùng chung một số, hoặc một người có hai số đều làm mã bị sai. Số điện thoại là một cột thông tin bình thường; mã khách nên là một chuỗi do cửa hàng cấp và không bao giờ đổi.
Đơn hàng có cần lưu cột tổng tiền không khi đã tính được từ chi tiết đơn?
Có thể lưu, miễn là coi nó như một con số để đối chiếu. Nhiều cửa hàng lưu tổng tiền đã thu thực tế để so với tổng tính từ chi tiết; khi hai số lệch nhau là có món bị nhập sai hoặc có khoản giảm giá chưa ghi.
Dữ liệu cũ có những đơn không rõ khách là ai thì xử lý sao?
Tạo một mã khách đặc biệt kiểu khách vãng lai và gán các đơn đó vào mã này, ghi chú lý do. Cách này giữ đủ số đơn và tổng tiền, không bỏ dòng, đồng thời không bịa ra khách hàng không có thật.
Nhiều người cùng nhập vào bộ bảng mới thì có rủi ro gì?
Rủi ro lớn nhất là hai người cùng cấp một mã cho hai khách khác nhau, hoặc cùng tạo trùng một khách. Nên giao một người giữ bảng khách hàng và bảng sản phẩm, những người khác chỉ thêm đơn và chọn mã có sẵn từ danh sách.