From 8ca247d9dd20dc6432b028f6f15a637de7b18f96 Mon Sep 17 00:00:00 2001 From: "Sam Lieber (sali)" Date: Thu, 20 Jun 2024 16:18:07 -0400 Subject: [PATCH] [ADD] data cleaning: overview closes odoo/documentation#9866 Signed-off-by: Samuel Lieber (sali) Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com> --- content/applications/productivity.rst | 1 + .../productivity/data_cleaning.rst | 234 ++++++++++++++++++ .../data-cleaning-duplicates.png | Bin 0 -> 33926 bytes 3 files changed, 235 insertions(+) create mode 100644 content/applications/productivity/data_cleaning.rst create mode 100644 content/applications/productivity/data_cleaning/data-cleaning-duplicates.png diff --git a/content/applications/productivity.rst b/content/applications/productivity.rst index 363c62249..dccf55a5a 100644 --- a/content/applications/productivity.rst +++ b/content/applications/productivity.rst @@ -13,6 +13,7 @@ Productivity productivity/knowledge productivity/calendar productivity/discuss + productivity/data_cleaning productivity/whatsapp productivity/voip productivity/to_do diff --git a/content/applications/productivity/data_cleaning.rst b/content/applications/productivity/data_cleaning.rst new file mode 100644 index 000000000..1dcd63b33 --- /dev/null +++ b/content/applications/productivity/data_cleaning.rst @@ -0,0 +1,234 @@ +============= +Data Cleaning +============= + +The Odoo *Data Cleaning* app keeps the database neat and organized throughout the use of its +provided features: + +- :ref:`Deduplicates `: merges or removes duplicate entries to ensure + data is unique. +- :ref:`Recycles `: identifies outdated records to either archive or delete + them. +- :ref:`Merges `: combines multiple similar entries into one + streamlined record. +- :ref:`Formats `: standardizes text data by finding and replacing it + according to specified needs. + +Through customizable automated rules (or manual praxis), individual records and accompanying text +data in the database will remain up-to-date and consistently formatted, tailored to company +specifications. + +.. _data_cleaning/install-modules: + +Install modules +=============== + +The *Data Cleaning* application consists of several modules. :ref:`Install ` the +following to access all available features: + +.. list-table:: + :header-rows: 1 + :widths: 25 25 50 + + * - Name + - Technical name + - Description + * - :guilabel:`Data Recycle` + - `data_recycle` + - Base module to enable the recycle feature, available on Odoo Community edition. + * - :guilabel:`Data Cleaning` + - `data_cleaning` + - Enables field cleaning feature to format text data across multiple records, available + **only** on Odoo Enterprise edition. + * - :guilabel:`Data Cleaning (merge)` + - `data_merge` + - Enables the deduplication feature to find similar (or duplicate) records, and merge them, + available **only** on Odoo Enterprise edition. + +.. spoiler:: Additionally, several app-specific modules are available + + .. list-table:: + :widths: 25 25 50 + + * - :guilabel:`CRM Deduplication` + - `data_merge_crm` + - Enables the deduplication feature on the *CRM* app, and uses the :doc:`CRM default merging + feature <../sales/crm/pipeline/merge_similar>`. + * - :guilabel:`Helpdesk Merge action` + - `data_merge_helpdesk` + - Enables the merge feature for the *Helpdesk* app. + * - :guilabel:`Project Merge action` + - `data_merge_project` + - Enables the merge feature for the *Projects* app. + * - :guilabel:`UTM Deduplication` + - `data_merge_utm` + - Enables the merge feature for the *UTM Tracker* app. + * - :guilabel:`WMS Accounting Merge` + - `data_merge_stock_account` + - Creates a warning in cases of products merging that may affect inventory valuation, if the + *Inventory* app is installed. + +.. _data_cleaning/deduplication: + +Deduplication +============= + +On the :guilabel:`Duplicates` dashboard (:menuselection:`Data Cleaning app --> Deduplication`), Odoo +suggests groups of similar records to be :ref:`merged ` by matching +conditions within the records set by the :ref:`deduplication rules +`. + +.. image:: data_cleaning/data-cleaning-duplicates.png + :align: center + :alt: Deduplication dashboard in the Data Cleaning application. + +The :guilabel:`RULE` sidebar lists each of the active deduplication rules, and displays the total +number of duplicates detected beside each rule. + +By default, the :guilabel:`All` rule is selected. Displayed records are grouped by their rule, with +a :guilabel:`Similarity` rating (out of 100%) in the list view, with the following columns: + +- :guilabel:`Created On`: the date and time the original record was created. +- :guilabel:`Name`: the name or title of the original record. +- :guilabel:`Field Values`: the original record's values for the fields used to detect duplicates. +- :guilabel:`Used In`: lists other models referencing the original record. +- :guilabel:`ID`: the original record's unique ID. +- :guilabel:`Is Master`: the duplicates are merged into the *master* record. There can be **one** + master record in a grouping of similar records. + +Select a specific rule in the :guilabel:`RULE` sidebar to filter the duplicate records. + +.. _data_cleaning/merge-records: + +Merge duplicate records +----------------------- + +To merge records, first choose a *master* record within the grouping of similar records. The master +record acts as the base, at which any additional information from similar records are merged into. + +Optionally, no master record can be set, leaving Odoo to choose a record at random to merge into. + +Next, click the :guilabel:`Merge` button at the top of the similar records grouping. Then, click +:guilabel:`Ok` to confirm the merge. + +Once a record is merged, a message is logged in the chatter of the master record, describing the +merge. Certain records, like *Project* tasks, are logged in the chatter with a link to the old +record for a convenient reference. + +.. tip:: + Discard groupings by clicking the :guilabel:`DISCARD` button. Upon doing so, the grouping is + hidden from the list and archived. + + View discarded groupings by selecting the :guilabel:`Discarded` filter from the :ref:`Search... + ` bar. + +.. _data_cleaning/deduplication-rules: + +Deduplication rules +------------------- + +The :guilabel:`Deduplication Rules` page (:menuselection:`Data Cleaning app --> Configuration --> +Rules: Deduplication`) is where the conditions for records to be detected as duplicates can be set. + +These rules can be configured for each model in the database, and with varying levels of +specificity. + +.. tip:: + The deduplication rules run once every day, by default, as part of a scheduled action chron + (*Data Merge: Find Duplicate Records*). However, each rule can be :ref:`ran manually + ` anytime. + +Modify a deduplication rule +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Select a default rule to edit, or create a new rule by clicking on the :guilabel:`New` button, on +the :guilabel:`Deduplication Rules` page (:menuselection:`Data Cleaning app --> Configuration --> +Rules: Deduplication`). + +First, choose a :guilabel:`Model` for this rule to target. Selecting a model updates the rule title +to the chosen model. + +Optionally, configure a :guilabel:`Domain` to specify the records eligible for this rule. The number +of eligible records is shown in the :icon:`oi-arrow-right` :guilabel:`# record(s)` link. + +Depending on the selected :guilabel:`Model`, the :guilabel:`Duplicate Removal` field appears. +Choose whether to :guilabel:`Archive` or :guilabel:`Delete` merged records. + +Next, select a :guilabel:`Merge Mode`: + +- :guilabel:`Manual`: requires each duplicate grouping to be manually merged, also enables the + :guilabel:`Notify Users` field. +- :guilabel:`Automatic`: automatically merges duplicate groupings, without notifying users, based on + the records with a similarity percentage above the threshold set in the :guilabel:`Similarity + Threshold` field. + +Enable the :guilabel:`Active` toggle to start capturing duplicates with this rule as soon as it is +saved. + +Lastly, create at least one deduplication rule in the :guilabel:`Deduplication Rules` field, by +clicking :guilabel:`Add a line`, under the :guilabel:`Unique ID Field` column. + +- Select a field in the model from the :guilabel:`Unique ID Field` drop-down menu. This field is + referenced for similar records. +- Select a matching condition in the :guilabel:`Match If` field to apply the deduplication rule, + depending on the text in the :guilabel:`Unique ID Field`: + + - :guilabel:`Exact Match`: the characters in the text match exactly. + - :guilabel:`Case/Accent Insensitive Match`: the characters in the text match, regardless of + casing and language-specific accent differences. + +.. important:: + The rule does **not** capture duplicates without at least one deduplication rule set in the + :guilabel:`Deduplication Rules` field. + +.. tip:: + A few more fields are available for an advanced configuration. + + If on a multi-company database, the :guilabel:`Cross-Company` field is available. When enabled, + duplicates across different companies are suggested. + + Activate :ref:`developer-mode` to display the :guilabel:`Suggestion Threshold` field. Duplicates + with a similarity below the threshold set in this field are **not** suggested. + +With the rule's configuration complete, either close the rule form, or :ref:`run the rule manually +` to instantly capture duplicate records. + +.. _data_cleaning/run-deduplication-rule: + +Manually run a deduplication rule +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To manually run a specific deduplication rule at any time, navigate to :menuselection:`Data Cleaning +app --> Configuration --> Rules: Deduplication`, and select the rule to run. + +Then, on the rule form, select the :guilabel:`Deduplicate` button on the top-left. Upon doing so, +the :icon:`fa-clone` :guilabel:`Duplicates` smart button displays the number of duplicates captured. + +Click on the :icon:`fa-clone` :guilabel:`Duplicates` smart button to manage these records. + +.. _data_cleaning/recycle: + +Recycle records +=============== + +On the :guilabel:`Field Recycle Records` dashboard (:menuselection:`Data Cleaning app --> Recycle +Records`), Odoo detects records that can be archived or deleted, by matching conditions within the +records set by the recycle record's rules. + +.. _data_cleaning/field-cleaning: + +Field cleaning +============== + +On the :guilabel:`Field Cleaning Records* dashboard (:menuselection:`Data Cleaning app --> Field +Cleaning`), Odoo suggests formatting changes to data in fields of a record, to follow a convention +set by the field cleaning rules. + +.. _data_cleaning/merge-action-manager: + +Merge action manager +==================== + +The :guilabel:`Merge Action Manager` (:menuselection:`Data Cleaning app --> Configuration --> Merge +Action Manager`) enables or disables the *Merge* action available in the *Actions* menu for models +in the database. diff --git a/content/applications/productivity/data_cleaning/data-cleaning-duplicates.png b/content/applications/productivity/data_cleaning/data-cleaning-duplicates.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a09b2bcef3ff47291a53c42199fb4898ff0475 GIT binary patch literal 33926 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 literal 0 HcmV?d00001