see and analyze this view in odoo17 enterprise:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <!-- Tree View for User Questionnaire Statistics -->
    <record id="view_user_questionnaire_statistics_tree" model="ir.ui.view">
        <field name="name">user.questionnaire.statistics.tree</field>
        <field name="model">user.questionnaire</field>
        <field name="arch" type="xml">
            <tree string="Questionnaire Statistics">
                <field name="questionnaire_id"/>
                <field name="user_id"/>
                <field name="progress" widget="progressbar"/>
                <field name="is_finished"/>
            </tree>
        </field>
    </record>

    <!-- Search View for User Questionnaire Statistics -->
    <record id="view_user_questionnaire_statistics_search" model="ir.ui.view">
        <field name="name">user.questionnaire.statistics.search</field>
        <field name="model">user.questionnaire</field>
        <field name="arch" type="xml">
            <search string="Search Questionnaire Statistics">
                <field name="questionnaire_id"/>
                <field name="user_id"/>
                <filter string="Completed" name="completed" domain="[('is_finished', '=', True)]"/>
                <filter string="In Progress" name="in_progress" domain="[('is_finished', '=', False)]"/>
                <group expand="0" string="Group By">
                    <filter string="Questionnaire" name="group_by_questionnaire" context="{'group_by': 'questionnaire_id'}"/>
                    <filter string="User" name="group_by_user" context="{'group_by': 'user_id'}"/>
                    <filter string="Status" name="group_by_status" context="{'group_by': 'is_finished'}"/>
                </group>
            </search>
        </field>
    </record>

    <!-- Graph View for User Questionnaire Statistics -->
    <record id="view_user_questionnaire_statistics_graph" model="ir.ui.view">
        <field name="name">user.questionnaire.statistics.graph</field>
        <field name="model">user.questionnaire</field>
        <field name="arch" type="xml">
            <graph string="Questionnaire Statistics" type="bar">
                <field name="questionnaire_id"/>
                <field name="progress" type="measure"/>
            </graph>
        </field>
    </record>

    <!-- Action for Statistics -->
    <record id="action_questionnaire_statistics" model="ir.actions.act_window">
        <field name="name">Questionnaire Statistics</field>
        <field name="res_model">user.questionnaire</field>
        <field name="view_mode">tree,graph</field>
        <field name="search_view_id" ref="view_user_questionnaire_statistics_search"/>
        <field name="help" type="html">
            <p class="o_view_nocontent_smiling_face">
                No questionnaire statistics found
            </p>
            <p>
                Statistics will appear here once users start answering questionnaires.
            </p>
        </field>
    </record>

    <!-- Menu Item for Statistics -->
    <menuitem id="menu_questionnaire_statistics"
            name="Statistics"
            parent="menu_questionnaire_root"
            action="action_questionnaire_statistics"
            sequence="20"/>
</odoo>

i need these views but with slight improvements:

1. in tree view: 
add default group_by questionaire
when i click to item (user_id) it should show me this users results (answers to all questions that answered in questionaire)
2. in graph view
add more measures

additional data:
from odoo import models, fields, api
from odoo.exceptions import ValidationError


class Questionnaire(models.Model):
    _name = 'questionnaire'
    _description = "So'rovnomalar"

    name = fields.Char(string='Name', translate=True)
    is_finished = fields.Boolean(default=False, store=True)
    user_id = fields.Many2one('res.partner', string='User')
    image = fields.Binary(string='Image')
    question_ids = fields.One2many('question', 'questionnaire_id', string='Questions')
    start_date = fields.Date(string='Start Date', default=fields.Date.today)
    end_date = fields.Date(string='End Date', default=fields.Date.today)
    
    location_type = fields.Selection([
        ('all', 'All'),
        ('region', 'Region'),
        ('district', 'District'),
        ('mahalla', 'Mahalla')
    ], string='Location Type', required=True, default='all')

    to_all = fields.Boolean(string='Is Republic')
    region_id = fields.Many2many('region', string="Region", required=False)
    to_region = fields.Boolean()
    district_id = fields.Many2many('district', string="District", required=False)
    to_district = fields.Boolean()
    mahalla_id = fields.Many2many('mahalla', string="Mahalla", required=False)
    to_mahalla = fields.Boolean()

    @api.onchange('to_all')
    def _onchange_to_all(self):
        if self.to_all:
            domain = []
            mahallas = self.env['mahalla'].search(domain)
            self.mahalla_id = [(6, 0, mahallas.ids)]
            self.region_id = False
            self.district_id = False
        else:
            self.mahalla_id = False

    @api.onchange('to_region', 'region_id')
    def _onchange_region_selection(self):
        if self.to_region and self.region_id:
            districts = self.env['district'].search([('region_id', 'in', self.region_id.ids)])
            mahallas = self.env['mahalla'].search([('district_id', 'in', districts.ids)])
            self.mahalla_id = [(6, 0, mahallas.ids)]
            self.district_id = False
        elif not self.to_region:
            if not self.to_all and not self.to_district:
                self.mahalla_id = False

    @api.onchange('to_district', 'district_id')
    def _onchange_district_selection(self):
        if self.to_district and self.district_id:
            mahallas = self.env['mahalla'].search([('district_id', 'in', self.district_id.ids)])
            self.mahalla_id = [(6, 0, mahallas.ids)]
        elif not self.to_district:
            if not self.to_all and not self.to_region:
                self.mahalla_id = False

    @api.onchange('location_type')
    def on_change_location_type(self):
        if self.location_type == 'all':
            self.to_all = True
            self.to_region = True
            self.to_district = True
            self.to_mahalla = True
            self._onchange_to_all()
        elif self.location_type == 'region':
            self.to_all = True
            self.to_region = False
            self.to_district = True
            self.to_mahalla = True
            self._onchange_region_selection()
        elif self.location_type == 'district':
            self.to_all = False
            self.to_region = False
            self.to_district = False
            self.to_mahalla = True
            self._onchange_district_selection()
        elif self.location_type == 'mahalla':
            self.to_all = False
            self.to_region = False
            self.to_district = False
            self.to_mahalla = False

    @api.constrains('location_type', 'region_id', 'district_id', 'mahalla_id')
    def _check_location_requirements(self):
        for record in self:
            if record.location_type == 'region' and not record.region_id:
                raise ValidationError("Specify the region for the announcement.")
            elif record.location_type == 'district':
                if not record.region_id:
                    raise ValidationError("Specify the region for the district announcement.")
                if not record.district_id:
                    raise ValidationError("Specify the district for the announcement.")
            elif record.location_type == 'mahalla':
                if not record.region_id:
                    raise ValidationError("Specify the region for the mahalla announcement.")
                if not record.district_id:
                    raise ValidationError("Specify the district for the mahalla announcement.")
                if not record.mahalla_id:
                    raise ValidationError("Specify the mahalla for the announcement.")
    
    @api.constrains('start_date', 'end_date')
    def _check_date_range(self):
        for record in self:
            if record.start_date > record.end_date:
                raise ValidationError("Start date cannot be higher than end date.")
from odoo import models, fields


class Question(models.Model):
    _name = 'question'
    _description = 'Savol'

    name = fields.Char(string='Nomi', translate=True)
    description = fields.Text(string='Question', translate=True)
    image = fields.Binary(string='Image', required=True)
    type = fields.Selection(
        [
            ('text', 'Text'),
            ('multiple_choice', 'Multiple Choice'),
            ('single_choice', 'Single Choice'),
            ('numeric', 'Numeric'),
            ('date', 'Date'),
        ],
        string='Savol Turi',
        required=True,
        help="Select the type of the question"
    )
    questionnaire_id = fields.Many2one('questionnaire', string="Questionnaire")
    option_ids = fields.One2many('option', 'question_id', string='Tanlovlar')

from odoo import models, fields, api


class UserQuestionnaire(models.Model):
    _name = 'user.questionnaire'
    _description = 'Tracking Questionnaire for Users'

    questionnaire_id = fields.Many2one('questionnaire', string="So'rovnoma")
    user_id = fields.Many2one('res.partner', string="So'rovnoma Qatnashuvchisi")

    is_finished = fields.Boolean(string='Tugatilganmi', default=False)
    progress = fields.Float(string='Progress', default=0)

    def _compute_progress(self):
        for rec in self:
            total_questions = self.env['question'].search_count([
                ('questionnaire_id', '=', rec.questionnaire_id.id)
            ])
            answered_questions = self.env['user.question'].search_count([
                ('user_questionnaire_id', '=', rec.id),
                ('is_answered', '=', True)
            ])

            rec.progress = (answered_questions / total_questions) * 100 if total_questions > 0 else 0

    def _compute_is_finished(self):
        for rec in self:
            rec.is_finished = rec.progress > 90


class UserQuestion(models.Model):
    _name = 'user.question'
    _description = 'Savollar Foydalanuvchiga'

    user_questionnaire_id = fields.Many2one('user.questionnaire', string='User Questionnaire')
    question_id = fields.Many2one('question', string='Savol')
    is_answered = fields.Boolean(string='Javob berganmi?')


class UserQuestionOption(models.Model):
    _name = 'user.question.option'
    _description = 'Foydalanuvchi Javoplari'

    user_question_id = fields.Many2one('user.question', string='Savol')
    option_id = fields.Many2one('option', string='tanlov')
from odoo import models, fields


class Option(models.Model):
    _name = 'option'
    _description = 'Tanlov'

    text = fields.Text(string='Tanlov', translate=True)
    question_id = fields.Many2one('question', string='Savol')