From b17e44ea59bf5e60855f9f402169008a65f4ad8c Mon Sep 17 00:00:00 2001 From: Parish Bracha Date: Fri, 21 Jun 2024 13:51:01 -0700 Subject: [PATCH] [ADD] crm: new lead distribution report closes odoo/documentation#9915 Signed-off-by: Parish Bracha (pabr) --- .../applications/sales/crm/track_leads.rst | 1 + .../track_leads/lead_distribution_report.rst | 195 ++++++++++++++++++ .../lead_distribution_report/active-set.png | Bin 0 -> 3553 bytes .../lead_distribution_report/created-on.png | Bin 0 -> 6228 bytes .../sales-team-location.png | Bin 0 -> 7583 bytes 5 files changed, 196 insertions(+) create mode 100644 content/applications/sales/crm/track_leads/lead_distribution_report.rst create mode 100644 content/applications/sales/crm/track_leads/lead_distribution_report/active-set.png create mode 100644 content/applications/sales/crm/track_leads/lead_distribution_report/created-on.png create mode 100644 content/applications/sales/crm/track_leads/lead_distribution_report/sales-team-location.png diff --git a/content/applications/sales/crm/track_leads.rst b/content/applications/sales/crm/track_leads.rst index c770e3215..3a56f6574 100644 --- a/content/applications/sales/crm/track_leads.rst +++ b/content/applications/sales/crm/track_leads.rst @@ -12,3 +12,4 @@ Assign and track leads track_leads/quality_leads_report track_leads/resellers track_leads/marketing_attribution + track_leads/lead_distribution_report diff --git a/content/applications/sales/crm/track_leads/lead_distribution_report.rst b/content/applications/sales/crm/track_leads/lead_distribution_report.rst new file mode 100644 index 000000000..c5a611c6d --- /dev/null +++ b/content/applications/sales/crm/track_leads/lead_distribution_report.rst @@ -0,0 +1,195 @@ +======================== +Lead distribution report +======================== + +A *lead distribution report* can be used to see if active leads are being assigned equitably +across sales members. It can also be used to view the distribution of good or :doc:`quality leads +`, and see how frequently each salesperson is receiving (and keeping) leads. + +Lead distribution reports can be run each week to help keep salespeople on track, while +providing them with ample good leads. These reports can also be used to see whether sales members +are staying productive, if good leads are being lost too often by one salesperson, and what +percentage of good leads are being retained overall. + +Create lead distribution reports +================================ + +To create a lead distribution report, first navigate to :menuselection:`CRM app --> Reporting --> +Pipeline`, which reveals the :guilabel:`Pipeline Analysis` dashboard. + +Remove all the default filters in the search bar at the top of the page. Doing so +displays data related to *all* leads. + +:ref:`Custom filters ` can now be added by clicking the :icon:`fa-caret-down` +:guilabel:`(down caret)` icon, to the right of the search bar, to reveal a drop-down menu of search +and filter options. + +Three columns are displayed: :ref:`Filters `, :ref:`Group By `, and +:ref:`Favorites `. To begin, navigate to the bottom of the :guilabel:`Filters` +column, and click :guilabel:`Add Custom Filter`. This opens an :guilabel:`Add Custom Filter` pop-up +window, where the essential filters can be added one at a time. + +.. _crm/track_leads/essential-filters: + +Essential filters +----------------- + +The following filter conditions are used to create a basic lead distribution report. Together they +gather all leads created within a certain timespan that have an associated contact method and have +been assigned to a sales team. + +Lead creation date +~~~~~~~~~~~~~~~~~~ + +Click the first field, under :guilabel:`Match any of the following rules:`, that has the value +:guilabel:`Country` in it. In the popover that appears, type `Created on` in the search bar, or +scroll to search through the list to locate and select it. + +Then, in the second field of that row, select :guilabel:`>=` from the drop-down menu. This operator +**only** includes values greater than (or equal to) the value in the third, rightmost field. + +The third field on the :guilabel:`Add Custom Filter` pop-up window should contain the earliest date +leads are selected from. + +For example, setting `01/01/2024 00:00:00` only includes leads created from, and including, the +first day of 2024. + +.. image:: lead_distribution_report/created-on.png + :align: center + :alt: Add a Created On rule for the start of the year onward. + +.. _crm/track_leads/sales-team: + +Sales team +~~~~~~~~~~ + +Click :guilabel:`New rule` to add another row to the form, and choose :guilabel:`Sales Team` for +this rule's parameter. Then, click the second field of the new rule, and select :guilabel:`contains` +from the drop-down menu. Selecting this operator filters for any records that contain the words in +the third, rightmost field. + +.. tip:: + For certain pre-determined, limited choices like a sales team, the :guilabel:`is in` operator + helps make for an easier and more accurate selection, via a drop-down menu in the third field, + instead of risking a typo or incorrect value in the text box field that accompanies the + :guilabel:`contains` operator. + +In this third field, enter the name of the desired sales team(s) that are to be included in the +report. It is important for all :guilabel:`contains` argument values to be specific enough and +spelled correctly as they exist in Odoo, otherwise this risks returning multiple (or zero) values. + +.. image:: lead_distribution_report/sales-team-location.png + :align: center + :alt: Use Sales Team to filter the location the lead is associated with. + +.. important:: + By adding more than one rule to the form, a new option emerges at the top of the pop-up window + above all the filters, to specify whether :guilabel:`any` :icon:`fa-caret-down` or + :guilabel:`all` :icon:`fa-caret-down` of the conditions should match. This distinction is + important to set correctly, as it impacts the driving logic of how the filters return data. + +Click the default :guilabel:`any` :icon:`fa-caret-down` menu item and be sure the :guilabel:`all` +:icon:`fa-caret-down` option is chosen instead. This setting will **only** show records that match +*all* the rules contained inside the form. + +.. _crm/track_leads/phone-number: + +Contact method +~~~~~~~~~~~~~~ + +.. note:: + The instruction below is not necessary, however, it's highly recommended to add a set contact + value to the report's search criteria. A lot of spam, duplicate, or low quality leads can easily + be screened out of the report simply by adding either a set :guilabel:`Phone` or + :guilabel:`Email` rule. + +Add another :guilabel:`New rule` to the form and set the first field to the first field to +:guilabel:`Phone`. Then, select :guilabel:`is set` from the drop-down menu in the second field. +Selecting this operator **only** filters for records that have a phone number associated with the +lead. + +Alternatively (or in addition to the above rule), click :guilabel:`New rule` and set the first field +to :guilabel:`Email`. Then, select :guilabel:`is set` from the drop-down menu in the second field. + +These rules add only leads with an associated contact method to the report. + +.. _crm/track_leads/active-status: + +Active status +~~~~~~~~~~~~~ + +Click the :icon:`fa-sitemap` :guilabel:`(Add branch)` icon to the right of the `Phone is set` line, +to add a new rule that branches from the rules above. + +Two horizontal sets of fields appear below a line showing :guilabel:`any` :icon:`fa-caret-down` +:guilabel:`of:` option. This setting filters for records that match **any** of the rules contained +inside. This uses the same logic as an OR (`|`) logical operator. + +Set the first field to :guilabel:`Active`. Then, select :guilabel:`is set` in the next field. + +Next, click the :icon:`fa-plus` :guilabel:`(Add New Rule)` button next to :guilabel:`Active is set` +to create a new line of fields beneath it. + +Set the first field to :guilabel:`Active`. Then, select :guilabel:`is not set` in the next field. + +.. image:: lead_distribution_report/active-set.png + :align: center + :alt: Use Active to include active status in the report. + +This rule adds the activity status of the lead to the report. + +.. note:: + Active status is an important filter to include when creating a lead distribution report because + it includes **all** leads regardless of won/lost or active/inactive status in the report. This + provides a comprehensive view of all the leads assigned to each sales member. + +Group by +~~~~~~~~ + +Once all filters are set, click the :guilabel:`Add` button to add these filters to the search bar. +To have the report grouped appropriately, click the :icon:`fa-caret-down` :guilabel:`(down caret)` +icon, to the right of the search bar, and click :guilabel:`Salesperson` in the :guilabel:`Group +By` section. All results are now grouped by the salesperson assigned to each lead. + +Once the rules for the filter are set, click the purple :guilabel:`Confirm` button at the bottom of +the pop-up menu to save the custom filter and close the pop-up menu. + +The :guilabel:`Pipeline Analysis` dashboard is now displayed again with each filter rule in the +search bar. + +Click the :icon:`fa-area-chart` :guilabel:`(Graph)` icon, to the right of the search bar, to view +the report as a bar chart. Alternatively, click the :icon:`oi-view-list` :guilabel:`(List)` icon to +view leads in a grouped list. + +.. tip:: + To save the filter so it can easily be re-applied, click the :guilabel:`Save current search` + button in the :guilabel:`Favorites` section of the search bar drop-down menu. + + Next, type a name for the filter in the text box below. Check the :guilabel:`Shared` checkbox to + have the filter shared with any user with access to the pipeline. Finally, click the purple + :guilabel:`Save` button below to save the filter. + + The filter will now appear with the name it was given under the :guilabel:`Favorites` section of + the drop-down menu and can be re-applied by clicking on it. + +Filter for quality leads +------------------------ + +The following additional conditions are provided as an example of a *good*, but *not comprehensive*, +set of rules for finding quality leads. These filters should be applied on top of the +:ref:`crm/track_leads/essential-filters` in the order specified to achieve a heavily-detailed +filter. + +- **Referred-by:** Filter for referrals, such as by appointment or sales member. +- **Source:** Filter for specific source UTMs, such as Facebook or LinkedIn. +- **Notes:** Filter for internal notes. +- **Tags:** Filter for categorical tags. +- **Email:** Filter for specific email domains, such as gmail.com or yahoo.com. +- **Salesperson:** Filter for leads associated with certain sales members. + +These conditions can be added, removed, or modified to best fit the desired information in the +report. + +.. seealso:: + - :ref:`quality_leads_report/add-quality-rules` + - :doc:`../../../essentials/search` diff --git a/content/applications/sales/crm/track_leads/lead_distribution_report/active-set.png b/content/applications/sales/crm/track_leads/lead_distribution_report/active-set.png new file mode 100644 index 0000000000000000000000000000000000000000..0063bdf7b11ebaaa75fd4b115c2de107c3cb3650 GIT binary patch literal 3553 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