Template Báo Cáo Bán Hàng Tự Động Google Sheets [Tuần/Tháng/Quý 2026]
![Ảnh minh họa bài viết: Template Báo Cáo Bán Hàng Tự Động Google Sheets [Tuần/Tháng/Quý 2026]](/og-image.jpg)
Vấn Đề Cuối Tuần/Tháng Của Hầu Hết Nhà Quản Lý
Chiều thứ Sáu, đồng hồ chỉ 17h30 nhưng bạn vẫn chưa thể về nhà. Màn hình mở 4-5 file Excel khác nhau, bạn đang cặm cụi copy số từ sheet này sang sheet kia, tính tổng bằng máy tính bỏ túi, rồi nhập vào bảng báo cáo. Công việc này đã lặp đi lặp lại suốt 3 năm qua. Mỗi lần tốn ít nhất 2-3 tiếng.
Tình trạng này cực kỳ phổ biến trong các doanh nghiệp vừa và nhỏ tại Việt Nam. Đội ngũ bán hàng chăm chỉ ghi nhận đơn hàng, nhưng dữ liệu nằm rải rác khắp nơi — file Excel cá nhân, phần mềm quản lý, group chat Zalo. Kết quả là người quản lý phải tự làm báo cáo bằng tay.
Bài viết này giới thiệu một template Google Sheets hoàn chỉnh gồm 5 sheet liên kết nhau, tự động tổng hợp báo cáo tuần/tháng/quý, và thậm chí tự gửi email báo cáo vào sáng thứ Hai mà không cần bạn làm gì cả.
Tổng Quan Template: 5 Sheet Làm Việc Cùng Nhau
Template được thiết kế theo nguyên tắc một nguồn dữ liệu duy nhất — bạn chỉ nhập liệu vào một nơi, tất cả các báo cáo tự động cập nhật theo:
- Sheet 1: DuLieu_BanHang — Bảng nhập liệu gốc, mọi đơn hàng đều vào đây
- Sheet 2: BC_Tuan — Báo cáo tuần tự động, so sánh tuần này vs tuần trước
- Sheet 3: BC_Thang — KPIs tháng, phân tích theo danh mục/kênh/khu vực
- Sheet 4: BC_Quy — Tổng hợp quý, so sánh YoY và QoQ
- Sheet 5: Dashboard — Bảng điều khiển trực quan cho ban lãnh đạo
Toàn bộ liên kết với nhau qua công thức SUMPRODUCT, QUERY, và SUMIF — không cần macro phức tạp, chỉ cần Google Sheets cơ bản là chạy được.
Sheet 1: DuLieu_BanHang — Trung Tâm Dữ Liệu
Đây là sheet duy nhất bạn (và nhân viên) trực tiếp nhập liệu vào. Cấu trúc cột được thiết kế để vừa đủ thông tin cho tất cả các loại báo cáo:
| Cột | Tên trường | Kiểu dữ liệu | Ghi chú |
|---|---|---|---|
| A | Ngày | Date (DD/MM/YYYY) | Ngày tạo đơn |
| B | Mã đơn | Text | Ví dụ: DH-2026-001 |
| C | Nhân viên | Text | Tên nhân viên bán hàng |
| D | Khách hàng | Text | Tên khách hàng / công ty |
| E | Sản phẩm | Text | Tên sản phẩm/dịch vụ |
| F | Danh mục | Text (Dropdown) | Dropdown validation |
| G | Số lượng | Number | SL đặt hàng |
| H | Đơn giá | Currency (VNĐ) | Giá bán từng đơn vị |
| I | Thành tiền | Formula | =G2*H2 (tự tính) |
| J | Khu vực | Text (Dropdown) | Hà Nội / TP.HCM / Đà Nẵng / Khác |
| K | Kênh bán | Text (Dropdown) | Online / Offline / Đại lý / Telesale |
| L | Trạng thái | Text (Dropdown) | Mới / Xác nhận / Đã giao / Hủy |
Mẹo thiết lập: Dùng Data Validation (Xác thực dữ liệu) cho cột F, J, K, L để tránh lỗi gõ sai tên — ví dụ "Hà Nội" vs "Ha Noi" sẽ gây ra kết quả sai trong các SUMIF sau này.
Sheet 2: BC_Tuan — Báo Cáo Tuần Tự Động
Sheet này tự động tính toán khi mở file — không cần bấm nút hay chạy script. Công thức dùng hàm WEEKNUM() và TODAY() để luôn hiển thị tuần hiện tại và tuần trước.
Công thức tổng doanh số tuần này
=SUMPRODUCT(
(WEEKNUM(DuLieu_BanHang!A2:A1000)=WEEKNUM(TODAY()))*
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!L2:L1000<>"Hủy")*
DuLieu_BanHang!I2:I1000
)
Lưu ý điều kiện <>"Hủy" — rất quan trọng để loại trừ đơn hàng bị hủy khỏi doanh số thực tế.
Công thức tổng doanh số tuần trước
=SUMPRODUCT(
(WEEKNUM(DuLieu_BanHang!A2:A1000)=WEEKNUM(TODAY())-1)*
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!L2:L1000<>"Hủy")*
DuLieu_BanHang!I2:I1000
)
Tốc độ tăng trưởng tuần
=(B2-B3)/B3
Trong đó B2 là ô chứa doanh số tuần này, B3 là tuần trước. Format ô này theo dạng Percentage (%) để hiển thị đẹp hơn.
Top 5 sản phẩm bán chạy tuần này (dùng QUERY)
=QUERY(
DuLieu_BanHang!A1:L1000,
"SELECT E, SUM(I)
WHERE WEEKNUM(A) = WEEKNUM(NOW())
AND YEAR(A) = YEAR(NOW())
AND L <> 'Hủy'
GROUP BY E
ORDER BY SUM(I) DESC
LIMIT 5
LABEL E 'Sản phẩm', SUM(I) 'Doanh số'",
1
)
Top 3 nhân viên doanh số cao tuần này
=QUERY(
DuLieu_BanHang!A1:L1000,
"SELECT C, SUM(I)
WHERE WEEKNUM(A) = WEEKNUM(NOW())
AND YEAR(A) = YEAR(NOW())
AND L <> 'Hủy'
GROUP BY C
ORDER BY SUM(I) DESC
LIMIT 3
LABEL C 'Nhân viên', SUM(I) 'Doanh số'",
1
)
Sau khi có dữ liệu từ các QUERY trên, thêm biểu đồ cột thể hiện doanh số 4 tuần gần nhất bằng cách tạo một bảng tổng hợp 4 tuần rồi Insert Chart → Column chart.
Sheet 3: BC_Thang — KPIs Tháng Đầy Đủ
Báo cáo tháng là trọng tâm của template — nơi ban lãnh đạo nhìn vào đầu tiên mỗi tháng.
4 KPIs chính
Tổng doanh số tháng này:
=SUMPRODUCT(
(MONTH(DuLieu_BanHang!A2:A1000)=MONTH(TODAY()))*
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!L2:L1000<>"Hủy")*
DuLieu_BanHang!I2:I1000
)
Số đơn hàng tháng này:
=SUMPRODUCT(
(MONTH(DuLieu_BanHang!A2:A1000)=MONTH(TODAY()))*
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!L2:L1000<>"Hủy")*
1
)
AOV — Giá trị đơn hàng trung bình:
=B2/B3
Trong đó B2 là tổng doanh số, B3 là số đơn. AOV là chỉ số quan trọng để đánh giá hiệu quả upsell/cross-sell.
Tăng trưởng MoM (Month over Month):
=(TháyNày - ThángTrước) / ThángTrước
Phân tích doanh số theo danh mục (SUMIF)
=SUMIFS(
DuLieu_BanHang!I:I,
DuLieu_BanHang!F:F, "Tên danh mục",
DuLieu_BanHang!L:L, "<>Hủy"
)
Tạo một bảng với các hàng là từng danh mục, cột là tháng. Sau đó Insert Chart → Pie chart để thấy tỷ trọng từng danh mục.
Phân tích theo kênh bán
=SUMIFS(
DuLieu_BanHang!I:I,
DuLieu_BanHang!K:K, "Online",
DuLieu_BanHang!L:L, "<>Hủy"
)
Lặp lại cho từng kênh: Online, Offline, Đại lý, Telesale.
Phân tích theo khu vực
=SUMIFS(
DuLieu_BanHang!I:I,
DuLieu_BanHang!J:J, "Hà Nội",
DuLieu_BanHang!L:L, "<>Hủy"
)
Progress bar mục tiêu vs thực tế
Để hiển thị tiến độ đạt mục tiêu bằng ký tự ASCII ngay trong ô:
=REPT("█", ROUND(B2/MucTieu*10, 0)) & REPT("░", 10-ROUND(B2/MucTieu*10, 0)) & " " & TEXT(B2/MucTieu, "0%")
Kết quả mẫu: ████████░░ 82%
Sheet 4: BC_Quy — Tổng Hợp Quý Và YTD
Báo cáo quý cần tổng hợp 3 tháng liên tiếp và so sánh với quý trước để thấy xu hướng dài hạn.
Xác định quý hiện tại
=ROUNDUP(MONTH(TODAY())/3, 0)
Công thức này trả về 1, 2, 3, hoặc 4 — tương ứng Q1, Q2, Q3, Q4.
Tổng doanh số quý hiện tại
=SUMPRODUCT(
(ROUNDUP(MONTH(DuLieu_BanHang!A2:A1000)/3,0)=ROUNDUP(MONTH(TODAY())/3,0))*
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!L2:L1000<>"Hủy")*
DuLieu_BanHang!I2:I1000
)
YTD — Doanh số từ đầu năm đến nay
=SUMPRODUCT(
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!L2:L1000<>"Hủy")*
DuLieu_BanHang!I2:I1000
)
Nhân viên tốt nhất quý
=INDEX(
QUERY(
DuLieu_BanHang!A1:L1000,
"SELECT C, SUM(I)
WHERE ROUNDUP(MONTH(A)/3,0) = "&ROUNDUP(MONTH(TODAY())/3,0)&"
AND YEAR(A) = "&YEAR(TODAY())&"
AND L <> 'Hủy'
GROUP BY C
ORDER BY SUM(I) DESC
LIMIT 1"
),
2, 1
)
Công Thức SUMPRODUCT Đa Điều Kiện — Giải Thích Chi Tiết
SUMPRODUCT là vũ khí bí mật của template này. Hiểu cách nó hoạt động giúp bạn tùy chỉnh theo nhu cầu riêng.
Ví dụ: Doanh số tháng này tại khu vực Hà Nội, chỉ tính đơn đã xác nhận:
=SUMPRODUCT(
(MONTH(DuLieu_BanHang!A2:A1000)=MONTH(TODAY()))*
(YEAR(DuLieu_BanHang!A2:A1000)=YEAR(TODAY()))*
(DuLieu_BanHang!J2:J1000="Hà Nội")*
(DuLieu_BanHang!L2:L1000="Xác nhận")*
DuLieu_BanHang!I2:I1000
)
Cách đọc công thức:
- Mỗi điều kiện trong ngoặc đơn trả về mảng TRUE/FALSE (1/0)
- Nhân các mảng lại với nhau → chỉ hàng nào thỏa tất cả điều kiện mới cho kết quả 1
- Nhân với cột I (Thành tiền) → chỉ cộng những hàng thỏa điều kiện
- SUMPRODUCT cộng tổng mảng kết quả cuối
Bạn có thể thêm bất kỳ điều kiện nào bằng cách thêm * (cột=giá_trị) vào giữa công thức.
Sheet 5: Dashboard — Màn Hình Tổng Quan Cho Lãnh Đạo
Dashboard là sheet duy nhất ban lãnh đạo cần nhìn vào — tất cả số quan trọng hiển thị một chỗ, trực quan, không cần đọc bảng số.
Cấu trúc Dashboard đề xuất
Hàng 1 — Scorecards lớn (3 ô merge, font 24pt):
- Tháng này: [Tổng doanh số] — [Tăng trưởng MoM]
- Tuần này: [Tổng tuần] — [Tăng trưởng WoW]
- Hôm nay: [Doanh số ngày]
Hàng 2 — Biểu đồ kết hợp cột + đường:
- Cột: Doanh số từng tháng (năm nay)
- Đường: Mục tiêu tháng
- Thêm secondary axis để đường mục tiêu hiển thị cùng tỷ lệ
Hàng 3 — Leaderboard nhân viên:
=QUERY(
DuLieu_BanHang!A1:L1000,
"SELECT C, SUM(I), COUNT(B)
WHERE MONTH(A) = MONTH(NOW())
AND YEAR(A) = YEAR(NOW())
AND L <> 'Hủy'
GROUP BY C
ORDER BY SUM(I) DESC
LIMIT 10
LABEL C 'Nhân viên', SUM(I) 'Doanh số', COUNT(B) 'Số đơn'",
1
)
Hàng 4 — Pie chart phân bổ danh mục và Funnel:
- Pie chart: Tỷ trọng doanh số theo danh mục (tháng này)
- Funnel bằng bar chart: Leads → Cơ hội → Xác nhận → Đã giao (dùng COUNTIF theo trạng thái)
Mẹo làm Dashboard đẹp hơn
- Ẩn gridlines: View → Show → bỏ tích Gridlines
- Dùng màu nền xám nhạt (#F8F9FA) cho vùng header, trắng cho vùng dữ liệu
- Font số lớn: Roboto hoặc Open Sans, size 20-28 cho scorecard
- Conditional formatting cho scorecard: xanh nếu >100% mục tiêu, vàng 80-100%, đỏ <80%
Apps Script: Tự Động Gửi Báo Cáo Email Sáng Thứ Hai
Đây là tính năng "ăn tiền" nhất của template — cài một lần, hàng tuần tự động nhận báo cáo vào inbox mà không cần làm gì thêm.
Code function gửi email
function guiBaoCaoTuan() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('BC_Tuan');
// Lấy các chỉ số từ sheet
const tuanNay = sheet.getRange('B2').getValue();
const tuanTruoc = sheet.getRange('B3').getValue();
const tangTruong = sheet.getRange('B4').getValue();
const topNV = sheet.getRange('E2:F4').getValues();
const topSP = sheet.getRange('H2:I6').getValues();
// Format số tiền theo kiểu Việt Nam
const formatVND = (num) =>
new Intl.NumberFormat('vi-VN').format(Math.round(num)) + ' đ';
const body = `
📊 BÁO CÁO TUẦN ${new Date().toLocaleDateString('vi-VN')}
==================================================
💰 DOANH SỐ TUẦN NÀY
Tổng doanh số: ${formatVND(tuanNay)}
Tuần trước: ${formatVND(tuanTruoc)}
Tăng trưởng: ${(tangTruong * 100).toFixed(1)}%
🏆 TOP 3 NHÂN VIÊN TUẦN NÀY
${topNV.map((r, i) => ` ${i+1}. ${r[0]}: ${formatVND(r[1])}`).join('\n')}
📦 TOP 5 SẢN PHẨM BÁN CHẠY
${topSP.map((r, i) => ` ${i+1}. ${r[0]}: ${formatVND(r[1])}`).join('\n')}
==================================================
Xem chi tiết: ${ss.getUrl()}
`;
GmailApp.sendEmail(
'manager@company.com', // Thay bằng email nhận báo cáo
`[Báo cáo tuần] Doanh số: ${formatVND(tuanNay)}`,
body
);
Logger.log('Đã gửi báo cáo tuần thành công!');
}
Cài đặt trigger tự động (chạy mỗi sáng thứ Hai 8h)
- Trong Google Sheets, vào Extensions → Apps Script
- Paste code trên vào editor, lưu lại (Ctrl+S)
- Click biểu tượng đồng hồ Triggers (hoặc vào Edit → Current project's triggers)
- Click + Add Trigger
- Cài đặt:
- Function:
guiBaoCaoTuan - Event source:
Time-driven - Type:
Week timer - Day:
Every Monday - Time:
8am to 9am
- Function:
- Lần đầu chạy sẽ yêu cầu cấp quyền — chấp nhận để script có thể đọc sheet và gửi Gmail
Lưu ý quan trọng: Script chạy bằng tài khoản Google của người cài đặt. Email báo cáo sẽ được gửi từ địa chỉ Gmail của bạn. Nếu muốn gửi cho nhiều người, thay đổi tham số đầu tiên của GmailApp.sendEmail() thành danh sách email cách nhau bởi dấu phẩy.
Conditional Formatting — Tô Màu Tự Động Theo KPI
Conditional formatting giúp nhìn vào báo cáo là biết ngay đâu đạt/chưa đạt mục tiêu, không cần đọc từng con số.
Cài đặt 3 mức màu cho cột tăng trưởng
- Chọn ô hoặc cột cần format (ví dụ: cột tăng trưởng)
- Format → Conditional formatting
- Thêm 3 rule theo thứ tự:
| Điều kiện | Format | Ý nghĩa |
|---|---|---|
| Giá trị >= 1 (100%) | Nền xanh lá (#B7E1CD), chữ đậm | Đạt/vượt mục tiêu |
| Giá trị >= 0.8 (80%) | Nền vàng (#FFE599) | Gần đạt, cần theo dõi |
| Giá trị < 0.8 | Nền đỏ nhạt (#F4CCCC), chữ đỏ | Chưa đạt, cần hành động |
Progress bar trong ô tính
Đây là một trick hay để hiển thị tiến độ mà không cần chèn biểu đồ:
=REPT("█", ROUND(ThucTe/MucTieu*10, 0)) & REPT("░", 10-ROUND(ThucTe/MucTieu*10, 0)) & " " & TEXT(ThucTe/MucTieu, "0%")
Ví dụ kết quả với 82% đạt mục tiêu: ████████░░ 82%
Kết hợp conditional formatting cho ô chứa progress bar: nếu tỷ lệ >= 1 thì đổi font màu xanh, < 0.5 thì đổi màu đỏ — tạo hiệu ứng trực quan mạnh.
Mẹo Tùy Chỉnh Template Theo Ngành
Template được thiết kế để dùng được cho nhiều loại hình kinh doanh. Dưới đây là những điều chỉnh theo từng ngành:
Bán lẻ / E-commerce
- Thêm cột "Nguồn đơn" (Shopee, Lazada, Website, Zalo Shop)
- Thêm cột "Mã vận đơn" và "Ngày giao thực tế"
- Tính thêm chỉ số: Tỷ lệ hoàn trả (COUNTIF trạng thái "Hoàn trả" / tổng đơn)
B2B / Dịch vụ
- Thêm cột "Chu kỳ hợp đồng" (tháng/năm) để tính ARR/MRR
- Thêm cột "Ngành khách hàng" để phân tích theo vertical
- Tính thêm: Deal size trung bình theo ngành
F&B / Nhà hàng
- Thêm cột "Ca làm việc" (sáng/chiều/tối)
- Thêm cột "Bàn số" hoặc "Cửa hàng"
- Tính thêm: Doanh số theo ca, doanh số theo cửa hàng
Bất động sản / Tài chính
- Thêm cột "Hoa hồng" và "% hoa hồng"
- Thêm cột "Giai đoạn pipeline" (Tìm kiếm / Thương lượng / Ký HĐ)
- Tính thêm: Conversion rate theo giai đoạn
Kết Luận: Từ 3 Giờ Làm Thủ Công Xuống 0 Phút
Template 5 sheet này giải quyết triệt để vấn đề báo cáo thủ công. Sau khi cài đặt một lần (khoảng 2-3 tiếng), bạn sẽ không bao giờ phải ngồi copy-paste số vào cuối tuần/tháng nữa.
Điều quan trọng nhất: tất cả nhân viên nhập liệu vào đúng một chỗ (sheet DuLieu_BanHang), và tất cả báo cáo cập nhật theo thời gian thực. Không còn tình trạng "số ở file tôi khác số ở file anh".
Ba bước để bắt đầu ngay hôm nay:
- Tạo Google Sheets mới, tạo 5 sheet theo cấu trúc bài viết
- Nhập 10-20 hàng dữ liệu mẫu vào DuLieu_BanHang để kiểm tra công thức
- Cài đặt Apps Script và trigger gửi email — chờ đến sáng thứ Hai xem kết quả
Nếu bạn muốn mở rộng thêm — ví dụ kết nối với Google Form để nhân viên nhập đơn từ điện thoại, hoặc tích hợp với Google Data Studio để có dashboard phức tạp hơn — hãy xem thêm các bài viết khác trong series Google Sheets cho quản lý bán hàng.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
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.
