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>

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:

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:

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êmstacked="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ớiwidget:monetarycho 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/graphvàoview_modecủ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_groupdướ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ề
- 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. - Đã 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.
- Nhớ thêm
pivot,graphvàoview_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.