# Klantrapportages met Workspace [[TOC]] ## Klantrapportages efficiënt opzetten Marketing- en reclamebureaus, consultants en managed service providers sturen maandelijks rapporten aan tientallen klanten. Zonder automatisering kost dat uren per rapport. Met Google Workspace automatiseer je het genereerproces, zodat je alleen nog de kwalitatieve analyse hoeft toe te voegen. :::tip title="Investeer eenmalig in een goed sjabloon" Het sjabloon is de basis voor honderden toekomstige rapporten. Zorg dat alle vaste elementen (logo, structuur, disclaimer) al in het sjabloon zitten. Dat eenmalige werk verdien je elke maand terug. ::: ## Rapportagestructuur Een professionele klantrapportage bevat doorgaans deze onderdelen: 1. **Samenvatting**: drie tot vijf bullet points met de kern van de maand. 2. **Belangrijkste resultaten**: de meest relevante KPI's visueel weergegeven. 3. **Campagneoverzicht**: prestaties per actieve campagne. 4. **Vergelijking**: maand op maand en jaar op jaar. 5. **Analyse**: kwalitatieve duiding van opvallende resultaten. 6. **Aanbevelingen**: twee tot drie concrete acties voor de komende periode. 7. **Bijlage**: gedetailleerde data voor wie dieper wil duiken. ## Sjabloon aanmaken in Docs Maak het rapportagesjabloon met variabele velden tussen vierkante haken. Het script vervangt deze later automatisch: ``` # Maandrapportage [MAAND] [JAAR] **Klant:** [KLANTNAAM] **Periode:** [STARTDATUM] tot [EINDDATUM] **Opgesteld door:** [CONSULTANT] **Datum:** [RAPPORTAGEDATUM] ## Samenvatting [SAMENVATTING_TEKST] ## Kernresultaten | KPI | Doelstelling | Resultaat | Verschil | |---|---|---|---| | [KPI1] | [DOEL1] | [RESULTAAT1] | [VERSCHIL1] | ``` Sla het sjabloon op in een vaste **Sjablonen**-map in Drive en noteer het bestand-ID uit de URL. Dat ID heb je straks nodig in het script. ## Grafieken vanuit Sheets insluiten Voor elke klant heb je een Sheets-bestand met data. Sluit de belangrijkste grafieken live in het rapport in, zodat ze meebewegen met de bron. :::howto title="Een live grafiek koppelen" 1. Maak de grafiek in Sheets en klik die aan. 2. Klik op het menu met drie puntjes rechtsboven in de grafiek en kies **Grafiek kopiëren**. 3. Ga naar je Docs-rapport en plak met **Ctrl+V** (of **Cmd+V** op Mac). 4. Kies in het pop-upvenster **Koppelen aan spreadsheet** en klik op **Plakken**. 5. Bij nieuwe data verschijnt rechtsboven in de grafiek een knop **Bijwerken**, waarmee je de laatste stand ophaalt. ::: Je kunt een grafiek ook invoegen via **Invoegen > Diagram > Uit Spreadsheets** als je liever vanuit Docs begint. ## Geautomatiseerde rapportage via Apps Script Voor meerdere klanten schrijf je een script dat het sjabloon kopieert, de variabelen invult en een PDF mailt: ```javascript function genereerMaandrapportage() { var ss = SpreadsheetApp.openById('KLANTEN_SHEETS_ID'); var klanten = ss.getSheetByName('Klanten').getDataRange().getValues(); var sjabloonId = 'DOCS_SJABLOON_ID'; var rapportageMap = DriveApp.getFolderById('RAPPORTAGES_MAP_ID'); for (var i = 1; i < klanten.length; i++) { var klantnaam = klanten[i][0]; var email = klanten[i][1]; var sheetsId = klanten[i][2]; var kopie = DriveApp.getFileById(sjabloonId).makeCopy( klantnaam + ' - Rapport ' + Utilities.formatDate(new Date(), 'Europe/Amsterdam', 'MMMM yyyy'), rapportageMap ); var doc = DocumentApp.openById(kopie.getId()); var body = doc.getBody(); body.replaceText('\\[KLANTNAAM\\]', klantnaam); body.replaceText('\\[MAAND\\]', Utilities.formatDate(new Date(), 'Europe/Amsterdam', 'MMMM')); body.replaceText('\\[JAAR\\]', Utilities.formatDate(new Date(), 'Europe/Amsterdam', 'yyyy')); doc.saveAndClose(); var pdf = kopie.getAs('application/pdf'); GmailApp.sendEmail(email, 'Maandrapportage ' + klantnaam, 'Zie bijlage.', { attachments: [pdf], name: 'Rapportageservice' }); } } ``` Installeer daarna een maandelijkse, tijdgestuurde trigger zodat het script automatisch op de eerste dag van elke maand draait. :::warn title="Test eerst met één klant" Stuur tijdens het testen niet naar echte klanten. Vul de e-mailkolom tijdelijk met je eigen adres, of becommentarieer de `GmailApp.sendEmail`-regel, totdat je hebt gecontroleerd dat de PDF klopt. Houd ook rekening met de dagelijkse Gmail-verzendlimieten: een gratis account mag minder mails per dag versturen dan een Workspace-account. ::: :::howto title="Automatische rapportage instellen" 1. Maak het Docs-sjabloon en noteer het bestand-ID uit de URL. 2. Maak een Sheets-klantenoverzicht met de kolommen klantnaam, e-mail en sheets-id. 3. Plak het script in Apps Script en vervang de drie ID-constanten. 4. Test handmatig via **Uitvoeren** voor één klant en keur de eerste autorisatieprompt goed. 5. Installeer een trigger via **Triggers > Trigger toevoegen > Tijdgestuurd > Maandelijkse timer**. ::: :::faq ### Hoe voeg ik klantspecifieke grafieken toe via het script? Open het Sheets-bestand van de klant met `SpreadsheetApp.openById(sheetsId)`, haal de grafiek op met `getCharts()` en voeg die als afbeelding in het rapport in via de blob van de grafiek en de body van het document. ### Kan ik het rapport als link versturen in plaats van als PDF? Ja. Gebruik in de mail de URL van de kopie met `kopie.getUrl()`. De klant heeft dan wel een Google-account met de juiste toegangsrechten nodig om het document te kunnen openen. ### Hoe zorg ik dat elk rapport in een eigen klantmap belandt? Zoek per klant naar een bestaande submap met `rapportageMap.getFoldersByName(klantnaam)` en maak die aan als de iterator leeg is. Gebruik die submap vervolgens als doelmap bij `makeCopy`. ### Wat als een klant geen geautomatiseerde data wil maar een handmatige analyse? Gebruik het sjabloon alleen voor de structuur en vul de data met de hand in voor klanten die een meer narratieve rapportage willen. Het sjabloon bespaart ook dan nog uren werk. ### Hoeveel rapporten kan ik per uitvoering versturen? Dat hangt af van je accounttype. Apps Script kent quota per dag, zoals een maximum aantal verzonden e-mails en een totale uitvoeringstijd per run. Verdeel een grote klantenlijst eventueel over meerdere triggers of voeg een korte pauze toe om binnen de limieten te blijven. :::