Bij abonnementen is het belangrijk om inzicht te krijgen in de maandelijkse ontwikkelingen van je abonnementen. De omzet uit een bepaalde maand is pas na afloop volledig vast te stellen. De abonnementsrapportage is daarom altijd bijgewerkt tot en met de vorige maand.
De maandomzet uit abonnementen wordt bepaald door de som van de Maandomzet* van de vorige maand en de Netto nieuwe maandomzet.
*In geval van jaar abonnementen wordt hier 1/12 van de jaaromzet getoond. Bij kwartaal- en halfjaar abonnementen is de conversie vergelijkbaar.
De Netto nieuwe maandomzet uit abonnementen is opgebouwd uit de onderdelen:
Maandomzet nieuwe klanten: toont de omzet per maand uit nieuwe abonnementen en het aantal nieuwe abonnementen.
Maandomzet uitbreidingen: toont de toename van omzet per maand en het aantal abonnementen dat groter is geworden. Deze abonnementen liepen al, maar hebben een grotere aantal of prijs gekregen.
Maandomzet vernieuwingen: toont de afname van omzet per maand en het aantal abonnementen dat kleiner is geworden. Deze abonnementen lopen nog wel door.
Maandomzet verminderingen: toont de verloren omzet als gevolg van beëindigde abonnementen.
Opzeggingen: geeft de som van de maandomzet nieuwe klanten, maandomzet uitbreidingen, maandomzet verminderingen, en opzeggingen.
De waarden voor deze onderdelen vind je elk op een eigen regel in de tabel onder de grafiek.
Naast dat je in de tabel kan terugzien hoe de maandomzet is opgebouwd vind je in deze tabel:
Maandomzet (MRR): is wellicht de belangrijkste KPI voor abonnementen. Dit is je MRR, de Monthly Recurring Revenue, wat staat voor je maandelijks terugkerende omzet.
Jaaromzet (ARR): Dit is de jaarlijkse equivalent van de MRR. Hij wordt berekend door de huidige MRR met 12 te vermenigvuldigen. Wanneer je abonnementen niet meer zouden veranderen is dit de omzet die je het komende jaar binnenhaalt. (Let op, het komende jaar, niet tot het einde van dit jaar.) Er wordt hierbij ook van uitgegaan dat abonnementen doorlopen. Een eventuele reeds bekende einddatum wordt niet mee genomen.
De laatste regels uit de tabel (zie screenshot hierboven) worden gevuld met de waarde dat hoort bij de hieronder volgende KPIs:
Gemiddelde klantwaarde: geeft de gemiddelde MRR voor een klant. Deze wordt berekend door de MRR te delen door het aantal actieve klanten. Deze KPI wordt ook vaak ARPA (Average Revenue Per Account) genoemd.
Opzeggingen klanten (Customer Churn rate) : Het percentage klanten dat in deze maand opgezegd heeft.
Opzeggingen (omzet): Het percentage omzet dat verloren is als gevolg van opzeggingen (MRR churn rate).
Customer Life Time maanden: Het verwachte aantal maanden dat een klant blijft. (1/opzeggingen klanten)
Customer Life Time jaren: Het verwachte aantal jaren dat een klant blijft.
Customer Life Time value: De gemiddelde omzet per klant voor zijn hele Customer Life Time.
In de volgende tabel vind je de formules die horen bij de hierboven besproken KPI's
KPI | Definitie | Formule |
Maandomzet (MRR) | De maandelijks terugkerende omzet uit abonnementen. | - |
Jaaromzet (ARR) | De jaarlijks terugkerende omzet uit abonnementen. |
|
Gemiddelde klantwaarde (ARPA) | De maandelijks terugkerende omzet gedeeld door het aantal klanten. |
|
Opzeggingen klanten (Customer churn rate) | Het percentage klanten dat binnen een bepaalde maand opzegt. | - |
Opzeggingen omzet (MRR churn rate) | Het percentage omzet dat verloren is als gevolg van opzeggingen. |
|
Customer Life Time maanden (CLT_m) | Het verwachte aantal maanden dat een klant blijft. |
|
Customer Life Time jaren (CLT_j) | Het verwachte aantal jaren dat een klant blijft. |
|
Customer Life Time value (CLT_v) | De gemiddelde omzet per klant voor zijn hele klantduur. |
|
Export Google Spreadsheets
Export Google Spreadsheets
Wanneer je export groter is dan 5mb, wordt deze als .csv bestand geëxporteerd. Je raakt hierdoor bepaalde opmaak kwijt in je bestand. Met onderstaand script voor Apps Script kun je in Google sheets je data zo bewerken dat je deze als abonnementsrapportage kan gebruiken.
function highlightAndGroupRowsInSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// De zoektermen waarvoor je de opmaak wilt toepassen
var searchTerms = [
"Maandomzet nieuwe klanten",
"Maandomzet uitbreidingen",
"Maandomzet verminderingen",
"Opzeggingen",
"Netto nieuwe maandomzet",
"MaandomzetJaaromzet",
"Klanten",
"Gemiddelde klantwaarde",
"Opzeggingen (klanten)",
"Opzeggingen (Omzet)",
"Customer Life Time Maanden",
"Customer Life Time Jaren",
"Customer Lifetime Value"
];
// Haal het bereik van de gebruikte cellen in het werkblad op
var dataRange = sheet.getDataRange();
var values = dataRange.getValues(); // Haal alle waarden op
// Zet de eerste rij als filter
sheet.getRange(1, 1, 1, dataRange.getNumColumns()).createFilter();
// Zet de eerste rij en de eerste kolom vast
sheet.setFrozenRows(1); // Zet de bovenste rij vast
sheet.setFrozenColumns(1); // Zet de meest linkse kolom vast
var groupStart = null; // Start van de groep rijen
var groupEnd = null; // Einde van de groep rijen
// Loop door de rijen van het blad (begin bij de tweede rij, omdat de eerste rij een header is)
for (var row = 1; row < values.length; row++) {
var rowData = values[row].join(" "); // Combineer de cellen van de rij als een enkele string
var isMatch = false;
// Controleer of een van de zoektermen in de rij voorkomt
for (var i = 0; i < searchTerms.length; i++) {
var searchText = searchTerms[i];
// Als de zoekterm in de rij staat, pas dan de opmaak toe
if (rowData.includes(searchText)) {
var range = sheet.getRange(row + 1, 1, 1, dataRange.getNumColumns()); // Selecteer de hele rij
range.setBackground("#ADD8E6"); // Zet de achtergrondkleur op lichtblauw
range.setFontWeight("bold"); // Maak de tekst dikgedrukt
isMatch = true;
// Als er een groep is, groepeer de rijen onder de vorige blauwe rij
if (groupStart != null && row > groupStart + 1) {
groupEnd = row;
sheet.getRange(groupStart + 2, 1, groupEnd - groupStart - 1, dataRange.getNumColumns()).activate()
.shiftRowGroupDepth(1); // Groepeer de rijen
}
// Stel de nieuwe start van de groep in op de huidige rij
groupStart = row;
break; // Stop met zoeken zodra een zoekterm is gevonden
}
}
}
// Pas de breedte van de eerste kolom automatisch aan
sheet.autoResizeColumn(1);
}