Server-side filtering via query folding in Power BI is op Exact Online sinds 2022 beperkt voor een aantal tabellen. De reden hiervan is niet duidelijk.
Voor performanceverbetering is verstandig een sneller filter te kiezen.
SessionIOs
Door een query als deze uit te voeren is na afloop in SessionIOs@DataDictionary
zichtbaar dat geen server-side filtering wordt toegepast, anders dan het doorsturen van de divisiecode. Het datumfilter wordt dus niet doorgestuurd:
select url
from sessionios@datadictionary
order
by id desc
met als resultaat:
https://start.exactonline.nl/api/v1/10523/bulk/cashflow/Payments?$select=Account,...,YourRef&$skiptoken=guid'b654ca40-fe89-4022-a239-a988e82e6225'
Aan het ontbreken van een $filter
richting Exact Online is te zien dat dit veld niet doorgestuurd kan worden.
SQL execution steps
Het wordt mooier zichtbaar door de SQL executiestappen op te vragen zoals beschreven in SQL execution steps.
Het uitlezen van SystemSqlExecutionSteps@datadictionary
in relatie tot de bijpassende kolommen uit SessionIOs@DataDictionary
laat nog mooier het ontbreken van server-side filtering zien:
ID | PARENT_ID | DEPTH | DURATION_MS | DESCRIPTION |
---|---|---|---|---|
2462 | 2461 | 7 | 16857 | Data container I/O on ‘t’ (EXACTONLINEREST.CASHFLOW.PAYMENTSBULK) |
2461 | 2460 | 6 | 16858 | Data container I/O on ‘t’ |
2460 | 2459 | 5 | 16858 | Filter |
2459 | 2458 | 4 | 16858 | Column chaining into wider list |
2458 | 2457 | 3 | 16858 | Select columns |
2457 | 2456 | 2 | 16858 | Data container I/O on ‘t’ |
2456 | 1 | 16865 | Root |
Beschikbare kolommen
De kolommen beschikbaar voor server-side filtering zijn op te vragen via bijvoorbeeld:
select name
, can_filter_server_side
from SystemTableColumns@DataDictionary
where table_name = 'PaymentsBulk'
Snelle Versie
Het ophalen kan sneller gemaakt worden door een van de kolommen met server-side filtering te gebruiken, zoals in de query:
select t.*
from ExactOnlineREST.Cashflow.PaymentsBulk@eol t
where Division = :w1
and EntryDate > :w2
Deze is in een testomgeving 30x sneller als een filter op Modified
.
In SessionIOs@DataDictionary
is te zien dat dit filter wel doorgegeven kan worden aan Exact Online:
https://start.exactonline.nl/api/v1/10523/bulk/Cashflow/Payments?$select=Account,...,YourRef&$filter=EntryDate%20gt%20datetime'2024-12-04T00:00:00'