Voor een klant heb ik de volgende applicatiemodule gebruikt om een dashboard te maken dat honderden keren per dag vlot bijgewerkt kan worden (verversing duurt minder dan 10 seconden). Op dit dashboard staan:
- aantal verkooporders vandaag
- waarde verkooporders vandaag
- aantal verkooporders week-to-date
- waarde verkooporders week-to-date
Module:
declare
l_json varchar2;
--
-- Circumvent performance bug in Invantive UniversalSQL
-- which does not consider trunc(sysdateutc) a constant.
--
l_start_date_today datetime := trunc(sysdateutc);
l_start_date_wtd datetime := trunc(sysdateutc) - (to_number(to_char(sysdateutc, 'D')) - 1);
begin
cloud_http.set_response_content_type('application/json');
cloud_http.set_response_status_code(200);
for r
in
( select round(today.amountdc, 2)
today_amountdc
, today.cnt
today_cnt
, round(wtd.amountdc, 2)
wtd_amountdc
, wtd.cnt
wtd_cnt
from ( select 'TODAY' category
, sum(amountdc) amountdc
, count(*) cnt
from exactonlinerest..salesorders@eol sor
where sor.orderdate >= l_start_date_today
) today
join ( select 'WTD' category
, sum(amountdc) amountdc
, count(*) cnt
from exactonlinerest..salesorders@eol sor
where sor.orderdate >= l_start_date_wtd
) wtd
)
loop
l_json := '{' || jsonelement("today_amountdc", r.today_amountdc, false)
|| ',' || jsonelement("today_cnt", r.today_cnt, false)
|| ',' || jsonelement("wtd_amountdc", r.wtd_amountdc, false)
|| ',' || jsonelement("wtd_cnt", r.wtd_cnt, false)
|| '}'
;
cloud_http.append_to_response_body_text(l_json);
end loop;
end;
De Power Query-code is:
let
Bron = Json.Document(Web.Contents("https://app-online.cloud/apps/GUID/databases/acme-exact-online/modules/GUID/")),
#"Geconverteerd naar tabel" = Table.FromRecords({Bron}),
#"Type gewijzigd" = Table.TransformColumnTypes(#"Geconverteerd naar tabel",{{"today_amountdc", type number}, {"today_cnt", Int64.Type}, {"wtd_amountdc", Int64.Type}, {"wtd_cnt", Int64.Type}})
in
#"Type gewijzigd"
Het zou fijn zijn als de workaround voor de performancebug niet meer nodig is (zie commentaar in PSQL).