De volgende query op een Exact Online Handel administratie duurt momenteel 131 seconden bij het real-time opbouwen en toont per batch de beschikbare hoeveelheid, de voorraadwaarde en de gemiddelde kostprijs volgens de Exact Online administratie van het artikel:
use all
;
create or replace view Voorraadanalyse_r
as
select bnr.batchnumber nummer
, itm.code itemcode
, act.name leverancier
, bnr.availablequantity
, bnr.availablequantity * itm.averagecost voorwaardwaarde
, bnr.Remarks
, itm.averagecost
from ExactOnlineREST.Inventory.BatchNumbers@eol bnr
join ItemsIncremental@eol itm
on itm.id = bnr.item
and itm.IsStockItem = true
left
outer
join GoodsReceiptLineBatchNumbers glr
on glr.bnrbatchnumberid = bnr.id
left
outer
join exactonlinerest..PurchaseOrderLines@eol pol
on pol.Id = glr.PurchaseOrderLineID
left
outer
join exactonlinerest..PurchaseOrders@eol por
on por.PurchaseOrderID = pol.PurchaseOrderID
left
outer
join AccountsIncremental@eol act
on act.id = por.Supplier
where bnr.Division = DIVISIECODE
Uiteindelijk wil de gebruiker bijvoorbeeld 4 maal per dag een actuele Power BI lijst van alle voorraden voor alle betrokken medewerkers.
create or replace view Voorraadanalyse_r
as
select bnr.batchnumber nummer
, itm.code itemcode
, act.name leverancier
, bnr.availablequantity
, bnr.availablequantity * itm.averagecost voorwaardwaarde
, bnr.Remarks
, itm.averagecost
from ExactOnlineREST.Inventory.BatchNumbers@eol bnr
join ItemsIncremental@eol itm
on itm.division = bnr.division
and itm.id = bnr.item
and itm.IsStockItem = true
left
outer
join GoodsReceiptLineBatchNumbers glr
on glr.division = bnr.division
and glr.bnrbatchnumberid = bnr.id
left
outer
join PurchaseOrderLinesIncremental@eol pol
on pol.division = glr.division
and pol.Id = glr.PurchaseOrderLineID
and pol.LineNumber != 0
left
outer
join PurchaseOrderLinesIncremental@eol por
on por.division = pol.division
and por.PurchaseOrderID = pol.PurchaseOrderID
and por.LineNumber = 0
left
outer
join AccountsIncremental@eol act
on act.division = por.division
and act.id = por.Supplier
where bnr.Division = GETAL
Al met al worden er dan nog 70 API calls op Exact Online uitgevoerd.
Een kleine besparing is het doorgeven van de Exact Online administratie vanaf bnr naar elke onderliggende tabel met de bijbehorende gedetailleerde informatie.
De query kan als view vastgelegd worden bij de database definitie indien deze real-time versie gebruikt moet worden voor een Power BI dashboard. Zie Eigen database-views gebruiken voor SQL en BI-tools voor hoe een view op Exact Online vastgelegd kan worden.
Er zit nog een fout in bovenstaande query. We houden namelijk geen rekening met aankoopretourorders. Dus op vandaag zitten artikels er soms dubbel in.
We moeten de aankoopretourorders eruit filteren.
Hoe kan ik de query wijzigen zodat de aankoopretourorders eruit worden gehaald?