Performance Exact Online query

Hi,

In versie 20.2 van de Query Tool én de Datahub blijft het tweede deel van deze nieuwe query draaien. Na 120 seconden is er nog geen resultaat terwijl er voorheen na zeker 15 seconden al resultaat was.

Wat kan ik hieraan veranderen zodat de query wel gegevens ophaalt?

create or replace table avoidmandatoryfilterbug@inmemorystorage
as 
select * 
from   exactonlinerest..SalesOrders@eol sor
where  sor.DeliveryStatus = 12

create or replace table sor@inmemorystorage
as
select sor.* prefix with 'sor_'
,      ads.* prefix with 'ads_'
,      con.* prefix with  'con_'
from   avoidmandatoryfilterbug@inmemorystorage sor
join   exactonlinerest..addresses@eol ads
on     ads.id = sor.deliveryaddress
join   exactonlinerest..Contacts@eol con
on     con.account = sor.Invoiceto
where  sor.DeliveryDate between trunc(sysdate)-40 and trunc(sysdate)
--and    sor.DeliveryStatus = 12
and    sor.warehousecode = 1
order 
by     sor.ordernumber

Ik bedoel het eerste deel van de query (dus het stuk met avoidmandatoryfilterbug).

Wat ik wel zie is als ik bijvoorbeeld een top 100 rechtstreeks op de salesorder tabel opvraag krijg ik die nagenoeg direct. Maar zodra ik de where clausule toevoeg komt er geen resultaat.

De nieuwe implementatie van filtering op Exact Online (“mandatory filtering”) maakt het efficient gebruik van een aantal veelgebruikte filters onmogelijk. Hierdoor is het soms nodig om queries die voorheen met enkele API-calls klaar waren te herschrijven.

Generieke oplossing is om een recente 20.2 release te gebruiken zoals 20.2.21 of nieuwer, en daarna de query om te schrijven naar het gebruik van de *Incremental tabellen. Deze zijn gebaseerd op de Exact Online Sync API’s, waarbij alle logica onder de motorkap verwerkt is.

Typisch zijn per tabel nog maar twee API-calls nodig.

Meer informatie hierover is te vinden op Snel en met minder API-calls Exact Online uitlezen met de incrementele "sync API"-tabellen.

Okee,

Bedoel je daarmee dat de query hetzelfde blijft maar dat de bron in dit geval dat SalesOrdersIncremental wordt?

De query blijft op hoofdlijnen hetzelfde, maar een aantal kolommen zijn afgeleid en zullen niet meer in het resultaat verschijnen. Bijvoorbeeld AccountName in SalesOrderLinesIncremental ontbreekt en moet via een join opgehaald worden uit AccountsIncremental.

Merk op dat transacties met LineNumber gelijk aan 0 staat voor de kop (Sales Order). De rest staat voor de regels binnen de kop.