Itgenboe161 inladen Teamleader tabel InvoiceLinesAll

Voor een klant beheren wij een Power BI‑dashboard dat al meer dan een jaar probleemloos draait en data ophaalt via de Teamleader‑API. Sinds enkele dagen krijgen we echter herhaaldelijk de melding “Too many requests” vanuit Invantive, waardoor het dashboard niet meer wordt ververst.

Gisteren hebben we de automatische verversing tijdelijk uitgeschakeld om te voorkomen dat we vandaag direct opnieuw tegen het verversingslimiet zouden aanlopen. Via de live monitoring hebben we vastgesteld dat de tabel Teamleader.V2Flat.InvoiceLinesAll de oorzaak is van de problemen. Op deze tabel zien we laadtijden van meerdere miljoenen milliseconden, terwijl de tabel slechts ongeveer 5.000 rijen bevat.

Vanmorgen hebben we onderzocht wat deze extreme vertraging veroorzaakt. Wij hebben alleen het aanroepen van de tabel Teamleader.V2Flat.InvoiceLinesAll zonder enige transformaties in de tabel gestart om te kijken of hier het probleem lag. Na vervolgens lang te wachten werd de tabel niet ingeladen. Dit is opvallend, omdat hier dus geen complexe bewerkingen plaatsvinden die dit gedrag zouden kunnen verklaren.

Daarnaast voert Power Query automatisch een “top 1000” rijen query uit. Ook deze query liet in de monitoring al een laadtijd van meer dan één miljoen milliseconden zien, nog voordat de tabel volledig was ingeladen. Om die reden hebben we de verversingen voortijdig afgebroken.

Zouden jullie ons hierbij kunnen helpen?

itgenboe161
De gegevensdownload werd geannuleerd na 15 minuten, 23 seconden, waarschijnlijk door de gebruiker.

De view InvoiceLinesAll voert vrij complexe bewerkingen uit, maar dat is aan de buitenkant niet te zien. Het haalt eerst alle facturen (Invoices) op. Vervolgens haalt het per Invoice de InvoiceLines op (door middel van de InvoiceLinesById-tabelfunctie). Afhankelijk van het aantal facturen kan het dus betekenen dat er duizenden API-verzoeken nodig zijn om alle informatie op te halen.

Aangezien er geen aparte API is om alle factuurregels op te halen is helaas zeer inefficiënt om alle data op te halen waardoor het lang kan duren.

De maximaal snelheid is 200 rijen per minuut. In de praktijk zijn de prestaties slechter en wordt al snel tegen fair use limieten aangelopen van Invantive Cloud. In de afbeelding is te zien dat er 3.490 rijen opgehaald zijn; dit kostte (mits cache leeg) 3.490 API-calls en dus minimaal 17,5 minuten (1.047.000 milliseconden).

Advies is om een datumbereik mee te geven als filterstap.

De gebruikte API-calls zijn te raadplegen via de knop “Sessie I/O’s”.

Voor grotere volumes is het advies om contact op te nemen met Teamleader Support om optimalisaties voor te stellen en anders over te stappen op een ander product dan Teamleader Focus. Een vaker voorkomend alternatief voor Teamleader Focus is Odoo.

Zie ook:

Bedankt voor de uitleg.

Dan had ik nog een vraag over de InvoicesLinesAll-view. Worden de complexe bewerkingen binnen deze tabel gedaan door Invantive of worden deze zo aangeleverd vanuit Teamleader? Een oplossing zou eventueel ook zijn dat wij deze tabellen los aanroepen en zelf de transformaties doen.

De viewdefinitie beschrijft de transformatie:

select p.*
,      l.* prefix with 'invoice_'
from   Teamleader.V2.Invoices l
join   Teamleader.V2.InvoiceLinesById(l.id) p

Als gefilterd wordt zoals beschreven in links op een veld uit Invoices, dan zal de tabelfunctie enkel benaderd worden NA filtering.