Platform: Teamleader Focus
Tool: Power BI Service (automatische vernieuwing) + Power BI Desktop
De automatische vernieuwing van het semantische model “AucoteamTickets” mislukt regelmatig met twee verschillende fouten:
- Time-out na 10–45 minuten met foutcode
Microsoft.Data.Mashup.ErrorCode = 10122- onderliggende verbinding gesloten bij OData-verzoek. - HTTP 429 Too Many Requests tijdens handmatige optimalisatiepogingen.
Handmatige vernieuwing in Power BI Desktop werkt, maar duurt erg lang. Automatische vernieuwing in Power BI Service mislukt consequent.
Zonder de tabel TicketMessagesAll wordt het rapport probleemloos vernieuwd. We kunnen deze tabel echter niet verwijderen, omdat het de enige bron is die de volledige ticketomschrijving/body-tekst bevat. De ticketdetailweergave in ons rapport is volledig afhankelijk van deze tabel.
Datavolumes:
- Tickets: ongeveer 140 (gefilterd op één klant-ID).
- TicketMessages: momenteel ongeveer 140, verwacht ongeveer 600 tegen eind 2026.
- Contacts: totaal aantal onbekend, gefilterd tot 3 kolommen.
- Users: ongeveer 15.
- Companies: klein
- TicketStatuses: klein
Reeds toegepaste optimalisaties:
- Alle filters verplaatst naar de OData-URL ($filter, $select, $orderby, $top).
- Parallel laden van tabellen uitgeschakeld in Power BI.
- Header Accept-Encoding: gzip, deflate toegevoegd.
- Overbodige Table.SelectColumns-stappen verwijderd.
- $top=2000 ingesteld om paginering te voorkomen.
Huidige M-query’s:
Teamleader V2 Tickets@tlr
let
KundenID = "739295e2-7443-07b1-aa70-bbba438579f5",
URL = "https://bridge-online.invantive.com/acme-teamleader-focus/odata4/" &
"Teamleader.V2.Tickets@tlr" &
"?$filter=customer_id eq '" & KundenID & "'" &
" or participant_customer_id eq '" & KundenID & "'" &
"&$select=subject,id,assignee_id,status_id,customer_id," &
"participant_customer_id,closed_at,created_at,reference,project_id",
Quelle = OData.Feed(URL, null, [
Implementation="2.0",
Headers=[#"Accept-Encoding"="gzip, deflate"]
])
in
Quelle
Teamleader V2 TicketStatuses@tlr:
let
URL = "https://bridge-online.invantive.com/acme-teamleader-focus/odata4/" &
"Teamleader.V2.TicketStatuses@tlr",
Quelle = OData.Feed(URL, null, [
Implementation="2.0",
Headers=[#"Accept-Encoding"="gzip, deflate"]
])
in
Quelle
Teamleader V2 Companies@tlr:
let
URL = "https://bridge-online.invantive.com/acne-teamleader-focus/odata4/" &
"Teamleader.V2.Companies@tlr" &
"?$select=name,id",
Quelle = OData.Feed(URL, null, [
Implementation="2.0",
Headers=[#"Accept-Encoding"="gzip, deflate"]
])
in
Quelle
Teamleader V2 Users@tlr:
let
URL = "https://bridge-online.invantive.com/acme-teamleader-focus/odata4/" &
"Teamleader.V2.Users@tlr",
Quelle = OData.Feed(URL, null, [
Implementation="2.0",
Headers=[#"Accept-Encoding"="gzip, deflate"]
])
in
Quelle
Teamleader V2 Contacts@tlr:
let
URL = "https://bridge-online.invantive.com/acme-teamleader-focus/odata4/" &
"Teamleader.V2.Contacts@tlr" &
"?$select=first_name,last_name,id",
Quelle = OData.Feed(URL, null, [
Implementation="2.0",
Headers=[#"Accept-Encoding"="gzip, deflate"]
])
in
Quelle
Teamleader V2Flat TicketMessagesAll@tlr:
let
KundenID = "739295e2-7443-07b1-aa70-bbba438579f5",
FilterParam =
"(ticket_customer_id eq '" & KundenID & "'" &
" or ticket_participant_customer_id eq '" & KundenID & "')" &
" and created_at ge 2026-01-01T00:00:00Z" &
" and (type eq 'customer' or type eq 'outbound' or type eq 'third_party')",
URL = "https://bridge-online.invantive.com/acme-teamleader-focus/odata4/" &
"Teamleader.V2Flat.TicketMessagesAll@tlr" &
"?$filter=" & Uri.EscapeDataString(FilterParam) &
"&$select=message_id,ticket_id,body,type,created_at,sent_by_id" &
"&$orderby=created_at asc" &
"&$top=2000",
Quelle = OData.Feed(URL, null, [
Implementation="2.0",
MaxUriLength=32000,
Headers=[#"Accept-Encoding"="gzip, deflate"]
]),
#"HTML bereinigt" = Table.TransformColumns(Quelle, {{"body", each
let t = _ in
Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(
Text.Replace(Text.Replace(Text.Replace(Text.Replace(Text.Replace(
Text.Replace(Text.Replace(Text.Replace(Text.Replace(
t, "<br />", " "), "<br/>", " "),
"ü", "ü"), "Ü", "Ü"),
"ä", "ä"), "Ä", "Ä"),
"ö", "ö"), "Ö", "Ö"),
"ß", "ß"), "&", "&"),
"<", "<"), ">", ">"),
"é", "é"), " ", " ")
}})
in
#"HTML bereinigt"
Vragen:
- Is er een aanbevolen aanpak voor Teamleader Focus om 429-fouten en time-outs te voorkomen bij het vernieuwen in Power BI Service wanneer
TicketMessagesAllwordt gebruikt? - Zijn er gecachte of incrementele varianten van
TicketMessagesAllbeschikbaar, vergelijkbaar met incrementele synchronisatietabellen op andere platforms? - Is het body-/omschrijvingsveld van een ticket toegankelijk via een andere tabel of endpoint die minder duur is qua API-aanroepen?