Độ chi tiết (granularity, hay grain) của một bảng là câu trả lời cho câu hỏi "mỗi dòng đại diện cho cái gì": một đơn hàng, một mặt hàng trong một đơn, một khách trong một tháng, hay một chi nhánh trong một ngày. Đây là đặc điểm quan trọng nhất của một bảng, nhưng hiếm khi được ghi ra, và hầu hết các lỗi tổng bị nhân đôi, nhân ba khi nối bảng đều bắt nguồn từ việc trộn hai độ chi tiết khác nhau.
Người làm văn phòng thường không gọi tên khái niệm này nhưng gặp nó liên tục: phí vận chuyển bị cộng nhiều lần, số khách đếm ra nhiều hơn thực tế, bảng chấm công gộp từ máy quẹt thẻ cho ra số công lạ. Bài này giải thích độ chi tiết bằng ví dụ giả định ở cửa hàng và văn phòng, cách xác định độ chi tiết của một bảng bất kỳ, và cách dùng nó để mô tả bảng cho AI.
Cùng một hoạt động bán hàng, bốn độ chi tiết
Ví dụ giả định: một cửa hàng tạp hoá bán ba đơn trong một ngày, đơn thứ nhất có hai mặt hàng, đơn thứ hai có ba, đơn thứ ba có một. Dữ liệu có thể được ghi ở bốn mức sau.
| Độ chi tiết | Một dòng là | Số dòng trong ngày | Trả lời được câu hỏi |
|---|---|---|---|
| Dòng mặt hàng | Một mặt hàng trong một đơn | 6 | Mặt hàng nào bán chạy, thường mua kèm gì |
| Đơn hàng | Một lần thanh toán | 3 | Giá trị đơn trung bình, giờ đông khách |
| Khách theo ngày | Một khách trong một ngày | Tối đa 3, ít hơn nếu một khách mua hai lần | Có bao nhiêu khách khác nhau |
| Ngày | Toàn bộ hoạt động một ngày | 1 | Doanh thu theo ngày, so sánh các ngày |
Quy luật then chốt: từ mức chi tiết hơn luôn tổng hợp lên được mức kém chi tiết hơn, nhưng không bao giờ đi ngược lại được. Có bảng dòng mặt hàng thì tính ra doanh thu ngày dễ dàng; chỉ có doanh thu ngày thì không bao giờ biết mặt hàng nào bán chạy. Vì vậy khi được chọn, hãy lưu ở mức chi tiết nhất mà bạn có thể cần, và tổng hợp khi trình bày.
Vì sao trộn độ chi tiết làm tổng nhân đôi
Lỗi điển hình xảy ra khi một thông tin thuộc mức đơn hàng được đặt vào bảng mức dòng mặt hàng. Phí vận chuyển là của cả đơn, ví dụ giả định 30 nghìn đồng. Nếu bảng chi tiết có ba dòng cho ba mặt hàng của đơn đó và cột Phí vận chuyển ghi 30 nghìn ở cả ba dòng, cộng cột này ra 90 nghìn. Không ai gõ sai số nào, nhưng tổng sai gấp ba.
Lỗi tương tự xảy ra khi nối bảng. Bạn có bảng Khách hàng (mỗi dòng một khách, kèm hạn mức công nợ) và bảng Đơn hàng (mỗi dòng một đơn). Đưa hạn mức công nợ từ bảng khách sang bảng đơn để tiện xem, rồi cộng cột hạn mức ở bảng đơn, bạn nhận được tổng hạn mức nhân với số đơn của mỗi khách. Khách mua mười đơn thì hạn mức bị đếm mười lần.
Chiều ngược lại cũng có bẫy: nối từ bảng mức thấp sang bảng mức cao mà một khoá khớp nhiều dòng. Hàm dò tìm như VLOOKUP chỉ trả về kết quả đầu tiên, nên âm thầm bỏ qua các dòng khác; còn phép hợp nhất trong Power Query hay JOIN trong cơ sở dữ liệu thì nhân bản dòng, làm bảng phình ra. Cả hai đều không báo lỗi.
Xác định độ chi tiết của một bảng bất kỳ
Khi nhận một bảng lạ, từ đồng nghiệp hay xuất từ phần mềm, trả lời câu hỏi "một dòng là gì" theo các bước sau trước khi làm bất cứ phép tính nào.
- Đoán từ tên cột. Có cột Số đơn và Mã hàng thì nhiều khả năng mỗi dòng là một mặt hàng trong một đơn. Có cột Ngày và Chi nhánh mà không có mã đơn thì nhiều khả năng là mức chi nhánh theo ngày.
- Kiểm bằng khoá. Chọn cột hoặc tổ hợp cột bạn cho là khoá, kiểm xem có trùng không bằng COUNTIFS hoặc cột ghép. Nếu Số đơn lặp lại mà Số đơn cộng Mã hàng thì không lặp, độ chi tiết là dòng mặt hàng.
- Tìm cột "lạc cấp". Xem cột nào có giá trị giống hệt nhau trên mọi dòng của cùng một đơn, như phí vận chuyển, mã giảm giá cả đơn, tên khách. Những cột đó thuộc cấp cao hơn, không được cộng trực tiếp.
- Tìm dòng lạc cấp. Có dòng tổng đơn xen giữa các dòng mặt hàng không? Có dòng tổng ngày ở cuối mỗi ngày không? Dòng khác cấp phải tách ra hoặc xoá.
- Ghi một câu mô tả. Viết ngay dưới tiêu đề hoặc trong ghi chú: "Mỗi dòng là một mặt hàng trong một đơn bán lẻ; cột Phí ship thuộc cấp đơn, lặp lại trên mọi dòng của đơn." Câu này cứu người dùng sau, kể cả chính bạn ba tháng nữa.
Bước năm là bước hay bị bỏ nhất và có giá trị nhất. Một câu mô tả độ chi tiết ngăn được phần lớn lỗi cộng sai sau này.
Độ chi tiết trong vài nghề quen thuộc
Chấm công. Máy chấm công thường xuất mỗi lần quẹt thẻ là một dòng: một người có thể có hai, bốn hay sáu dòng một ngày. Bảng tính công cần mức một người một ngày. Đếm số dòng của bảng quẹt thẻ để ra số ngày công là sai ngay từ đầu; phải gộp về mức người theo ngày trước.
Kho hàng. Phiếu nhập kho có phần đầu phiếu (số phiếu, ngày, nhà cung cấp) và các dòng chi tiết (mã hàng, số lượng, đơn giá). Hai phần là hai độ chi tiết. Bảng tồn kho cần mức dòng chi tiết; danh sách phiếu chờ duyệt chỉ cần mức phiếu.
Sao kê ngân hàng. Mỗi dòng là một giao dịch. Một hoá đơn khách trả làm hai lần sẽ có hai dòng; hai hoá đơn khách gộp trả một lần sẽ có một dòng. Đối chiếu sao kê với hoá đơn vì thế không phải lúc nào cũng khớp một đối một, và đây là lý do phép đối chiếu tự động hay báo lệch.
Khảo sát. Bảng xuất từ biểu mẫu thường là một người trả lời một dòng, với câu hỏi chọn nhiều đáp án gộp trong một ô. Muốn đếm từng đáp án, phải tách ra mức một đáp án một dòng, đó là một độ chi tiết khác.
Mô tả độ chi tiết cho AI: một câu đáng giá nhất
Khi nhờ AI viết công thức tính tổng, đếm, hay gợi cách nối bảng, câu mô tả độ chi tiết là thông tin quan trọng nhất bạn có thể đưa. Không có nó, AI sẽ giả định, và giả định phổ biến nhất là mỗi dòng là một đối tượng độc lập, tức là cộng thẳng mọi cột.
So sánh hai câu lệnh. Câu thiếu: "Bảng có cột Số đơn, Mã hàng, Số lượng, Đơn giá, Phí ship. Viết công thức tính tổng doanh thu và tổng phí ship." Câu đủ: "Mỗi dòng là một mặt hàng trong một đơn. Phí ship thuộc cấp đơn và lặp lại trên mọi dòng của cùng đơn. Viết công thức tính tổng doanh thu hàng và tổng phí ship, sao cho phí ship mỗi đơn chỉ được cộng một lần." Câu thứ hai buộc AI xử lý đúng bẫy, thường bằng cách chỉ lấy phí ở dòng đầu của mỗi đơn hoặc tổng hợp theo đơn trước.
Sau khi có công thức, tự kiểm bằng một đơn bạn biết rõ: đơn có ba mặt hàng, phí ship 30 nghìn, xem công thức có cộng đúng 30 nghìn không. Một phép thử bằng tay trên ví dụ biết trước bắt được phần lớn lỗi về độ chi tiết. Từ đây, việc đọc các con số đã tổng hợp đúng để rút ra nhận định là phần của phân tích, nằm ở trang AI Phân Tích.
Tổng hợp lên mức cao hơn mà không đánh rơi thông tin
Mỗi cột cần một cách gộp riêng. Khi gộp dòng mặt hàng lên mức đơn, cột Thành tiền thì cộng, cột Phí ship thì lấy một giá trị (vì vốn đã thuộc cấp đơn), cột Mã hàng thì đếm số mặt hàng khác nhau, cột Ngày thì lấy giá trị chung của đơn. Gộp bằng một phép cộng cho mọi cột là cách nhanh nhất để sai.
Giữ khoá để quay lại được chi tiết. Bảng tổng hợp mức đơn vẫn giữ cột Số đơn. Gặp đơn có số lạ, bạn dò về bảng chi tiết bằng chính số đơn đó để xem từng mặt hàng.
Ghi rõ mức của bảng tổng hợp ở tên. Đặt tên trang như "DoanhThu_TheoDon" hay "DoanhThu_TheoNgay" thay vì "Tổng hợp". Hai bảng cùng gọi là tổng hợp nhưng khác mức là nguồn của những cuộc tranh cãi về số.
Kiểm tổng sau khi gộp. Tổng doanh thu của bảng mức đơn phải bằng tổng của bảng mức dòng mặt hàng. Số đơn của bảng mức đơn phải bằng số giá trị khác nhau của cột Số đơn trong bảng chi tiết.
Chọn độ chi tiết khi tự lập bảng mới
Khi bạn là người thiết kế bảng, ví dụ một bảng theo dõi đơn đặt hàng qua tin nhắn, hãy quyết định độ chi tiết trước khi đặt tên cột. Câu hỏi giúp quyết định: những câu hỏi nào sẽ được hỏi trên bảng này trong một năm tới? Nếu có ai đó sẽ hỏi "mặt hàng nào bán chạy", bảng phải ở mức dòng mặt hàng; ghi cả đơn vào một ô kiểu "2 áo, 1 quần" thì sau này không đếm được.
Nếu dữ liệu tự nhiên có hai cấp, như đơn và mặt hàng, giải pháp gọn là hai bảng: bảng Đơn (mỗi dòng một đơn, chứa ngày, khách, phí ship, trạng thái) và bảng Chi tiết đơn (mỗi dòng một mặt hàng, chứa số đơn, mã hàng, số lượng, đơn giá). Hai bảng nối với nhau qua số đơn. Đây là bước đầu của thiết kế cơ sở dữ liệu nhỏ, đề tài có danh mục riêng trên trang.
Nếu bắt buộc chỉ một bảng vì lý do đơn giản, chọn mức chi tiết hơn và chấp nhận lặp thông tin cấp đơn, nhưng ghi rõ cột nào là cấp đơn để không ai cộng nhầm. Đừng chọn mức kém chi tiết chỉ vì nhập nhanh hơn; thời gian tiết kiệm lúc nhập sẽ phải trả lại nhiều lần khi cần câu trả lời mà bảng không cho được.
Câu hỏi thường gặp
Độ chi tiết và kích thước bảng có liên quan không?
Có. Bảng càng chi tiết càng nhiều dòng. Bảng dòng mặt hàng của một năm có thể gấp vài lần bảng đơn hàng. Với quy mô văn phòng, điều này hiếm khi là vấn đề với bảng tính hiện nay; khi bảng quá lớn, đó là lúc cân nhắc chuyển sang cơ sở dữ liệu.
Có thể có hai độ chi tiết trong cùng một bảng không?
Về kỹ thuật thì có thể gõ vào, nhưng nên tránh. Bảng có dòng mặt hàng xen dòng tổng đơn, hay dòng ngày xen dòng tổng tuần, làm mọi phép cộng và đếm đều sai trừ khi lọc rất cẩn thận. Tách thành hai bảng hoặc xoá các dòng tổng.
Làm sao đếm số đơn khác nhau trong bảng dòng mặt hàng?
Cần đếm giá trị khác nhau của cột Số đơn, không đếm số dòng. Excel bản mới có thể kết hợp COUNTA với UNIQUE; bảng tổng hợp có tuỳ chọn đếm khác nhau khi thêm dữ liệu vào mô hình dữ liệu. Google Sheets có hàm COUNTUNIQUE.
Tại sao số khách hàng trong báo cáo tháng khác tổng số khách của các tuần?
Vì cùng một khách có thể mua ở nhiều tuần. Cộng số khách bốn tuần là đếm trùng những khách quay lại. Số khách khác nhau không cộng dồn được qua các kỳ; phải đếm lại trên dữ liệu chi tiết cho cả tháng.
Bảng dữ liệu nhận từ cơ quan, đối tác chỉ có số tổng thì làm sao biết chi tiết?
Không thể suy ra chi tiết từ số tổng. Nếu cần, phải xin dữ liệu ở mức chi tiết hơn, nhiều khi kèm điều kiện bảo mật. Nếu không có, ghi rõ giới hạn khi dùng và tránh kết luận ở mức chi tiết hơn dữ liệu cho phép.
Có nên thêm cột số thứ tự dòng vào bảng chi tiết không?
Có ích. Một cột số thứ tự cố định, ghi bằng giá trị, giúp chỉ đích danh từng dòng khi trao đổi, khi nhờ AI kiểm và khi muốn khôi phục thứ tự ban đầu sau khi sắp xếp. Nó không thay khoá thật như Số đơn cộng Mã hàng.