Forum Discussion

Finance's avatar
Finance
Icon for Helper I rankHelper I
5 years ago

Revenue allocation and Churn Analyses based on periodic Billing Cycle

We are trying to Build Revenue dashboard derived from Billing Amount and also trying to carry out Revenue Churn Analyses in the same Dashboard.

 

Current Problems

1. we have customer paying (Monthly/Annually/Semi-Annually/Quarterly/Biennially/Triennially/one time/Null (1 month). How to capture and distribute revenue based on billing cycle.  

 

Spoiler
Revenue Distribution =
VAR tmpCalendar = ADDCOLUMNS('Calendar',"Month",MONTH('Calendar'[Date]),"Year",YEAR('Calendar'[Date]),"MonthYear",VALUE(YEAR('Calendar'[Date]) & FORMAT(MONTH('Calendar'[Date]),"0#")))
VAR tmpBilling = ADDCOLUMNS(Revenue,"MonthYearBegin",VALUE(YEAR(Revenue[date_sent_month_year]) & FORMAT(MONTH(Revenue[date_sent_month_year]),"0#")),
"MonthYearEnd",VALUE(YEAR(Revenue[End Date]) & FORMAT(MONTH(Revenue[End Date]),"0#")))
VAR tmpTable =
SELECTCOLUMNS(
FILTER(
GENERATE(
tmpBilling,
SUMMARIZE(tmpCalendar,[Year],[Month],[MonthYear])
),
[MonthYear] >= [MonthYearBegin] &&
[MonthYear] <= [MonthYearEnd]
),
"Customer",'Revenue'[clientid],
"Year",[Year],
"Month",[Month],
"Amount",Revenue[Monthly Amount]
)
RETURN SUMX(tmpTable,[Amount])

2. If service start somewhere in middle of the month. we want to allocate revenue in the that month and deffered the revenue to another month revenue based on service date we are offering.

 

 

3. How to Analyze Churn Hard "lost"/Soft"Downgrade in service"/ Add " Upgrade in service"/ New "new client". We want to see the churn trend to forecast the revenue more accuaretly for each service line. 

Hard Churn

 

Spoiler
Lost Customers =
VAR CustomerPurchased = CALCULATETABLE(VALUES(Revenue[clientid]),FILTER(ALL('Calendar'),
'Calendar'[Date] >MIN('Calendar'[Date])-90 &&
'Calendar'[Date] <MIN('Calendar'[Date])-31))
VAR PriorCustomers = CALCULATETABLE(VALUES(Revenue[clientid]),FILTER(ALL('Calendar'),
'Calendar'[Date] >MIN('Calendar'[Date])-90 &&
'Calendar'[Date] <MIN('Calendar'[Date])))
Return
COUNTROWS(EXCEPT(CustomerPurchased, PriorCustomers))*-1

As you see I go back 90 days to see the trasaction and compare any trasaction from the client in 31days to identify chrun. But this misses triennially/annuall churn. 

 

 

New Churn

 

Spoiler
Added Revenue =
VAR NewCustomer = VALUES(Revenue[clientid])
VAR PriorCustomers = CALCULATETABLE(VALUES(Revenue[clientid]),FILTER(ALL('Calendar'),
'Calendar'[Date] >MIN('Calendar'[Date])-61 &&
'Calendar'[Date] <= MIN('Calendar'[Date])))
Return
CALCULATE([Total Monthly Bill],
EXCEPT( NewCustomer,PriorCustomers))

 

Same logic is been implied here and again same problem due to billing cycle

 

Soft/Add service: How can i measure this churn because I'm not able to distribute the Churn on table because of no correlation between the dates.

 

We carrying out manually on excel but it slow and not able to analyze based on service line/ country/state and all. so want to automate the process to slice and dice the data analyses. Attaching data sample link https://docs.google.com/spreadsheets/d/1BPJG8MWxfgg-hqxrfhQG1tKeTVO-4-W9iUcV6EGkftQ/edit?usp=sharing 

 

Expected output

 

 

This reconciles Revenue ( monthly revenue, allocated deffered revenue, classify revenue churn). 

3 Replies