Sếp muốn xem "tổng điểm theo từng hạng thẻ", rồi "chia thêm theo trạng thái", rồi "vẽ thành biểu đồ cột". Ở nhiều hệ thống, đó là ba yêu cầu báo cáo phải code riêng. Trong Odoo, đó là hai loại view khai báo: pivot (bảng chéo) và graph (biểu đồ). Bạn chỉ khai field nào là hàng, field nào là cột, số nào cần cộng — Odoo lo phần tổng hợp và vẽ. Bài này dựng cả hai cho thẻ thành viên và xem chúng chạy.

Khai pivot và graph: chỉ vài field

<!-- PIVOT: bảng chéo. row = hàng, col = cột, measure = số cần tính -->
<pivot string="Phân tích điểm thẻ">
  <field name="hang_the" type="row"/>      <!-- nhóm theo hàng -->
  <field name="trang_thai" type="col"/>    <!-- nhóm theo cột -->
  <field name="diem" type="measure"/>      <!-- số được cộng vào ô -->
</pivot>

<!-- GRAPH: biểu đồ. type = bar | line | pie -->
<graph string="Điểm theo hạng thẻ" type="bar">
  <field name="hang_the"/>               <!-- trục X -->
  <field name="diem" type="measure"/>    <!-- trục Y (giá trị) -->
</graph>

Ảnh chụp mã XML nền tối khai báo pivot và graph view, thẻ pivot string Phân tích điểm thẻ chứa field hang_the type row nhóm theo hàng field trang_thai type col nhóm theo cột và field diem type measure là số cộng vào ô, thẻ graph string Điểm theo hạng thẻ type bar chứa field hang_the làm trục X và field diem type measure làm trục Y, cuối cùng dòng field view_mode trong action liệt kê kanban list form pivot graph để bật hai chế độ báo cáo

Hình 1: Khai báo tối giản. Pivot cần ba loại field: type="row" (nhóm theo hàng), type="col" (nhóm theo cột), type="measure" (số được tổng hợp vào ô). Graph cần trục phân loại (field không đánh dấu) và type="measure" cho giá trị; thuộc tính type trên <graph> chọn kiểu bar/line/pie. Cuối cùng thêm pivot,graph vào view_mode của action.

Pivot: bảng chéo tự cộng tổng

Đây là pivot thật khi mở màn hình — hàng là hạng thẻ, cột là trạng thái, ô là tổng điểm:

Ảnh chụp giao diện pivot Odoo 19 cho thẻ thành viên, cột chia theo trạng thái Đang dùng và Mới cấp cùng cột Tổng, hàng chia theo hạng thẻ Bạc và Vàng cùng hàng Tổng, thước đo là Điểm tích luỹ, ô Bạc Đang dùng là 85 ô Bạc Mới cấp là 120 tổng hàng Bạc 205, ô Vàng Đang dùng 150 tổng hàng Vàng 150, tổng cột Đang dùng 235 tổng cột Mới cấp 120 và tổng chung toàn bảng 355

Hình 2: Pivot chạy thật. Odoo tự dựng bảng chéo và cộng tổng theo cả hai chiều: Bạc/Đang dùng = 85, Bạc/Mới cấp = 120 (tổng hàng Bạc 205); Vàng/Đang dùng = 150. Tổng cột Đang dùng = 235 (85+150), tổng chung = 355. Người dùng bấm dấu + để bung nhóm con, đổi thước đo, hoặc xuất Excel — tất cả có sẵn, không cần code.

Điểm hay: người dùng có thể tự đổi hàng/cột/thước đo ngay trên giao diện. Khai báo XML chỉ là điểm khởi đầu; pivot là công cụ khám phá dữ liệu.

Graph: cùng dữ liệu, thành biểu đồ

Chuyển sang chế độ graph, cùng dữ liệu thành biểu đồ cột:

Ảnh chụp giao diện graph Odoo 19 biểu đồ cột Điểm tích luỹ theo hạng thẻ, cột Bạc cao khoảng 205 và cột Vàng cao khoảng 150, trục Y từ 0 đến 250, thanh công cụ phía trên có các nút chọn kiểu biểu đồ cột đường tròn và xếp chồng cùng nút sắp xếp tăng giảm

Hình 3: Graph view, cùng dữ liệu ở Hình 2. Cột Bạc ~205, cột Vàng 150 — khớp tổng hàng của pivot. Thanh công cụ cho đổi kiểu cột / đường / tròn / xếp chồng và sắp xếp, ngay trên giao diện. Cùng một model, hai góc nhìn báo cáo.

Các thuộc tính hay dùng

  • Pivot type="row" / type="col" / type="measure": khai hàng, cột, thước đo. Có thể nhiều row/col/measure.
  • type="measure" chỉ dùng cho field số (Integer/Float/Monetary). Field không có measure mặc định đếm số bản ghi (Count).
  • Graph type="bar|line|pie": kiểu biểu đồ. Thêm stacked="1" cho cột xếp chồng, hoặc field thứ hai không phải measure để phân nhóm màu.
  • type="measure" với widget: monetary cho tiền để hiện đúng đơn vị.
  • Cả hai tôn trọng search view: filter và group by đang bật sẽ lọc/đổi cách nhóm dữ liệu báo cáo.

Vài lưu ý Odoo 19

  • Thêm pivot/graph vào view_mode của action thì nút chuyển chế độ mới hiện. Thiếu bước này, dù có view record cũng không thấy.
  • Field dùng làm measure nên là số có nghĩa để cộng (điểm, số tiền, số lượng). Cộng một field vô nghĩa (như id) không sai cú pháp nhưng vô dụng.
  • Pivot/graph đọc dữ liệu bằng read_group dưới nền — nên chúng nhanh kể cả trên nhiều bản ghi, vì database tự gộp.

Ba ý mang về

  1. Pivot và graph là view báo cáo khai báo: chỉ cần khai field nào là row/col/measure (pivot) hay trục và measure (graph) — Odoo tự tổng hợp và vẽ, không cần viết code báo cáo.
  2. Đã chứng minh thật: pivot dựng bảng chéo hạng thẻ × trạng thái, cộng tổng hai chiều đúng (Bạc 205, Vàng 150, tổng 355); graph vẽ cùng số liệu thành biểu đồ cột. Người dùng tự xoay số liệu trên giao diện.
  3. Nhớ thêm pivot,graph vào view_mode; measure dùng field số có nghĩa; cả hai tôn trọng filter/group của search view và chạy nhanh nhờ read_group.

Xong nhóm view báo cáo. Lần sau tới hai view gắn với thời gian và công việc: Phần sau mổ xẻ calendar và activity view — hiện bản ghi trên lịch theo field ngày, và gắn hoạt động (cuộc gọi, việc cần làm) vào bản ghi.