De vraag betreft een optimalisatieprobleem voor Power BI met Invantive Cloud. Specifiek gaat het om de optimalisatie van een OData filter. Hierover staan een aantal algemene tips op OData-filters optimaliseren om de prestaties te verbeteren.
Probleem bij deze query is dat Power BI geen gebruik maakt van de IN
-operator van OData. Met de IN
-operator kun je een lijst van waardes doorgeven waarvan je de gegevens wilt hebben. Dat mogen allemaal verschillende waardes zijn, zoals ‘Appels’ en ‘Peren’, maar ook een opeenvolgende lijst zoals ‘2017’, ‘2018’, ‘2019’.
Mocht het een opeenvolgende lijst zijn van administraties (onwaarschijnlijk, maar gaat wel vaker op bij optimalisatie op bijvoorbeeld boekjaar), dan kun je Power BI verleiden om een slimmer filter te gebruiken in plaats van OR
: gebruik een waarde groter dan of gelijk aan (>=
) en kleiner dan/gelijk (<=
).
Bij administraties zal dat meestal niet lukken om ze te behandelen als een opeenvolgende reeks.
SQL-statement
Voor de genoemde query zal een stukje Invantive SQL samengesteld worden zoals:
select t.*
from ExactOnlineREST.Incremental.TransactionLinesIncremental@eol t
where (((([Division] = :w1) or ([Division] = :w2)) or ([Division] = :w3)) or ([Division] = :w4))
De gegenereerde Invantive SQL heeft een filtergroep, bestaande uit OR-ed elementen op division
. Een dergelijk filter met OR
wordt sinds juli 2021 geoptimaliseerd om maar 4 van de zeg 1.000 administraties te verwerken. Zie Betere prestaties op Power BI voor Exact Online accountants voor een uitleg.
Om onnodige kosten te voorkomen is het advies wel om altijd de Exact Online app machtigingen te beperken Hoe trek ik de app rechten in voor Exact Online? tot de minimaal noodzakelijke administraties of een use
statement in de on startup te laten zetten.