| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/19.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Franco Leyes, Baptiste Pellarin |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:46 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - sql_request_abstract odoo/odoo: - spreadsheet_dashboard - spreadsheet - bus - base - web - portal - html_editor - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module extends the functionality of reporting, to support creation of extra custom reports. It allows user to write a custom SQL request. (Generally, admin users) Once written, a new model is generated, and user can map the selected field with odoo fields. Then user ends the process, creating new menu, action and graph view. Technically, the module create SQL View (or materialized view, if option is checked). Materialized view duplicates datas, but request are fastest. If materialized view is enabled, this module will create a cron task to refresh the data). By default, users member of 'SQL Request / User' can see all the views. You can specify extra groups that have the right to access to a specific view. ## Warning This module is intended for technician people in a company and for Odoo integrators. It requires the user to know SQL syntax and Odoo models. If you don't have such skills, do not try to use this module specially on a production environment. ## Use Cases this module is interesting for the following use cases - You want to realize technical SQL requests, that Odoo framework doesn't allow (For exemple, UNION with many SELECT) A typical use case is if you want to have Sale Orders and PoS Orders datas in a same table - You want to customize an Odoo report, removing some useless fields and adding some custom ones. In that case, you can simply select the fields of the original report (sale.report model for exemple), and add your custom fields - You have a lot of data, and classical SQL Views have very bad performance. In that case, MATERIALIZED VIEW will be a good solution to reduce display duration |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | xpath | Inherits sql_request_abstract.view_sql_request_mixin_form | |
view_bi_sql_view_tree |
bi.sql.view | field | Inherits sql_request_abstract.view_sql_request_mixin_tree |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
copy=False
help='Cron Task that will refresh the materialized view'
ondelete='cascade'
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo Graph View'
is_materialized
Boolean
default=True
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
store=True
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
required=True
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo List View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
store=True
view_order
Char
default='pivot,graph,list'
help='Comma-separated text. Possible values: "graph", "pivot" or "list"'
required=True
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_reset_to_model_valid(self)
button_reset_to_sql_valid(self)
button_set_draft(self)
button_update_model_access(self)
check_manual_fields(self, model)
copy(self, default=None)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_context
Char
default='{}'
help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
required=True
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
group_operator
Selection
help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator'
selection=_GROUP_OPERATOR_SELECTION
index_name
Char
compute='_compute_index_name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
state
Selection
related='bi_sql_view_id.state'
store=True
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals_list)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/18.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.0.4 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, thien, Chris Bergman, SupportSNDC, Emmanuel Ferdman |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:07 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - sql_request_abstract odoo/odoo: - spreadsheet_dashboard - spreadsheet - bus - base - web - portal - web_editor - html_editor - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module extends the functionality of reporting, to support creation of extra custom reports. It allows user to write a custom SQL request. (Generally, admin users) Once written, a new model is generated, and user can map the selected field with odoo fields. Then user ends the process, creating new menu, action and graph view. Technically, the module create SQL View (or materialized view, if option is checked). Materialized view duplicates datas, but request are fastest. If materialized view is enabled, this module will create a cron task to refresh the data). By default, users member of 'SQL Request / User' can see all the views. You can specify extra groups that have the right to access to a specific view. ## Warning This module is intended for technician people in a company and for Odoo integrators. It requires the user to know SQL syntax and Odoo models. If you don't have such skills, do not try to use this module specially on a production environment. ## Use Cases this module is interesting for the following use cases - You want to realize technical SQL requests, that Odoo framework doesn't allow (For exemple, UNION with many SELECT) A typical use case is if you want to have Sale Orders and PoS Orders datas in a same table - You want to customize an Odoo report, removing some useless fields and adding some custom ones. In that case, you can simply select the fields of the original report (sale.report model for exemple), and add your custom fields - You have a lot of data, and classical SQL Views have very bad performance. In that case, MATERIALIZED VIEW will be a good solution to reduce display duration |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | xpath | Inherits sql_request_abstract.view_sql_request_mixin_form | |
view_bi_sql_view_tree |
bi.sql.view | field | Inherits sql_request_abstract.view_sql_request_mixin_tree |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
copy=False
help='Cron Task that will refresh the materialized view'
ondelete='cascade'
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo Graph View'
is_materialized
Boolean
default=True
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
store=True
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
required=True
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
string='Odoo List View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
store=True
view_order
Char
default='pivot,graph,list'
help='Comma-separated text. Possible values: "graph", "pivot" or "list"'
required=True
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_reset_to_model_valid(self)
button_reset_to_sql_valid(self)
button_set_draft(self)
button_update_model_access(self)
check_manual_fields(self, model)
copy(self, default=None)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_context
Char
default='{}'
help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
required=True
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
group_operator
Selection
help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator'
selection=_GROUP_OPERATOR_SELECTION
index_name
Char
compute='_compute_index_name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
state
Selection
related='bi_sql_view_id.state'
store=True
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals_list)
unlink(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/17.0/bi_sql_editor |
| VERSION | |
| VERSION | 2.1.1 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Sylvain LE GAL, Weblate, OCA-git-bot, oca-ci, Vincent Van Rossem, GuillemCForgeFlow, chien, Andreu Orensanz |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:00 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - sql_request_abstract odoo/odoo: - spreadsheet_dashboard - spreadsheet - bus - base - web - portal - web_editor - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module extends the functionality of reporting, to support creation of extra custom reports. It allows user to write a custom SQL request. (Generally, admin users) Once written, a new model is generated, and user can map the selected field with odoo fields. Then user ends the process, creating new menu, action and graph view. Technically, the module create SQL View (or materialized view, if option is checked). Materialized view duplicates datas, but request are fastest. If materialized view is enabled, this module will create a cron task to refresh the data). By default, users member of 'SQL Request / User' can see all the views. You can specify extra groups that have the right to access to a specific view. ## Warning This module is intended for technician people in a company and for Odoo integrators. It requires the user to know SQL syntax and Odoo models. If you don't have such skills, do not try to use this module specially on a production environment. ## Use Cases this module is interesting for the following use cases - You want to realize technical SQL requests, that Odoo framework doesn't allow (For exemple, UNION with many SELECT) A typical use case is if you want to have Sale Orders and PoS Orders datas in a same table - You want to customize an Odoo report, removing some useless fields and adding some custom ones. In that case, you can simply select the fields of the original report (sale.report model for exemple), and add your custom fields - You have a lot of data, and classical SQL Views have very bad performance. In that case, MATERIALIZED VIEW will be a good solution to reduce display duration |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | xpath | Inherits sql_request_abstract.view_sql_request_mixin_form | |
view_bi_sql_view_tree |
bi.sql.view | field | Inherits sql_request_abstract.view_sql_request_mixin_tree |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
ondelete='cascade'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
string='Extra Rule Definition'
form_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Form View'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
is_materialized
Boolean
default=True
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
required=True
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot", "tree" or "form"'
required=True
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_reset_to_model_valid(self)
button_reset_to_sql_valid(self)
button_set_draft(self)
button_update_model_access(self)
check_manual_fields(self, model)
copy(self, default=None)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_context
Char
default='{}'
help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
required=True
translate=True
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
group_operator
Selection
help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator'
selection=_GROUP_OPERATOR_SELECTION
index_name
Char
compute='_compute_index_name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
is_many2one_clickable
Boolean
default=False
help='If the field is of type Many2one and the option is enabled, the field will be clickable on the list view.'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
state
Selection
related='bi_sql_view_id.state'
store=True
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals_list)
unlink(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/16.0/bi_sql_editor |
| VERSION | |
| VERSION | 2.0.2 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, GitHub, Jordi Ballester Alomar, Denis Leemann, Weblate, OCA-git-bot, Pierrick Brun, oca-ci, GuillemCForgeFlow, SupportSNDC |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - sql_request_abstract odoo/odoo: - spreadsheet_dashboard - spreadsheet - bus - base - web - base_setup - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | xpath | Inherits sql_request_abstract.view_sql_request_mixin_form | |
view_bi_sql_view_tree |
bi.sql.view | field | Inherits sql_request_abstract.view_sql_request_mixin_tree |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
copy=False
help='Cron Task that will refresh the materialized view'
ondelete='cascade'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
form_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Form View'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
readonly=True
required=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot", "tree" or "form"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_reset_to_model_valid(self)
button_reset_to_sql_valid(self)
button_set_draft(self)
button_update_model_access(self)
check_manual_fields(self, model)
copy(self, default=None)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_context
Char
default='{}'
help='Context value that will be inserted for this field in all the views. Important note : please write a context with single quote.'
states={'ui_valid': [('readonly', True)]}
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
required=True
states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
states={'ui_valid': [('readonly', True)]}
group_operator
Selection
help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator'
selection=_GROUP_OPERATOR_SELECTION
states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
index_name
Char
compute='_compute_index_name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
states={'ui_valid': [('readonly', True)]}
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
string='Model'
name
Char
readonly=True
required=True
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
state
Selection
related='bi_sql_view_id.state'
store=True
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
states={'ui_valid': [('readonly', True)]}
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
states={'model_valid': [('readonly', True)], 'ui_valid': [('readonly', True)]}
string='Field Type'
create(self, vals_list)
unlink(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/15.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Laurent Mignon (ACSONE), Jordi Ballester Alomar, OCA Transbot, Víctor Martínez, Denis Leemann, Weblate, OCA-git-bot, oca-ci, mariadforgeflow, GuillemCForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:42 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/reporting-engine: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
ondelete='cascade'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
readonly=True
required=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
check_manual_fields(self, model)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
group_operator
Selection
help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator'
selection=_GROUP_OPERATOR_SELECTION
index_name
Char
compute='_compute_index_name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/14.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Paulius Sladkevičius, Sylvain LE GAL, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci, David James, GuillemCForgeFlow, Héctor Vi Or |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
string='Action Context'
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
string='Computed Action Context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
readonly=True
required=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
string='View Order'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
check_manual_fields(self, model)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
group_operator
Selection
help='By default, Odoo will sum the values when grouping. If you wish to alter the behaviour, choose an alternate Group Operator'
selection=_GROUP_OPERATOR_SELECTION
string='Group Operator'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/13.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.2.0 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, HviorForgeFlow, GuillemCForgeFlow, Laurent-Corron |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Action Context'
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
parent_menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
default=<expr>
help="By assigning a value to this field before manually creating the UI, you're overwriting the parent menu on which the menu related to the SQL report will be created."
readonly=True
required=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
string='Parent Odoo Menu'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
string='View Order'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/12.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.3.1 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Sylvain LE GAL, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes, hveficent |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:24 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_context
Text
default='{}'
help='Define here a context that will be used by default, when creating the action.'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)], 'model_valid': [('readonly', False)]}
string='Action Context'
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
computed_action_context
Text
compute='_compute_computed_action_context'
string='Computed Action Context'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
string='View Order'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/11.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, mreficent, OCA Transbot, oca-travis, Weblate, hveficent |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:24:01 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
string='View Order'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/10.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.0.2 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | mreficent, Patrick Tombez, oca-travis, Weblate, OCA-git-bot, Darshan Patel, Aaron Henriquez, Florent Cayré |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/reporting-engine |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:20:02 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
No new fields.
Public methods (0)No public methods.
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
group_ids
Many2many → res.groups
comodel_name='res.groups'
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)], 'sql_valid': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
sequence
Integer
string='sequence'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
string='View Order'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
write(self, vals)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/9.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Holger Brunn, Sylvain LE GAL, Jordi Ballester Alomar, OCA Transbot, oca-travis, Weblate, aheficent, Nicolas Mac Rouillon, nicomacr |
| WEBSITE | |
| WEBSITE | https://www.odoo-community.org |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:24 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
pivot_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Pivot View'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Syntax should follow: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
view_order
Char
default='pivot,graph,tree'
help='Comma-separated text. Possible values: "graph", "pivot" or "tree"'
readonly=False
required=True
states={'ui_valid': [('readonly', True)]}
string='View Order'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_preview_sql_expression(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
copy(self, default=None)
onchange_group_ids(self)
unlink(self)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Comodel of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Keep empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/reporting-engine |
| GIT | |
| GIT | https://github.com/OCA/reporting-engine.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/reporting-engine/tree/8.0/bi_sql_editor |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Reporting |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, OCA Transbot, oca-travis, Weblate |
| WEBSITE | |
| WEBSITE | https://www.odoo-community.org |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:27 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - sql_request_abstract odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_bi_sql_view_form |
bi.sql.view | form | New | |
view_bi_sql_view_tree |
bi.sql.view | tree | New |
action_id
Many2one → ir.actions.act_window
comodel_name='ir.actions.act_window'
readonly=True
string='Odoo Action'
bi_sql_view_field_ids
One2many → bi.sql.view.field
comodel_name='bi.sql.view.field'
inverse_name='bi_sql_view_id'
string='SQL Fields'
cron_id
Many2one → ir.cron
comodel_name='ir.cron'
help='Cron Task that will refresh the materialized view'
readonly=True
string='Odoo Cron'
domain_force
Text
default='[]'
help="Define here access restriction to data.\n Take care to use field name prefixed by 'x_'. A global 'ir.rule' will be created. A typical Multi Company rule is for exemple \n ['|', ('x_company_id','child_of', [user.company_id.id]),('x_company_id','=',False)]."
string='Extra Rule Definition'
graph_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Graph View'
has_group_changed
Boolean
copy=False
is_materialized
Boolean
default=True
readonly=True
states={'draft': [('readonly', False)]}
string='Is Materialized View'
materialized_text
Char
compute='_compute_materialized_text'
store=True
menu_id
Many2one → ir.ui.menu
comodel_name='ir.ui.menu'
readonly=True
string='Odoo Menu'
model_id
Many2one → ir.model
comodel_name='ir.model'
readonly=True
string='Odoo Model'
model_name
Char
compute='_compute_model_name'
help='Full Qualified Name of the transient model that will be created.'
readonly=True
store=True
string='Model Name'
query
Text
default='SELECT\n my_field as x_my_field\nFROM my_table'
help="SQL Request that will be inserted as the view. Take care to :\n * set a name for all your selected fields, specially if you use SQL function (like EXTRACT, ...);\n * Do not use 'SELECT *' or 'SELECT table.*';\n * prefix the name of the selectable columns by 'x_';"
rule_id
Many2one → ir.rule
comodel_name='ir.rule'
readonly=True
string='Odoo Rule'
search_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Search View'
size
Char
help='Size of the materialized view and its indexes'
readonly=True
string='Database Size'
state
Selection
selection_add=_STATE_SQL_EDITOR
technical_name
Char
help="Suffix of the SQL view. (SQL full name will be computed and prefixed by 'x_bi_sql_view_'. Should have correctsyntax. For more information, see https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"
required=True
string='Technical Name'
tree_view_id
Many2one → ir.ui.view
comodel_name='ir.ui.view'
readonly=True
string='Odoo Tree View'
view_name
Char
compute='_compute_view_name'
help='Full name of the SQL view'
readonly=True
store=True
string='View Name'
button_create_sql_view_and_model(self)
button_create_ui(self)
button_open_view(self)
button_refresh_materialized_view(self)
button_set_draft(self)
button_update_model_access(self)
copy(self, default=None)
cron_refresh_materialized_view(self, ids)
onchange_group_ids(self)
unlink(self)
bi_sql_view_id
Many2one → bi.sql.view
comodel_name='bi.sql.view'
ondelete='cascade'
string='SQL View'
field_description
Char
help='This will be used as the name of the Odoo field, displayed for users'
string='Field Description'
graph_type
Selection
selection=_GRAPH_TYPE_SELECTION
string='Graph Type'
index_name
Char
compute='_compute_index_name'
string='Index Name'
is_group_by
Boolean
help="Check this box if you want to create a 'group by' option in the search view"
string='Is Group by'
is_index
Boolean
help='Check this box if you want to create an index on that field. This is recommended for searchable and groupable fields, to reduce duration'
string='Is Index'
many2one_model_id
Many2one → ir.model
comodel_name='ir.model'
help="For 'Many2one' Odoo field.\n Co Model of the field."
string='Model'
name
Char
readonly=True
required=True
string='Name'
selection
Text
default='[]'
help="For 'Selection' Odoo field.\n List of options, specified as a Python expression defining a list of (key, label) pairs. For example: [('blue','Blue'), ('yellow','Yellow')]"
string='Selection Options'
sequence
Integer
readonly=True
required=True
string='sequence'
sql_type
Char
help='SQL Type in the database'
readonly=True
required=True
string='SQL Type'
tree_visibility
Selection
default='available'
required=True
selection=_TREE_VISIBILITY_SELECTION
string='Tree Visibility'
ttype
Selection
help="Type of the Odoo field that will be created. Let empty if you don't want to create a new field. If empty, this field will not be displayed neither available for search or group by function"
selection=_TTYPE_SELECTION
string='Field Type'
create(self, vals)