[IMP] Purchase: update reporting

closes odoo/documentation#10709

X-original-commit: 0e428e66d9
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
This commit is contained in:
John Holton (hojo) 2024-07-26 22:00:27 +00:00
parent 46e66e0d8b
commit 189d942f06
9 changed files with 120 additions and 96 deletions

View File

@ -1,122 +1,146 @@
=========================================
Analyze the performance of your purchases
=========================================
========================
Purchase Analysis report
========================
If your company regularly purchases products, you have several reasons to track and analyze your
performance. The insights gathered can help you to better forecast and plan your future orders. For
example, you can assess if your business is dependent on particular vendors, and the data can help
you negotiate discounts on prices.
.. |PO| replace:: :abbr:`PO (purchase order)`
.. |POs| replace:: :abbr:`POs (purchase orders)`
Generate customized reports
===========================
The *Purchase Analysis* report provides statistics about products purchased using Odoo's
**Purchase** app. This data is useful for gaining a deeper understanding of key metrics related to
purchase orders (POs), including the quantity of products ordered and received, the amount of time
it takes to receive purchased products, and more.
Go to *Reporting* to access the purchase analysis. Simply by accessing the reporting dashboard, you
can get a quick overview of your actual performance. By default, the reporting dashboard displays a
line chart presenting the untaxed amount of your purchase orders per day, and below it, key metrics
and a pivot table.
To open the Purchase Analysis report, navigate to :menuselection:`Purchase app --> Reporting -->
Purchase`.
.. image:: analyze/analyze-reporting-dashboard.png
:align: center
:alt: Reporting dashboard in Odoo Purchase
.. important::
The :guilabel:`Purchase Analysis` report is one of many reports available across the Odoo app
suite. This documentation only covers the measures specific to the :guilabel:`Purchase Analysis`
report, along with a few use case examples.
While the data initially presented is useful, there are several tools and features you can use to
get even more insights on your purchases.
For a full overview of the basic features available in most Odoo reports, see the documentation
on :doc:`reporting essentials <../../../essentials/reporting>`.
Use filters to select the data you need
---------------------------------------
Measures
========
Odoo offers several default filters you can use and combine by clicking on *Filters*. When you
select one or several filters, Odoo looks for all the orders that match at least one of the filters
you have chosen and populates the chart, key metrics, and pivot table with the data. The
pre-configured filters are:
*Measures* refer to the various datasets that can be displayed on the :guilabel:`Purchase Analysis`
report, with each dataset representing a key statistic about |POs| or products. To choose a measure,
click the :guilabel:`Measures` :icon:`fa-caret-down` button, and select one of the options from the
drop-down menu:
#. All *Requests for Quotation*
#. All *Purchase Orders*, except cancelled ones
#. *Confirmation Date Last Year* includes all orders that were confirmed the previous year,
cancelled purchase orders included
#. *Order Date* includes all orders - request for quotations and purchases orders (cancelled ones
included) - depending on their date of creation
#. *Confirmation Date* includes all confirmed orders, cancelled ones included, depending on their
date of confirmation
.. note::
When you have to select a period, you can use multiple years, and, with at least one year
selected, multiple quarters and the three most recent months.
- :guilabel:`# of Lines`: The number of |PO| order lines, across all |POs|.
- :guilabel:`Average Cost`: The average cost of |POs|.
- :guilabel:`Days to Confirm`: The number of days it takes to confirm a |PO|.
- :guilabel:`Days to Receive`: The number of days it takes to receive the products in a |PO|.
- :guilabel:`Gross Weight`: The total weight of purchased products.
- :guilabel:`Qty Billed`: The quantity of a product (or products) for which the vendor has already
been billed.
- :guilabel:`Qty Ordered`: The quantity of a product (or products) ordered.
- :guilabel:`Qty Received`: The quantity of an ordered product (or products) received.
- :guilabel:`Qty to be Billed`: The quantity of an ordered product (or products) for which the
vendor has yet to be billed.
- :guilabel:`Total`: The total amount spent, including tax.
- :guilabel:`Untaxed Total`: The total amount spent, excluding tax. This measure is selected by
default.
- :guilabel:`Volume`: The total volume of ordered products, for products which are measured by
volume.
- :guilabel:`Count`: The total count of |POs|.
.. tip::
If you use the *Order Date* or *Confirmation Date* filters, the *Comparison* feature appears next
to *Filters*. It enables you to compare the period you filtered with the previous one.
Only one measure can be selected at a time when one of the :icon:`fa-area-chart`
:guilabel:`(graph view)` options is enabled. However, multiple measures, and varying group-by
criteria (on the x and y axes), can be selected when using the :icon:`oi-view-pivot`
:guilabel:`(pivot table)`.
.. image:: analyze/analyze-filters.png
:align: center
:alt: Reporting filters in Odoo Purchase
.. _purchase/purchase-analysis-example:
Add custom filters
~~~~~~~~~~~~~~~~~~
Use case: determine days to receive products from each vendor
=============================================================
Thanks to the 31 filtering options to choose from, the possibilities of your customizing your
dataset are almost limitless. Go to :menuselection:`Filters --> Add Custom Filter`, specify the
condition the filtering option should meet (e.g. *is equal to*, *contains*, etc.), and click on
*Apply*. If you want to select orders matching several conditions simultaneously (*and* operator),
repeat the process to add another custom filter. If you want to use the *or* operator, don't
click on *Apply*, and click on *Add a condition* instead. Once you have added all the desired
filtering options, click on *Apply*.
One possible use case for the :guilabel:`Purchase Analysis` report is determining how long each
vendor takes to deliver purchased items. This allows companies to make better informed decisions
about which vendors they want to purchase from.
.. image:: analyze/analyze-custom-filter.png
:align: center
:alt: Custom reporting filter in Odoo Purchase
.. example::
A local bike shop, *Bike Haus*, sells high-quality unicycles, bicycles, tricycles, and all the
accessories needed to ride and maintain them. They purchase their inventory from a few different
vendors, and then sell those products on to customers through their storefront.
.. tip::
To avoid having to recreate custom filters every time, save them by clicking on
:menuselection:`Favorites --> Save current search --> Save`. The customized search filter can
then be accessed by clicking on *Favorites* or can even be set as the default filter when you
open the reporting dashboard.
Recently, Bike Haus has decided to have their purchasing manager, David, look into how long it
has taken each of their vendors to deliver the items they've purchased during the current year,
2024.
Measure exactly what you need
-----------------------------
David starts by navigating to :menuselection:`Purchase app --> Reporting --> Purchase`, and
selecting the :icon:`fa-bar-chart` (bar chart) graph type at the top of the report.
Before selecting what you want to measure, you need to decide whether you prefer using the graph
view or the pivot view. By default, the dashboard presents both views. However, the measures you
select won't be applied to both views. You can access each view separately by clicking on the icons
at the top right of the dashboard.
Next, he clicks the :icon:`fa-caret-down` :guilabel:`(toggle)` button on the right of the search
bar to open its drop-down menu. In the :guilabel:`Confirmation Date` filter section, he makes
sure that **only** the :guilabel:`2024` filter is enabled. Then, he selects the
:guilabel:`Vendor` option in the :guilabel:`Group By` section, before clicking away from the
drop-down menu to close it.
.. image:: analyze/analyze-switch-view.png
:align: center
:alt: Switch reporting view in Odoo Purchase
Finally, David clicks on the :guilabel:`Measures` :icon:`fa-caret-down` drop-down menu, and
selects the :guilabel:`Days to Receive` option.
Visualize your data
~~~~~~~~~~~~~~~~~~~
With all of these options enabled, the :guilabel:`Purchase Analysis` report shows a bar chart,
with one bar for each vendor, representing the average number of days it takes to receive
products purchased from the vendor.
You can transform the main graph in just a click by selecting one of the three charts: bar, line or
pie. Fourteen different measures are available, but you can only use one at a time. However, you can
group the measure using one or several of the 19 *Groups*.
Using this data, David can see that it takes Bike Friends over 4.5 days, on average, to deliver
purchased products. This is more than four times the amount of time it takes any other vendor.
.. image:: analyze/analyze-graph-view.png
:align: center
:alt: Reporting graph view in Odoo Purchase
Based on these findings, David makes the decision to reduce the quantity of products purchased
from Bike Friends.
For bar and line charts, the selected measure is your y-axis, and the first group you select is used
to create the x-axis. Adding more group adds additional lines (line chart) or transforms your bar
chart into a stacked bar chart. For pie charts, the more groups you select, the more slices are
displayed.
.. image:: analyze/dtr.png
:align: center
:alt: The Purchase report, showing the average days to receive products from vendors.
Explore your data
~~~~~~~~~~~~~~~~~
Use case: compare vendor POs for two time periods
=================================================
The pivot table view enables you to explore your data in great detail. Unlike the graph view, the
pivot table enables you to add several measures at the same time. By clicking on *Measures* or on
the **+** sign in the *Total* column, you can add as many as you want, each assigned to a new
column. By clicking on the **+** sign in the *Total* row, you can add *Groups*. If you click on a
group's **+** sign, you can add a sub-group, and so on.
Another use for the :guilabel:`Purchase Analysis` report is to compare key statistics about |POs|
for two different time periods, for a specific vendor. By doing so, it is easy to understand how
purchases from the vendor have increased or decreased.
.. image:: analyze/analyze-pivot-view.png
:align: center
:alt: Pivot table view in Odoo Purchase
.. example::
Following the :ref:`previous example <purchase/purchase-analysis-example>`, it has been one month
since Bike Haus decided to reduce the quantity of products purchased from Bike Friends, one of
their retailers. Bike Haus' purchasing manager, David, wants to understand the impact this
decision has had on the amount of money they have spent on Bike Friends products.
.. tip::
You can insert your pivot table's data directly in the Spreadsheet app or export it as an Excel
file.
David starts by navigating to :menuselection:`Purchase app --> Reporting --> Purchase`. Then, he
selects the :icon:`oi-view-pivot` :guilabel:`(pivot table)` option at the top of the screen.
In the search bar, he types `Bike Friends`, and clicks :guilabel:`Enter`, so the report only
shows data for purchases from Bike Friends.
Then, David clicks the :icon:`fa-caret-down` :guilabel:`(toggle)` button on the right of the
search bar to open its drop-down menu. In the :guilabel:`Confirmation Date` field, he leaves the
:guilabel:`June` and :guilabel:`2024` filters enabled. He also selects :guilabel:`Confirmation
Date: Previous Period` in the :guilabel:`Comparison` section, before clicking away from the
drop-down menu to close it.
Next, David clicks on the :guilabel:`Measures` :icon:`fa-caret-down` drop-down menu. He leaves
the :guilabel:`Total` and :guilabel:`Untaxed Total` datasets enabled, and disables the
:guilabel:`Order` and :guilabel:`Count` datasets.
Finally, David clicks the :icon:`fa-minus-square-o` :guilabel:`Total` button above the rows on
the pivot table, and selects the :guilabel:`Product` option.
With all of these options configured, the :guilabel:`Purchase Analysis` report shows a pivot
table comparing purchase data for the current month, June, with the previous month, May.
The pivot table is broken down into two main columns: one for the untaxed total spent, and one
for the taxed total spent. These columns are further broken down into three smaller columns: the
amount spent in May, the amount spent in June, and the variation between the two months,
represented as a percentage.
On the left side of the pivot table, one row is shown for each product purchased from Bike
Friends during June. Using this report, David is able to see that Bike Haus has spent much less
money on products purchased from Bike Friends, compared to the previous month.
.. image:: analyze/comparison.png
:align: center
:alt: The Purchase report, comparing the amount spent at a vendor.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB