Plans & PricingSignup for FreeGet a demo

Recurring Revenue

Telmo Silvaon February 7, 2017
Last updated on August 7, 2025

Recurring revenue over a long period of time is difficult to track mostly because it is registered only once at a single point in time but that amount needs to be amortized over a certain period of time (the length of the subscription or service) and at some point in time removed from the calculation, unless it is renewed.

In ClicData we can calculate recurring revenue easier than writing Excel macros. Although everyone’s data is different, the basic steps are the same.

Firstly, you will need a table of your invoices or billed items as follows:

Account ID – A unique ID identifying the account
Date – best if it is a date but always on the 1st of each month even if it took place on any other day.
Amount paid – the full amount of the subscription regardless.
Period – the number of months that the amount above covers.

Note:  You may need to add currency and other items if you deal in multiple currency situations. Also if your invoices have multiple items such as subscription amounts and also credits or services, make sure the amount above is just for the subscription.

Now in ClicData we will create an end date for the above subscription and add a few more columns using transformation.

End Date – Here we will add the number of Periods to the Date to get the end date.  For example, if our start date was March 1, 2016 and it was a yearly subscription (period=12) we calculate the EndDate to be February 1, 2017.
Amount Per Month – Amount / Period – simple right?
Type – This transformation (using LAG) will basically calculate for you if this is a new or a recurring amount.

Alright, now you are ready for the final phase, we need to defer the amounts where the period is greater than 1 until the End Date.

So create a table using the custom table editor with a date for each month start.

Create a view on this table and add a transform to aggregate all invoices where the period date falls between the start and end date.

Recurring revenue reporting is one of the hardest items to put on a dashboard. With ClicData we will continuously improve our functionality to make the process easier and simpler.

Don’t have time to do it yourself? Get in touch with our Professional Services team and they can build it out for you.

Table of Contents

Share this Blog

Other Blogs

AI Analytics for SaaS Platforms: How to Add Intelligence Without Building It From Scratch

Give a competent engineering team a week and they'll have something working. A GPT endpoint wired up, a charting library on the front end, a handful of SQL queries hitting…

From BI to AI Analytics: What the Transition Actually Looks Like in Practice

In most mid-market companies, the BI half of the picture is the part that's settled: the dashboards refresh overnight, the Monday reports land in inboxes, and there's a tidy stack…

ABC Analysis in Inventory Management: How to Classify Your SKUs and Manage by Impact

You're managing 400 SKUs. You treat every product the same, same reorder triggers, same attention, same safety stock logic. Then one of your top-10 revenue products runs out on a…
All articles
We use cookies.
We use necessary cookies to make our site work. We'd also like to use optional cookies which help us improve our the site as well as for statistical analytic and advertising purposes. We won't set these optional cookies on your device if you do not consent to them. To learn more, please view our cookie notice.

If you decline, your information won't be tracked when you visit this website. A single cookie will be used in your browser to remember, your preference not to be tracked.
Essential Cookies
Required for website functionality such as our sales chat, forms, and navigation. 
Functional & Analytics Cookies
Helps us understand where our visitors are coming from by collecting anonymous usage data.
Advertising & Tracking Cookies
Used to deliver relevant ads and measure advertising performance across platforms like Google, Facebook, and LinkedIn.
Reject AllAccept