Met de functie GetTable kun je alle endpoints (tabellen) van Exact Online gebruiken, zodat je meer gegevens kunt inlezen dan alleen de standaard voorgedefinieerde tabellen.
Een volledig overzicht van alle endpoints en de bijbehorende velden vind je in de officiële Exact Online‑documentatie: https://start.exactonline.nl/docs/HlpRestAPIResources.aspx
Let op: dit vereist technische kennis over het gebruik van de API endpoints van Exact Online. Ook zijn er een aantal belangrijke aandachtpunten met betrekking tot de fair use policy en de performance waar je rekening mee moet houden. Bij overmatig datagebruik worden extra kosten in rekening gebracht. Lees deze handleiding aandachtig door voordat je deze functie gaat gebruiken!
Als je zelf niet de benodigde kennis hebt van de API endpoints van Exact Online dan kunnen we je daar op consultancybasis bij helpen. Neem hiervoor contact met ons op.
Gebruik indien mogelijk de Sync-services of Bulk-services
Een belangrijk kenmerk van de Exact Online API is dat standaard‑endpoints data ophalen in batches van 60 regels per call. Dit kan bij grote datasets leiden tot een groot aantal calls en daardoor beperkte performance.
Voor een aantal endpoints zijn echter speciale Sync‑ en Bulk‑services beschikbaar. Deze services lezen data in batches van 1000 regels per call, waardoor de performance aanzienlijk verbetert. Je herkent deze services aan de naam Sync of Bulk in de kolom Service in de Exact Online documentatie.
Exact Online hanteert een limiet van 5000 API-calls per dag per administratie. Zodra deze limiet is bereikt, kun je de rest van de dag geen gegevens meer ophalen. Het is daarom essentieel om het aantal calls zo veel mogelijk te beperken en juist daarom zijn Sync- en Bulk-services zo belangrijk.
![]()
- Bulk-services: haalt de data op met 1000 regels per call. Gebruik altijd een filter om data te beperken tot de regels die je nodig hebt.
- Sync-services (aanbevolen): haalt de data ook op met 1000 regels per call, maar biedt daarnaast ook de mogelijkheid om de gewijzigde data incrementeel in te lezen. Als je de kolom Timestamp inleest en opslaat in het lakehouse, dan kun je daarna eenvoudig alleen de nieuwe of gewijzigde records ophalen met:
Timestamp gt <LaatsteTimestamp>L(let op de L na de timestamp!). Dit is nog efficiënter dan de Bulk-services en heeft daarom de voorkeur.
Controleer daarom altijd of er van de endpoint ook een sync-service of bulk-service beschikbaar is en maak daar dan gebruik van. Je ontvangt dezelfde gegevens, maar dan veel sneller en met aanzienlijk minder API-calls.
Gebruik altijd de Filter-parameter
Het is essentieel om alleen die records in te lezen die je daadwerkelijk nodig hebt. Daarom is het verplicht om in de functie GetTable altijd de Filter‑parameter te gebruiken.
Als je een (te) ruim filter toepast, leest de connector eerst alle records in die aan dat filter voldoen. Heb je bijvoorbeeld 10 jaar historie in Exact Online, dan wordt deze volledige dataset opgehaald, ook als je later in het dataframe een aanvullende filtering toepast. Die extra filtering wordt immers pas ná het inladen uitgevoerd.
In extreme gevallen kan het dus gebeuren dat je eerst 1.000.000 regels inleest en er vervolgens 900.000 wegfiltert. Dit is niet efficiënt en zorgt voor onnodige API‑calls. Door de Filter‑parameter goed te gebruiken kun je de dataset al aan de bron beperken tot alleen de relevante records.
Voorbeelden van filters zijn:
InvoiceDate ge DateTime'2025-01-01T00:00:00'(factuurdatum op of na 01-01-2025)"InvoiceDate ge DateTime'" & Text.From(Date.Year(DateTime.LocalNow())-1) & "-01-01T00:00:00'"(factuurdatum op of na 01-01 vorig jaar, achteraf aan te passen in de Power Query Editor)"InvoiceDate ge DateTime'" & Date.ToText(Date.AddMonths(Date.From(DateTime.LocalNow()),-2),"yyyy-MM-dd") & "-01-01T00:00:00'"(factuurdatum in de laatste 2 maanden, achteraf aan te passen in de Power Query Editor)Status eq 50(alleen facturen met status 50 – Verwerkt)InvoiceNumber ge 20250001(factuurnummer groter dan of gelijk aan 20250001)
De vergelijkingen die je in het filter kunt gebruiken zijn: eq (gelijk aan), ne (niet gelijk aan), gt (groter
dan), lt (kleiner dan), ge (groter dan of gelijk aan), le (kleiner dan of gelijk aan), and en or.
Gebruik indien mogelijk de Expand-parameter
Voor verschillende soorten gegevens biedt Exact Online aparte endpoints voor headers en regels. Voorbeelden zijn:
- SalesInvoices / SalesInvoiceLines
- SalesOrders / SalesOrderLines
- GoodsDeliveries / GoodsDeliveryLines
Met de Expand-parameter kun je de headers en de bijbehorende regels in één keer inlezen. Dit biedt een aanzienlijk betere performance dan wanneer je de headers en lines afzonderlijk ophaalt.
Daarnaast is het bij Lines‑endpoints vaak niet mogelijk om op datum te filteren, terwijl dit bij de Header‑endpoints wél kan. Gebruik daarom altijd het header‑endpoint in combinatie met de Expand‑parameter, niet de lines‑endpoint rechtstreeks.
Wanneer je de endpoint bulk/SalesOrder/GoodsDeliveries gebruikt, kun je via de Expand‑parameter direct de bijbehorende regels ophalen:
- Stel de Expand‑parameter in op: GoodsDeliveryLines
- Voeg hetzelfde veld ook toe aan de Select‑parameter
Hiermee worden bij het ophalen van de header automatisch alle gekoppelde regels meegeleverd. In het resulterende dataframe kun je deze regels vervolgens eenvoudig zichtbaar maken door ze te expanden.
Werkwijze GetTable functie
Maak een notebook code-cel aan met de onderstaande code:
# Set the parameters
tablename = "GrootboekGetTable"
# Import data with GetTable function and save to lakehouse
try:
# Create dataframe from GetTable function
df_custom = ExactOnline.GetTable(
companycode="10000",
service="bulk",
endpoint="Financial/GLAccounts",
select="ID,Code,Description",
filter="Code ge '4000'",
# expand=None,
# criteria=None,
# beta=False,
)
if not df_custom.isEmpty():
# Display dataframe
display(df_custom)
# Save dataframe as lakehouse table
df_custom.write.format("delta").mode("overwrite").save(f"Tables/dbo/{tablename}")
else:
print("No data available")
except Exception as e:
print(f"❌ GetTable failed: {e}")
import traceback
traceback.print_exc()
Hieronder een toelichting op de gebruikte parameters:
- Vul bij tablename de naam in waaronder de tabel moet worden opgeslagen in het lakehouse. Let op: gebruik geen bestaande tabelnaam, want deze zal dan worden overschreven.
- Vul bij companycode de administratiecode(s) van PowerBIConnector.nl in.
- Vul bij service de servicenaam van de endpoint in, zoals vermeld in de Resource URI van de Exact Online documentatie. In ons voorbeeld is dat de service
bulk. (let op: zonder hoofdletters!) - Vul bij endpoint de naam van de endpoint in, zoals vermeld in de Resource URI van de Exact Online documentatie. In ons voorbeeld is dat de endpoint
Financial/GLAccounts. (let op: hoofdlettergevoelig!) - Vul bij select de velden in die je wilt inlezen van deze endpoint, gescheiden door een komma. In ons voorbeeld zijn dit de velden:
ID,Code,Description(hoofdlettergevoelig!)
Lees alleen de velden in die je daadwerkelijk gebruikt in het dashboard. Dat is één van de basisprincipes van een goed datamodel. Elk veld dat je onnodig inleest kost onnodige importtijd en zal het datamodel in Fabric en Power BI onnodig vertragen. - Vul bij filter altijd een filter in, zodat je alleen de records inlaadt die je nodig hebt (zie hierboven). Gebruik bijvoorbeeld een datumfilter om alleen de regels uit het gewenste periodebereik in te lezen. Bijvoorbeeld
InvoiceDate ge DateTime'2026-01-01T00:00:00'om alleen de facturen vanaf 1 januari 2026 in te lezen. Of bijvoorbeeldStatus eq 50om alleen de verwerkte facturen in te lezen. OfInvoiceNumber ge 20260001om alleen de factuurnummer groter dan of gelijk aan 20250001 in te lezen.
De vergelijkingen die je kunt gebruiken zijn: eq (gelijk aan), ne (niet gelijk aan), gt (groter dan), lt (kleiner dan), ge (groter dan of gelijk aan), le (kleiner dan of gelijk aan), and en or. - Vul bij expand indien mogelijk de regel endpoint in, te herkennen aan de omschrijving ‘Collection of lines’ in de Exact Online documentatie. Dit kun je gebruiken om de headers en regels in één keer in te lezen, bij de endpoints waar dit van toepassing is. Bijvoorbeeld in de endpoint
bulk/SalesOrder/SalesOrdersis een expand mogelijk naar deSalesOrderLines. - Vul bij criteria de function criteria in, dit is alleen verplicht bij de meeste Function URI’s. Bijvoorbeeld de function uri AgingOverviewByAccount heeft als verplichte parameter accountId={Edm.Guid}. Vul hier dan de volledige parameter in inclusief de naam, bijvoorbeeld
accountId=guid'1fecc344-5957-4099-8bd4-94b650064467' - Vul bij beta de tekst True in als het een beta-endpoint betreft, anders kan dit veld leeg gelaten worden.
Je kunt een regel uitschakelen door deze vooraf te laten gaan door # (commentaar).
De GetTable functie retourneert een dataframe. In het bovenstaande voorbeeld wordt het dataframe meteen opgeslagen in het lakehouse. Maar je kunt uiteraard alle mogelijkheden van Fabric gebruiken om het dataframe eerst te transformeren voordat je het opslaat in het lakehouse.