Hướng dẫn

ARRAYFORMULA Hay Pivot Table Cho Báo Cáo Bán Hàng? Chọn Đúng 2026

Tuân HoangTuân Hoang
4 tháng 9, 2026
Cập nhật: 7 tháng 9, 2026
11 phút đọc
Ảnh minh họa bài viết: ARRAYFORMULA Hay Pivot Table Cho Báo Cáo Bán Hàng? Chọn Đúng 2026

Cuối tháng đóng báo cáo, file Sheets treo 8 giây mỗi lần gõ số

Chủ shop bán buôn quần áo ở Ninh Hiệp, dùng Google Sheets theo dõi đơn hàng từ 6 kênh (Shopee, TikTok Shop, Facebook, 2 đại lý sỉ, bán tại cửa hàng). File có khoảng 4.000 dòng đơn hàng tính đến hết tháng 8, và bảng tổng hợp doanh thu theo ngày, theo kênh, theo mã sản phẩm dùng toàn ARRAYFORMULA kéo dài từ dòng 2 xuống dòng 5000 để "đón" đơn mới tự nhập vào không cần kéo công thức. Vấn đề là mỗi lần gõ thêm 1 đơn hàng, cả file giật khựng 5-8 giây vì Sheets phải tính lại toàn bộ mảng công thức. Nhân viên nhập liệu than: "Sao gõ số mà máy treo như đang tính bitcoin vậy chị?"

Đây là tình huống rất phổ biến: người dùng học ARRAYFORMULA vì nó "tự động, không cần kéo", nhưng không biết rằng dùng nó cho toàn bộ báo cáo tổng hợp là chọn sai công cụ. ARRAYFORMULA sinh ra để tính toán theo hàng (row-by-row), không phải để nhóm gộp (group by) hàng nghìn dòng theo nhiều chiều. Pivot Table mới là thứ được thiết kế riêng cho việc đó, và trong hầu hết các trường hợp báo cáo bán hàng, Pivot Table nhanh hơn, ổn định hơn, và ít lỗi công thức hơn nhiều.

ARRAYFORMULA làm tốt việc gì, kém việc gì

ARRAYFORMULA thực chất chỉ là cách "nhân bản" một công thức xuống nhiều dòng cùng lúc mà không cần kéo tay. Nó rất hợp khi bạn cần tính một giá trị mới cho từng dòng dữ liệu gốc — ví dụ cột "Thành tiền" = số lượng nhân đơn giá, cột "Phân loại VIP" dựa theo tổng chi tiêu khách, hay cột "Số ngày trễ giao" tính từ ngày đặt và ngày giao thực tế. Mỗi dòng một kết quả, logic giống nhau, áp cho toàn bộ cột.

Vấn đề bắt đầu khi người dùng cố dùng ARRAYFORMULA kết hợp SUMIF/COUNTIF để tạo ra bảng tổng hợp nhiều chiều — kiểu "doanh thu theo từng kênh, theo từng tháng, theo từng nhóm sản phẩm". Lúc này công thức phải quét đi quét lại toàn bộ vùng dữ liệu nguồn cho mỗi ô kết quả, và nếu vùng dữ liệu mở rộng đến dòng 5000, 10000 "để phòng dữ liệu tăng", Sheets sẽ phải tính lại hàng triệu phép so sánh mỗi lần có thay đổi bất kỳ ở đâu trong file — kể cả thay đổi không liên quan gì đến bảng tổng hợp đó.

Cửa hàng ở Ninh Hiệp nói trên dùng công thức dạng =ARRAYFORMULA(IF(A2:A5000="", "", SUMIFS(Doanhthu!$D:$D, Doanhthu!$A:$A, A2:A5000, Doanhthu!$B:$B, B2:B5000))) cho hơn 10 cột báo cáo khác nhau. Mỗi cột này tự nó đã là một phép quét toàn vùng lặp lại 5000 lần. Nhân 10 cột lên, đó là 50.000 lần quét mỗi lần Sheets tính lại — trong khi dữ liệu thật chỉ có 4000 dòng, phần dư 1000 dòng trống vẫn bị tính đều đặn vì công thức trải hết xuống dòng 5000.

Pivot Table xử lý đúng bài toán tổng hợp, nhưng có giới hạn thật

Pivot Table được Google Sheets tối ưu ở tầng engine riêng cho việc gộp nhóm — nó không phải công thức tính lại theo ô, mà là một lần quét dữ liệu nguồn để dựng bảng kết quả, rồi giữ nguyên cho đến khi bạn bấm "Refresh" hoặc chỉnh vùng dữ liệu. Với cùng bài toán doanh thu theo kênh theo tháng, Pivot Table dựng bảng trong dưới 1 giây kể cả với 4000-5000 dòng dữ liệu, vì nó không phải tính lại liên tục theo từng thay đổi.

Nhưng Pivot Table có 3 hạn chế thật mà nhiều người bỏ qua khi mới chuyển từ công thức sang:

  • Không tự cập nhật realtime khi thêm dòng mới — phải bấm Refresh (hoặc set vùng dữ liệu dạng cột trọn vẹn A:Z thay vì A2:Z5000 để không phải sửa vùng mỗi lần)
  • Khó tùy biến định dạng hiển thị — muốn có cột "% tăng trưởng so với tháng trước" cạnh cột doanh thu thì phải thêm Calculated Field, không linh hoạt bằng viết công thức tay
  • Không thể đặt Pivot Table chồng lên vùng dữ liệu đang dùng, và khi chia sẻ file cho người khác xem trên điện thoại, giao diện Pivot đôi khi khó thao tác hơn bảng thường

Với chuỗi cửa hàng cà phê 5 chi nhánh mà SheetStore từng hỗ trợ, chủ quán ban đầu bỏ Pivot Table vì "không đẹp bằng bảng tự làm", quay về dùng SUMIFS kéo tay cho báo cáo doanh thu theo chi nhánh theo ca (sáng/chiều/tối). Với 5 chi nhánh x 3 ca x 30 ngày = 450 ô kết quả, mỗi ô một công thức SUMIFS quét qua 3000 dòng giao dịch/tháng, file mở mất 4-5 giây và excel gõ tay dễ lệch công thức khi copy ngang dọc. Sau khi đổi bảng doanh thu chính sang Pivot Table và giữ lại SUMIFS chỉ cho vài ô KPI tổng (doanh thu tháng, tăng trưởng so với tháng trước), tốc độ mở file giảm còn dưới 1 giây, và sai sót do lệch công thức biến mất hoàn toàn vì Pivot tự tính đúng theo cấu trúc gộp nhóm, không phụ thuộc việc kéo công thức đúng ô.

Cách chọn: nhìn vào bài toán, không nhìn vào thói quen

Câu hỏi cần tự đặt ra không phải "tôi giỏi công thức hay giỏi Pivot" mà là "kết quả tôi cần là một giá trị mới cho từng dòng, hay là một bảng tổng hợp theo nhiều chiều". Nếu là vế đầu — dùng ARRAYFORMULA hoặc công thức thường. Nếu là vế sau — dùng Pivot Table gần như luôn là lựa chọn đúng.

Tình huốngNên dùngVì sao
Tính thành tiền, VAT, hoa hồng cho từng đơn hàngARRAYFORMULAKết quả gắn với từng dòng gốc, cần hiển thị song song dữ liệu chi tiết
Doanh thu theo tháng x theo kênh bánPivot TableGộp nhóm nhiều chiều, dữ liệu nguồn lớn, cần tốc độ
Đánh dấu khách VIP dựa theo tổng chi tiêuARRAYFORMULA + SUMIF (vùng cố định, không kéo dài)Kết quả theo từng dòng khách, vùng tính không quá lớn
Top 10 sản phẩm bán chạy theo từng chi nhánhPivot Table (kèm sắp xếp giảm dần)Cần gộp nhóm rồi xếp hạng, Pivot làm 2 việc này trong 1 thao tác
Báo cáo cần gửi qua Zalo dạng ảnh chụp mỗi sángPivot Table → copy giá trị ra bảng tĩnhKhông cần công thức sống, chỉ cần số liệu đóng băng tại thời điểm gửi

Điểm hay bị nhầm là nghĩ ARRAYFORMULA "hiện đại hơn", "tự động hơn" nên tốt hơn Pivot. Thực ra ARRAYFORMULA chỉ tự động ở chỗ không cần kéo công thức, còn về bản chất tính toán nó vẫn là hàng loạt phép SUMIF/COUNTIF riêng lẻ chạy song song — nặng hơn Pivot Table rất nhiều lần khi số dòng dữ liệu vượt qua khoảng 2000-3000 dòng. Nếu file báo cáo của bạn dưới 500 dòng dữ liệu, sự khác biệt tốc độ gần như không cảm nhận được, dùng cách nào cũng ổn. Nhưng cửa hàng bán hàng đa kênh, quán ăn nhiều chi nhánh, hay đại lý phân phối — những nơi dữ liệu tích lũy nhanh qua vài tháng — sẽ cảm nhận rõ sự khác biệt ngay khi vượt mốc 2000 dòng.

Cách chuyển từ ARRAYFORMULA sang Pivot Table không làm hỏng báo cáo cũ

Nhiều người ngại chuyển vì sợ "làm lại từ đầu" và sợ dashboard đang dùng bị vỡ layout. Thực tế cách an toàn là làm song song, không xóa cái cũ ngay:

  • Bước 1: Tạo sheet mới tên "Pivot_DoanhThu", chọn vùng dữ liệu nguồn (Insert → Pivot Table), kéo trường "Kênh bán" vào Rows, "Tháng" vào Columns, "Thành tiền" vào Values (chọn SUM)
  • Bước 2: Đối chiếu số liệu Pivot với bảng ARRAYFORMULA cũ trong 2-3 ngày — nếu khớp, Pivot đúng
  • Bước 3: Ở sheet Dashboard chính, dùng công thức tham chiếu đơn giản (không phải ARRAYFORMULA) trỏ vào các ô kết quả trong Pivot Table, ví dụ =Pivot_DoanhThu!C5 để lấy số cụ thể ra hiển thị đẹp theo layout cũ
  • Bước 4: Xóa các công thức ARRAYFORMULA cũ sau khi chắc chắn Pivot đã thay thế đủ, dọn lại vùng dữ liệu để không còn kéo dài tới dòng 5000 dư thừa

Với những ai không rành thao tác kéo trường vào Rows/Columns/Values, hoặc file có cấu trúc dữ liệu lộn xộn (nhiều sheet nguồn, tên cột không đồng nhất giữa các kênh bán), việc dựng lại toàn bộ hệ thống báo cáo — cả phần Pivot lẫn phần dashboard tổng — là một trong những việc SheetStore hay làm cho khách khi họ mang file cũ tới nhờ tối ưu tốc độ. Vấn đề thường không nằm ở việc chọn Pivot hay công thức, mà ở việc dữ liệu nguồn từ nhiều nguồn chưa được chuẩn hóa để Pivot gộp đúng ngay từ đầu.

Một lưu ý nhỏ nhưng quan trọng: nếu file báo cáo sẽ được chia sẻ cho người khác xem (kế toán, đối tác, cấp trên) và không cần họ chỉnh sửa gì thêm, nên cân nhắc lưu công thức hay giá trị khi chia sẻ báo cáo Google Sheets — vì cả ARRAYFORMULA lẫn Pivot Table đều có thể gây nhầm lẫn nếu người nhận vô tình sửa vùng dữ liệu nguồn.

Khi nào QUERY đáng cân nhắc thay vì cả hai

Có một lớp bài toán mà cả ARRAYFORMULA lẫn Pivot Table đều không phải lựa chọn tối ưu: báo cáo cần lọc điều kiện phức tạp kết hợp sắp xếp và giới hạn số dòng, ví dụ "10 khách hàng chi tiêu nhiều nhất trong quý, chỉ tính đơn hàng trên 500.000đ, sắp xếp giảm dần". Pivot Table làm được phần gộp nhóm và sắp xếp, nhưng lọc điều kiện phức hợp thì cồng kềnh hơn dùng hàm QUERY.

Bài Pivot Table hay QUERY: nên dùng gì cho báo cáo doanh thu đi sâu vào ranh giới này. Nhìn chung, quy tắc đơn giản là: gộp nhóm thuần túy theo 1-2 chiều → Pivot Table; gộp nhóm kèm lọc điều kiện động và cần công thức "sống" tự cập nhật khi thêm dữ liệu mới mà không cần bấm Refresh → QUERY; tính từng dòng riêng lẻ không gộp nhóm → ARRAYFORMULA.

Với những ai đã quen QUERY và muốn khai thác sâu hơn cho báo cáo tổng hợp nhiều điều kiện, có thể tham khảo thêm 15 cú pháp QUERY nâng cao thay thế 80% công thức — nhiều trường hợp trong đó dùng QUERY thay được cả việc phải dựng Pivot Table lẫn viết ARRAYFORMULA dài dòng.

Báo cáo định kỳ lặp lại mỗi tuần mỗi tháng thì sao

Nếu báo cáo doanh thu phải làm lại đều đặn — ví dụ sáng thứ 2 mỗi tuần tổng hợp doanh thu tuần trước gửi cho chủ — thì vấn đề không chỉ là chọn ARRAYFORMULA hay Pivot, mà là có nên tự động hóa cả quy trình hay không. Pivot Table vẫn cần thao tác Refresh thủ công hoặc mở file để cập nhật, còn nếu muốn báo cáo tự chạy và gửi email/Zalo vào đúng giờ mỗi tuần mà không cần đụng tay, đó là lúc Apps Script đáng cân nhắc thay vì dừng lại ở công thức hay Pivot.

Cửa hàng cà phê 5 chi nhánh nhắc ở trên, sau khi ổn định phần Pivot Table, tiếp tục hỏi liệu có cách nào để sáng thứ 2 tự nhận email báo cáo tuần mà không cần mở file bấm Refresh. Đây đã là câu hỏi vượt ra ngoài phạm vi "công thức hay Pivot", nó thuộc về bài toán tự động hóa lịch trình — nội dung được phân tích kỹ trong công thức Sheets hay Apps Script cho báo cáo định kỳ.

Với các shop có nhân viên bán hàng ngoài thị trường nhập dữ liệu trực tiếp trên điện thoại, cấu trúc dữ liệu nguồn để Pivot Table gộp đúng còn phụ thuộc vào cách nhập liệu di động có đồng nhất hay không — vấn đề này liên quan tới lựa chọn giữa nhập liệu qua Sheets mobile hay qua app chuyên dụng, được so sánh ở bài nhập liệu Sheets mobile hay app sales field.

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

ARRAYFORMULA có tự cập nhật khi thêm dòng dữ liệu mới không?

Có, nếu công thức tham chiếu theo cột (ví dụ A2:A) hoặc đặt trong bảng có sẵn khoảng trống phía dưới. Pivot Table thì không tự cập nhật, phải bấm refresh hoặc mở lại file mới thấy dữ liệu mới.

Dùng ARRAYFORMULA hay Pivot Table khi có nhiều người cùng sửa file báo cáo?

Pivot Table an toàn hơn vì kết quả tách biệt khỏi vùng nhập liệu, người khác sửa dữ liệu gốc không làm vỡ công thức. ARRAYFORMULA dễ bị lỗi #REF khi ai đó chèn/xóa dòng ngay trong vùng công thức đang chạy.

File Sheets bị chậm khi dùng ARRAYFORMULA cho báo cáo lớn, phải làm sao?

ARRAYFORMULA tính lại toàn bộ mảng mỗi khi có thay đổi nên với file vài nghìn dòng trở lên sẽ giật lag rõ rệt. Trường hợp này nên chuyển sang Pivot Table, chỉ tính khi refresh nên nhẹ máy hơn nhiều.

Có thể kết hợp cả ARRAYFORMULA và Pivot Table trong cùng một báo cáo không?

Được, và đây là cách nhiều shop áp dụng: dùng ARRAYFORMULA xử lý các cột tính toán phụ (đơn giá sau chiết khấu, phân loại sản phẩm...) ngay trên sheet dữ liệu, rồi dùng Pivot Table tổng hợp báo cáo cuối từ dữ liệu đã xử lý đó.

Bạn muốn áp dụng ngay mà không phải tự xây từ đầu?

Khám phá các mẫu Google Sheets và phần mềm quản lý dựng sẵn cho doanh nghiệp Việt tại SheetStore Marketplace.

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận