Slow moving stocks may lead to issues like expiry (in case of food items), obsolescence, and high holding costs.
That's why you need the Inventory Aging Report. It
helps you maintain a healthy business by tracking how quickly your inventory moves.
It identifies the slow and fast moving inventory, and also lets you plan your warehouse capacity.
This report is done over a SQL query based on Advanced Analytics for Zoho Finance data. You can modify the query to suit your data structure.
Follow the below steps to do this.
-
Query Table - Stock In Hand
-
Query Table - Inventory Age Tier
-
Pivot View - Inventory Aging Report
Query Table -
Stock In Hand
This tracks the stock in hand by joining different tables.
|
SELECT
/*sum of Quantity On Hand from below query*/
T1.*
SUM
(T1.
Quantity
) OVER(
PARTITION
BY T1.
"Product ID"
, T1.
"Warehouse ID"
)
AS 'Quantity On Hand',
/*calculate cumulative sum of items count in reverse order until it's equal or more that Quantity On Hand*/
sum(if
(
T1
.
"In/Out"
=
'In'
,
T1
.
Quantity
,
0
)) OVER(PARTITION
BY
T1 .
"Product ID"
, T1.
"Warehouse ID"
ORDER BY
T1.
"Transaction Date"
DESC
)
"Reverse Cumulative Total"
/*stock in hand from Stock In Flow*/
FROM (SELECT
'In'
"In/Out",
"Transaction Date",
"Warehouse ID",
"Product ID",
sum
(
"Quantity In") "Quantity",
"Price (BCY)" "Purchase Price"
FROM
"Stock In Flow Table"
WHERE
"Stock In Flow Table"
.
"EntityType"
!=
'transfer_order'
GROUP BY
1,
2,
3,
4,
6
UNION ALL
/*stock in hand from Stock Out Flow*/
SELECT
'Out',
"Transaction Date",
"Warehouse ID",
"Product ID",
-1
*
sum
(
"Quantity Out"
),
null
FROM
"Stock Out Flow Table"
WHERE
"Stock Out Flow Table"
.
"EntityType"
!=
'transfer_order'
GROUP BY
1,
2,
3,
4
UNION ALL
/*stock in hand from Transfer Order*/
SELECT
'
In',
"Date",
"Warehouse ID",
"Product ID",
sum(if(
"Transfer Order".
"Status"
=
'transferred'
,
"Transferred Quantity"
,
0
)),
if
(
"Transfer Order"
.
"Status"
=
'transferred'
,
"Cost Price"
,
null
)
FROM
"Transfer Order"
LEFT JOIN
"Transfer Order Items"
ON
"Transfer Order"
.
"Transfer Order ID"
=
"Transfer Order Items"
.
"Transfer Order ID"
WHERE
"Status" not in ( 'draft' )
GROUP BY
1,
2,
3,
4,
6
UNION ALL
/*stock in hand from Transfer Order Item*/
SELECT
'Out',
"Date",
"Warehouse ID",
"Product ID",
sum
(
"Transferred Quantity"),
"Cost Price"
FROM
"Transfer Order"
LEFT JOIN
"Transfer Order Items"
ON
"Transfer Order"
.
"Transfer Order ID"
=
"Transfer Order Items".
"Transfer Order ID"
WHERE "Status" not in ( 'draft' )
GROUP BY
1,
2,
3,
4,
6
) AS T1
|
Query Table - Inventory Age Tier
The below query tracks the age of each inventory and bucket them into the following groups.
-
0-5 days old
-
6-10 days old
-
11-15 days old
-
16-20 days old
-
older than 20 days
|
SELECT
"In/Out",
"Product ID",
"Quantity",
"Quantity On Hand",
"Reverse Cumulative Total",
"Transaction Date",
"Warehouse ID",
"Purchase Price",
/*identify the Transaction Date by comparing Reverse Cumulative Total and Quantity On Hand */
if(min(if(
"Reverse Cumulative Total" - "Quantity On Hand"
>=
0
,
"Reverse Cumulative Total" -"Quantity On Hand "
,
99999999999
)) OVER ( PARTITION
BY
"Product ID" , "Warehouse ID"
ORDER
BY
"Transaction Date"
DESC
) !=
99999999999
, (
"Quantity On Hand" -("Reverse Cumulative Total" -"Quantity" )), "Quantity" ) "Final Qty" ,
if(min(if(
"Reverse Cumulative Total" - "Quantity On Hand"
>=
0
,
"Reverse Cumulative Total" -"Quantity On Hand"
,
99999999999
)) OVER ( PARTITION
BY
"Product ID" , "Warehouse ID"
ORDER
BY
"Transaction Date"
DESC
) !=
99999999999
, (
"Quantity On Hand" -("Reverse Cumulative Total" -"Quantity" )) * "Purchase Price" , "Quantity" * "Purchase Price"
)
'Inventory valuation',
/*classify into different age tier*/
if
( Datediff (
current_date(),
"Transaction Date"
) >=
0
AND
Datediff (
current_date()
,
"Transaction Date"
) <=
5
,
'0-5 days', if(
Datediff (
current_date()
,
"Transaction Date"
) >=
6
AND
Datediff (
current_date()
,
"Transaction Date"
) <=
10
, '
6-10 days', if
( Datediff (
current_date()
,
"Transaction Date"
) >=
11
AND
Datediff (
current_date()
,
"Transaction Date"
) <=
15
, '
11- 15 days', if(
Datediff (
current_date()
,
"Transaction Date"
) >=
16
AND
Datediff (current_date(), "Transaction Date" ) <= 21 ,
'16-20 days', 'greater than 20 days')))) 'Age tier'
FROM
"Stock In Hand"
WHERE
"In/Out" = 'In'
AND
"Quantity On Hand" - ("Reverse Cumulative Total" -"Quantity" )
>
0
|
Join Data using Lookup Column
Join the Inventory Aging Query table with the Warehouse and Items tables using the following
lookup columns.
-
Warehouse ID
from Inventory Age Tier
query table -
Warehouse ID
from
Warehouse
table
-
Items ID
from Inventory Age Tier
query table -
Items ID
from
Items
table
Pivot View - Inventory Aging Report
Now you can create the inventory aging pivot over the Inventory Age Tier query table.
Follow the below steps to do so.
-
Create a new pivot over the Inventory Age Tier query table.
-
Drop the columns as follows.
-
Column
-
Age tier
from
Inventory Age Tier
query table with
Actual.
-
Row -
Warehouse Name
from
Warehouse
table and
Item Name
from
Items
table with
Actual.
-
Data
-
Purchased Quantity from Inventory Age Tier
query table with
Sum.
-
The
Click Here to Generate Pivot
button allows you to generate the report.
-
Hide the totals by clicking
Show/Hide
for all Totals.
-
Click Sort > Custom Sort for Age Tier column to arrange the age tier.
-
Now apply the required Theme.
-
Your final Inventory aging report is ready.

You can explore the solution by copying the workspace from the below link.
https://analytics.zoho.com/workspace/19601000018963001
Recent Topics
Enhancement in Role and Profile mapping of agents in Sandbox
Hello everyone! We have brought in a modification in the way users are mapped to a particular role and profile in Sandbox. What has changed? When agents are copied from production to Sandbox: If a user's current role and profile is available in Sandbox,
The reason I switched away from Zoho Notebook
My main reason for switching to Zoho was driven by three core principles: moving away from US-based products, keeping my data within India as much as possible, and supporting Indian companies. With that intent, I’ve been actively de-Googling my digital
Decimal places settings for exchange rates
Hello, We are facing issues while matching vendor payments with banking feeds. As we often import products/services exchange rate comes into play. Currently, ZOHO allows only six digits for decimal places. We feel that conversions like JPY to INR require
Zoho removed ability to see all Scheduled Reports!
If you are not the owner of a scheduled report, Zoho recently removed the capability to see each scheduled report. As an admin who relies on seeing all scheduled reports being sent, this is a terrible update. Now I cannot see ANY scheduled reports...even the ones I am being sent!! This should be a setting for admins to control. This is a bad update.
Automate Backups
This is a feature request. Consider adding an auto backup feature. Where when you turn it on, it will auto backup on the 15-day schedule. For additional consideration, allow for the export of module data via API calls. Thank you for your consideration.
GCLID and Zoho Bookings
Is there anyway to embed a Zoho Bookings signup on a landing page and pass the GCLID information? More specifically, can this be done using auto-tagging and not manual tagging the GCLID? I know Zappier has an integration to do this but is there a better
Merge Items
Is there a work around for merging items? We currently have three names for one item, all have had a transaction associated so there is no deleting (just deactivating, which doesn't really help. It still appears so people are continuing to use it). I also can't assign inventory tracking to items used in past transactions, which I don't understand, this is an important feature moving forward.. It would be nice to merge into one item and be able to track inventory. Let me know if this is possible.
Create PO from an invoice
We are a hardware and software sales company which receives orders over the internet. We drop ship most of our products from a warehouse outside of our company. Our orders get sync'd into Zoho from our store via onesaas as invoices. It would be great
Blueprint or Validation Rules for Invoices in Zoho Books
Can I implement Blueprint or Validation Rules for Invoices in Zoho Books? Example, use case could be, Agent confirms from client that payment is done, but bank only syncs transactions tomorrow. in this case, Agent can update invoice status to done, and
Resetting auto-number on new year
Hi everyone! We have an auto-number with prefix "D{YYYY}-", it generates numbers like D2025-1, D2025-2, etc... How can we have it auto-reset at the beginning of the next year, so that it goes to D2026-1? Thanks!
The Social Wall: December 2025
Hello everyone! As we wrap up the final edition of the Social Wall for 2025, it’s the perfect time to look at what went live during December. QR code generator From paying for coffee to scanning metro tickets, QR codes are everywhere and have made everyday
Custom AI solutions with QuickML for Zoho CRM
Hello everyone, Earlier, we introduced Custom AI Solutions in CRM that let you access QuickML for your custom AI needs. Building on that foundation, we’ve now enabled a deeper integration: QuickML models can be seamlessly integrated into CRM, and surface
Helper Functions and DRY principle
Hello everyone, I believe Deluge should be able to use 'Helper functions' inside the main function. I know I can create different standalones, but this is not helpful and confusing. I don't want 10000 different standalones, and I dont want to have to
Introducing workflow automation for the Products module
Greetings, I hope all of you are doing well. We're happy to announce a few recent enhancements we've made to Bigin's Products module. The Products module in Bigin now supports Workflows, enabling you to automate routine actions. Along with this update,
Zia Formula Expression Generator for Formula fields
Hello everyone! Formula fields are super useful when you want your CRM to calculate things for you but writing the expression is where most people slow down. You know what you want, but you’re not fully sure which function to use, how the syntax should
Issue with Zoho Creator Form Full-Screen View in CRM Related List Integration
Hi Team, We have created a custom application in Zoho Creator and integrated it into Zoho CRM as a related list under the Vendor module, which we have renamed as Consignors. Within the Creator application, there is a form named “Pickup Request.” Inside
Wrapping up 2025 on a high note: CRM Release Highlights of the year
Dear Customers, 2025 was an eventful year for us at Zoho CRM. We’ve had releases of all sizes and impact, and we are excited to look back, break it down, and rediscover them with you! Before we rewind—we’d like to take a minute and sincerely thank you
Customer Parent Account or Sub-Customer Account
Some of clients as they have 50 to 300 branches, they required separate account statement with outlet name and number; which means we have to open new account for each branch individually. However, the main issue is that, when they make a payment, they
Restrict Users access to login into CRM?
I’m wanting my employees to be able to utilize the Zoho CRM Lookup field within Zoho Forms. For them to use lookup field in Zoho Forms it is my understanding that they need to be licensed for Forms and the CRM. However, I don’t want them to be able to
Unknown table or alias 'A1'
I would like to create a subquery but i am getting the following error: Unknown table or alias 'A1' used in select query. This is the sql statement: SELECT A1.active_paying_customers, A1.active_trial_customers, A1.new_paying_signup, date(A1.date_active_customers),
in the Zoho creator i have address field based the customer lookup im selecting the addresss , some times the customer address getting as null i want to show as blank
in the Zoho creator i have address field based the customer lookup im selecting the addresss , some times the customer address getting as null ,i want to show as blank instead of showing null. input.Billing_Address.address_line_1 = ifNUll(input.Customers_Name.Address.address_line_1,"");
Question about upgrade and storage space Zoho Notebook
After upgarding my Zoho Notebook plan, I am running into the following issue. I just upgraded from a free Zoho Notebook subscription to Pro Lite after I got a notification in my Window Zoho Notebook desktop app saying that I had run out of space. However,
Printing to a brother label maker
I see allot of really old unanswered posts asking how to print to a label maker from a zoho creator app. Has their been any progress on providing the capability to create a customized height & width page or print template or whatever to print labels?
Sync desktop folders instantly with WorkDrive TrueSync (Beta)
Keeping your important files backed up and accessible has never been easier! With WorkDrive desktop app (TrueSync), you can now automatically sync specific desktop folders to WorkDrive Web, ensuring seamless, real-time updates across devices. Important:
Track online, in-office, and client location meetings separately with the new meeting venue option
Hello everyone! We’re excited to announce meeting enhancements in Zoho CRM that bring more clarity and structure to how meetings are categorized. You can now specify the meeting venue to clearly indicate whether a meeting is being held online, at the
Announcing new features in Trident for Mac (1.32.0)
Hello everyone! We’re excited to introduce the latest updates to Trident, which are designed to reinforce email security and protect your inbox from evolving threats. Let’s take a quick look at what’s new. Deliver quarantined emails. Organization admins
Marketing Tip #5: Improve store speed with optimized images
Slow-loading websites can turn visitors away. One of the biggest culprits? Large, uncompressed images. By optimizing your images, your store loads faster and creates a smoother shopping experience leading to higher sales. It also indirectly improves SEO.
SMS to customers from within Bigin
Hi All, Is there anyone else crying out for Bigin SMS capability to send an SMS to customers directly from the Bigin interface? We have inbuilt telephony already with call recordings which works well. What's lacking is the ability to send and receive
Admins cannot see each others' Scheduled Reports?!
Very frustrating that as an admin I cannot see what my reports my fellow admins have created and scheduled. After asking about this on the help chat, I was told the issue is trust and security. By giving someone Admin status, it means we trust them with those responsibilities. Please change this, it is not a good process to have to bother other users to change a report or change users within a report.
Writer update results in BitDefender blocking it as malware
After updating Writer to latest update, Bitdefender blocked the app and writer no longer runs.
Missing Import Options
Hello, do I miss something or is there no space import option inside of this application? In ClickUp, you can import from every common application. We don't want to go through every page and export them one by one. That wastes time. We want to centralize
Zoho CRM Portal Field Level Permission Issue
Hi Support Team, I am using the Zoho CRM Portal and configuring field-level editing permissions. However, we are unable to restrict portal users from editing certain fields. We have created a portal and provided View and Edit (Shared Only) access for
Custom Fonts in Zoho CRM Template Builder
Hi, I am currently creating a new template for our quotes using the Zoho CRM template builder. However, I noticed that there is no option to add custom fonts to the template builder. It would greatly enhance the flexibility and branding capabilities if
Collaboration with customers made easy with Zoom Meeting and Zoho Desk integration
Hello everyone! We are happy to announce that you can now integrate your Zoho Desk account with Zoom Meeting. The integration bridges the gap between digital communication and human connection, empowering teams to deliver timely support when it matters
CRM Canvas - Upload Attachments
I am in the process of changing my screens to Canvas. On one screen, I have tabs with related lists, one of which is attachments. There doesn't appear to be a way to upload documents though. Am I missing something really obvious? Does anyone have
TrueSync regularly filling up my local disk
Seems that WorkDrive's TrueSync randomly starts filling up my local hard drive space. None of the folders have been set as "Make Offline" but still it seems to randomly start making file offline. The settings of the app is so minimal and is of no real
Kaizen #194 : Trigger Client Script via Custom buttons
Hello everyone! Welcome back to another interesting and useful Kaizen post. We know that Client Scripts can be triggered with Canvas buttons and we discussed this with a use case in Kaizen#180. Today, let us discuss how to trigger Client Script when a
Picklist field shows "none" as default
Hello, Is there an option to avoid showing "none" as the default value in a picklist field? I also don't want to see any option displayed. My expectation is to have a blank bar, and then when I display the drop-down list, I can choose whichever I wa
Stage-probability mapping feature in custom module
Hi, I'm building a custom module for manage projects. I would like to implement the stage-probability feature that Potentials has. Is this possible?
Field Description is very small
Hello, The field Description in the activity is very small. Why don't try open a new window, or a bigger popup, or increase the width of the "popup". Example:
Next Page