How to Create Advanced Cohort View
Introduction
Odoo 18 cohort view delivers powerful insights by tracking groups of records over time. In this tutorial, you will learn how to set up an odoo 18 cohort view in your custom module step by step. First, you will prepare your module and define the necessary model and fields. Next, you will design the XML that powers the cohort chart. Then, you will add an action and menu item. Finally, you will test your view and explore best practices. By the end, you will master how to create an odoo 18 cohort report that sharpens your analytics and boosts your decision making.
Understanding Odoo 18 Cohort View Concepts
What Is an Odoo 18 Cohort View?
First, a cohort view groups records—such as customers, students, or orders—by a start date and tracks their activity or status over regular intervals. Then, it displays the results in a grid where each row represents a cohort (for example, customers who joined in the same week) and each column represents a time period (for example, weeks since signup). As a result, you can see retention, churn, or progression trends at a glance.
Why Use a Cohort View in Odoo 18?
Moreover, using a cohort view in Odoo 18 helps you spot patterns that list or graph views might hide. For example, you can identify which customer groups stay active longest or which product introductions drove sustained sales. Additionally, cohort analysis supports data-driven decisions by highlighting the impact of changes over time. Therefore, mastering the cohort view in Odoo 18 elevates your reporting capabilities.
Setting Up Your Odoo 18 Cohort Module
Creating the Module Structure
First, scaffold a new module (for example, wb_school_cohort
). Then, inside your module folder, create these subfolders:
wb_school_cohort/
├── __init__.py
├── __manifest__.py
├── models/
│ └── school.py
└── views/
└── school_cohort_view.xml
Next, ensure __init__.py
imports your model:
from . import models
Configuring the manifest.py for Cohort View
Then, open __manifest__.py
and configure it like this:
{
"name": "WB School Cohort View",
"version": "1.0",
"category": "Reporting",
"summary": "Add advanced cohort analysis for schools",
"description": "Provides an odoo 18 cohort report for tracking student intake and churn.",
"depends": ["base"],
"data": [
"views/school_cohort_view.xml",
],
"installable": True,
"application": False,
}
Here, you list your XML file under data
. This step ensures Odoo loads your cohort view when you install the module.
Defining Your Odoo 18 Cohort Model
Creating the Python Model for Cohort Data
Next, define the Python model that holds your cohort data. In models/school.py
, write:
from odoo import models, fields
class WbSchool(models.Model):
_name = 'wb.school'
_description = 'School Cohort Data'
name = fields.Char(string='Cohort Name', required=True)
start_date = fields.Date(string='Start Date', required=True)
end_date = fields.Date(string='End Date', required=True)
student_count = fields.Integer(string='Student Count', compute='_compute_student_count')
Then, implement a compute method if you want to derive metrics:
def _compute_student_count(self):
for record in self:
# For example, count related student records
record.student_count = self.env['res.partner'].search_count([
('created_date', '>=', record.start_date),
('created_date', '<=', record.end_date),
('company_type', '=', 'person'),
])
Here, you create a model named wb.school
. You add two date fields (start_date
, end_date
) and one computed integer field (student_count
). This setup supports the cohort intervals and measures in the view.
Adding Date Fields for Cohort Analysis
After that, ensure your start_date
and end_date
fields align with your cohort logic. For weekly cohorts, start_date
might be the Monday of each week, and end_date
the following Sunday. For monthly cohorts, use the first and last day of each month. By populating these fields, you give the cohort view clear boundaries for grouping and counting.
Designing the XML for Odoo 18 Cohort View
Extracted XML Code for Cohort View
Below is the core XML that defines an odoo 18 cohort view. You will place this in views/school_cohort_view.xml
:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_cohort_school" model="ir.ui.view">
<field name="name">school.cohort.view</field>
<field name="model">wb.school</field>
<field name="arch" type="xml">
<cohort string="School Cohort View"
mode="churn"
disable_linking="1"
interval="week"
date_start="start_date"
date_stop="end_date"
measure="student_count"/>
</field>
</record>
</odoo>
Then, you extend it with an action record, as shown in the next section.
Explaining Odoo 18 Cohort Tag Attributes
The string
Attribute
First, the string="School Cohort View"
attribute sets the title shown above the chart. You can change it to any human-friendly label, such as "Student Retention by Week"
.
The mode
Attribute
Next, mode="churn"
tells Odoo to calculate how each cohort shrinks or grows over time. Alternatively, you can use mode="normal"
to show raw cohort values. Choose the mode that best matches your analysis goals.
The disable_linking
Attribute
Then, disable_linking="1"
disables clickable links on each cell. This setting prevents users from drilling down into the raw records behind a cohort cell. If you want them to click through, set this attribute to 0
.
The interval
Attribute
After that, interval="week"
defines the cohort interval. You can switch it to day
, month
, or year
, depending on your reporting needs.
The date_start
and date_stop
Attributes
Furthermore, date_start="start_date"
and date_stop="end_date"
map to the fields in your Python model. Odoo uses these fields to group each record into the correct cohort bucket.
Advanced Attribute: measure
and group_by
Additionally, you can specify measure="student_count"
to use your computed field as the metric. Moreover, you can add group_by="[('partner_id','user_id')]"
(for example) to segment cohorts by additional dimensions.
Creating the Action for Odoo 18 Cohort View
Defining the Action Record
Then, define an action that includes your cohort view. Add the following to views/school_cohort_view.xml
right after the view record:
<record id="action_wb_school_cohort" model="ir.actions.act_window">
<field name="name">School Cohorts</field>
<field name="res_model">wb.school</field>
<field name="view_mode">list,cohort,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create your first cohort record
</p>
</field>
</record>
Here, you set view_mode="list,cohort,form"
. As a result, users can switch between list, cohort, and form views seamlessly.
Adding a Menu Item for Cohort View
Finally, add a menu item so users can open your action:
<menuitem id="menu_wb_school_root" name="School Analytics" sequence="10"/>
<menuitem id="menu_wb_school_cohort"
name="Cohort Analysis"
parent="menu_wb_school_root"
action="action_wb_school_cohort"
sequence="20"/>
In this snippet, you create a root menu called School Analytics, then nest Cohort Analysis beneath it. This setup makes your cohort view easily accessible from the main menu.
Testing and Validating Your Odoo 18 Cohort View
First, upgrade or install your module. Next, navigate to School Analytics > Cohort Analysis in your Odoo instance. Then, click the Cohort icon in the view switcher. Finally, verify that:
- Each row corresponds to the right
start_date
andend_date
. - Each column shows the correct weekly interval.
- Cells display your
student_count
values. - Cell colors reflect growth or churn (if you enabled coloring).
If you spot errors, recheck your field names, model definitions, and XML attributes. Make sure you restart your Odoo server and clear the cache before testing again.
Tips and Best Practices for Odoo 18 Cohort Reporting
- Use Clear Cohort Boundaries
Always define precisestart_date
andend_date
values. For example, set weekly cohorts to start on Monday and end on Sunday. - Limit the Number of Cohorts
If you generate too many rows, your chart may become unreadable. Therefore, filter cohorts to the last 12 weeks or last 6 months. - Adjust Interval for Your Audience
If stakeholders prefer daily insights, setinterval="day"
. Conversely, useinterval="month"
for high-level trends. - Combine with Filters
Add domain filters to your action to exclude irrelevant records. For example, filter out inactive schools. - Leverage Measure and Grouping
Use themeasure
attribute to track sums, averages, or custom counts. Also, applygroup_by
to compare cohorts by branch, salesperson, or product line. - Link to Official Docs
For more details, refer to the Odoo 18 developer documentation on cohort views. - Monitor Performance
Cohort views can be database intensive. Therefore, index your date fields and limit record counts when possible. - Use Transition Words
When writing help text or user guides, start sentences with words like “First,” “Next,” “Then,” and “Finally.” This practice guides users through each step.
Conclusion
In this tutorial, you learned how to create an Odoo 18 cohort view from scratch. First, you set up the module and defined the Python model with the necessary date and measure fields. Next, you designed the XML view, explained each attribute, and added the action and menu item. Finally, you tested the view and explored best practices to optimize clarity and performance. Now, you have a flexible cohort analysis tool that helps you track, compare, and visualize your data over time. Start experimenting with different intervals, measures, and grouping options to unlock deeper insights and drive smarter decisions in your Odoo 18 environment.
Discover more from teguhteja.id
Subscribe to get the latest posts sent to your email.