[IMP] Purchase: update reporting

closes odoo/documentation#10500

X-original-commit: be3a6f6f54
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 f4bc361d04
commit 0e428e66d9
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 .. |PO| replace:: :abbr:`PO (purchase order)`
performance. The insights gathered can help you to better forecast and plan your future orders. For .. |POs| replace:: :abbr:`POs (purchase orders)`
example, you can assess if your business is dependent on particular vendors, and the data can help
you negotiate discounts on prices.
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 To open the Purchase Analysis report, navigate to :menuselection:`Purchase app --> Reporting -->
can get a quick overview of your actual performance. By default, the reporting dashboard displays a Purchase`.
line chart presenting the untaxed amount of your purchase orders per day, and below it, key metrics
and a pivot table.
.. image:: analyze/analyze-reporting-dashboard.png .. important::
:align: center The :guilabel:`Purchase Analysis` report is one of many reports available across the Odoo app
:alt: Reporting dashboard in Odoo Purchase 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 For a full overview of the basic features available in most Odoo reports, see the documentation
get even more insights on your purchases. 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 *Measures* refer to the various datasets that can be displayed on the :guilabel:`Purchase Analysis`
select one or several filters, Odoo looks for all the orders that match at least one of the filters report, with each dataset representing a key statistic about |POs| or products. To choose a measure,
you have chosen and populates the chart, key metrics, and pivot table with the data. The click the :guilabel:`Measures` :icon:`fa-caret-down` button, and select one of the options from the
pre-configured filters are: drop-down menu:
#. All *Requests for Quotation* - :guilabel:`# of Lines`: The number of |PO| order lines, across all |POs|.
- :guilabel:`Average Cost`: The average cost of |POs|.
#. All *Purchase Orders*, except cancelled ones - :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|.
#. *Confirmation Date Last Year* includes all orders that were confirmed the previous year, - :guilabel:`Gross Weight`: The total weight of purchased products.
cancelled purchase orders included - :guilabel:`Qty Billed`: The quantity of a product (or products) for which the vendor has already
been billed.
#. *Order Date* includes all orders - request for quotations and purchases orders (cancelled ones - :guilabel:`Qty Ordered`: The quantity of a product (or products) ordered.
included) - depending on their date of creation - :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
#. *Confirmation Date* includes all confirmed orders, cancelled ones included, depending on their vendor has yet to be billed.
date of confirmation - :guilabel:`Total`: The total amount spent, including tax.
- :guilabel:`Untaxed Total`: The total amount spent, excluding tax. This measure is selected by
.. note:: default.
When you have to select a period, you can use multiple years, and, with at least one year - :guilabel:`Volume`: The total volume of ordered products, for products which are measured by
selected, multiple quarters and the three most recent months. volume.
- :guilabel:`Count`: The total count of |POs|.
.. tip:: .. tip::
If you use the *Order Date* or *Confirmation Date* filters, the *Comparison* feature appears next Only one measure can be selected at a time when one of the :icon:`fa-area-chart`
to *Filters*. It enables you to compare the period you filtered with the previous one. :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 .. _purchase/purchase-analysis-example:
:align: center
:alt: Reporting filters in Odoo Purchase
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 One possible use case for the :guilabel:`Purchase Analysis` report is determining how long each
dataset are almost limitless. Go to :menuselection:`Filters --> Add Custom Filter`, specify the vendor takes to deliver purchased items. This allows companies to make better informed decisions
condition the filtering option should meet (e.g. *is equal to*, *contains*, etc.), and click on about which vendors they want to purchase from.
*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*.
.. image:: analyze/analyze-custom-filter.png .. example::
:align: center A local bike shop, *Bike Haus*, sells high-quality unicycles, bicycles, tricycles, and all the
:alt: Custom reporting filter in Odoo Purchase 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:: Recently, Bike Haus has decided to have their purchasing manager, David, look into how long it
To avoid having to recreate custom filters every time, save them by clicking on has taken each of their vendors to deliver the items they've purchased during the current year,
:menuselection:`Favorites --> Save current search --> Save`. The customized search filter can 2024.
then be accessed by clicking on *Favorites* or can even be set as the default filter when you
open the reporting dashboard.
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 Next, he clicks the :icon:`fa-caret-down` :guilabel:`(toggle)` button on the right of the search
view or the pivot view. By default, the dashboard presents both views. However, the measures you bar to open its drop-down menu. In the :guilabel:`Confirmation Date` filter section, he makes
select won't be applied to both views. You can access each view separately by clicking on the icons sure that **only** the :guilabel:`2024` filter is enabled. Then, he selects the
at the top right of the dashboard. :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 Finally, David clicks on the :guilabel:`Measures` :icon:`fa-caret-down` drop-down menu, and
:align: center selects the :guilabel:`Days to Receive` option.
:alt: Switch reporting view in Odoo Purchase
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 Using this data, David can see that it takes Bike Friends over 4.5 days, on average, to deliver
pie. Fourteen different measures are available, but you can only use one at a time. However, you can purchased products. This is more than four times the amount of time it takes any other vendor.
group the measure using one or several of the 19 *Groups*.
.. image:: analyze/analyze-graph-view.png Based on these findings, David makes the decision to reduce the quantity of products purchased
:align: center from Bike Friends.
:alt: Reporting graph view in Odoo Purchase
For bar and line charts, the selected measure is your y-axis, and the first group you select is used .. image:: analyze/dtr.png
to create the x-axis. Adding more group adds additional lines (line chart) or transforms your bar :align: center
chart into a stacked bar chart. For pie charts, the more groups you select, the more slices are :alt: The Purchase report, showing the average days to receive products from vendors.
displayed.
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 Another use for the :guilabel:`Purchase Analysis` report is to compare key statistics about |POs|
pivot table enables you to add several measures at the same time. By clicking on *Measures* or on for two different time periods, for a specific vendor. By doing so, it is easy to understand how
the **+** sign in the *Total* column, you can add as many as you want, each assigned to a new purchases from the vendor have increased or decreased.
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.
.. image:: analyze/analyze-pivot-view.png .. example::
:align: center Following the :ref:`previous example <purchase/purchase-analysis-example>`, it has been one month
:alt: Pivot table view in Odoo Purchase 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:: David starts by navigating to :menuselection:`Purchase app --> Reporting --> Purchase`. Then, he
You can insert your pivot table's data directly in the Spreadsheet app or export it as an Excel selects the :icon:`oi-view-pivot` :guilabel:`(pivot table)` option at the top of the screen.
file.
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