Hướng dẫn

Template Báo Cáo Bán Hàng Tự Động Google Sheets [Tuần/Tháng/Quý 2026]

Tuân HoangTuân Hoang
9 tháng 6, 2026
10 phút đọc
Ả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]

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()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)

  1. Trong Google Sheets, vào Extensions → Apps Script
  2. Paste code trên vào editor, lưu lại (Ctrl+S)
  3. Click biểu tượng đồng hồ Triggers (hoặc vào Edit → Current project's triggers)
  4. Click + Add Trigger
  5. Cài đặt:
    • Function: guiBaoCaoTuan
    • Event source: Time-driven
    • Type: Week timer
    • Day: Every Monday
    • Time: 8am to 9am
  6. 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

  1. Chọn ô hoặc cột cần format (ví dụ: cột tăng trưởng)
  2. Format → Conditional formatting
  3. 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:

  1. Tạo Google Sheets mới, tạo 5 sheet theo cấu trúc bài viết
  2. Nhập 10-20 hàng dữ liệu mẫu vào DuLieu_BanHang để kiểm tra công thức
  3. 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

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