Priradenie pravidla agregácie pre celkové súčty zostáv

Táto téma popisuje spôsoby explicitného priraďovania pravidla agregácie pre celkové súčty zostáv, čo pomáha zvýšiť výkon, a je určená špeciálne pre technických vývojárov, ktorí vytvárajú zostavy pomocou služby Oracle Analytics.

Na nasledujúcom obrázku je uvedený príklad, v ktorom definícia zostavy zahŕňa rok, mesiac a oblasť zákazníkov s metrikou Count Distinct of Customers with Orders, ktorá je definovaná ako počet jednotlivých zákazníkov s objednávkami.

Popis GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg je uvedený nižšie
.jpg

Logický dopyt vyzerá takto:

SELECT
   0 s_0,
   "A - Sample Sales"."Cust Regions"."C50  Region" s_1,
   "A - Sample Sales"."Counts"."32  # of Cust with Orders  (Cnt Distinct)" s_2,
   REPORT_AGGREGATE("A - Sample Sales"."Counts"."32  # of Cust with Orders  (Cnt Distinct)" BY ) s_3
FROM "A - Sample Sales"
WHERE
("Time"."T02 Per Name Month" = '2011 / 11')
ORDER BY 2 ASC NULLS LAST
FETCH FIRST 500001 ROWS ONLY

Vygenerovaný fyzický dopyt vyzerá takto:

WITH
SAWITH0 AS (select count(distinct T42433.Cust_Key) as c1,
     T42430.Region as c2
from
     BISAMPLE.SAMP_CUSTOMERS_D T42428 /* D60 Customers */ ,
     BISAMPLE.SAMP_ADDRESSES_D T42430 /* D62 Customers Addresses */ ,
     BISAMPLE.SAMP_TIME_MTH_D T42405 /* D02 Time Month Grain */ ,
     BISAMPLE.SAMP_REVENUE_F T42433 /* F10 Billed Rev */
where  ( T42405.Mth_Key = T42433.Bill_Mth_Key and T42405.Per_Name_Month = '2011 / 11' and T42428.Cust_Key = T42433.Cust_Key and T42428.Address_Key = T42430.Address_Key )
group by T42430.Region),
SAWITH1 AS (select count(distinct T42433.Cust_Key) as c1
from
     BISAMPLE.SAMP_TIME_MTH_D T42405 /* D02 Time Month Grain */ ,
     BISAMPLE.SAMP_REVENUE_F T42433 /* F10 Billed Rev */
where  ( T42405.Per_Name_Month = '2011 / 11' and T42405.Mth_Key = T42433.Bill_Mth_Key ) )
select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select D1.c1 as c1,
     D1.c2 as c2,
     D1.c3 as c3,
     D1.c4 as c4
from
     (select 0 as c1,
               D1.c2 as c2,
               D1.c1 as c3,
               D2.c1 as c4,
               ROW_NUMBER() OVER (PARTITION BY D1.c2 ORDER BY D1.c2 ASC) as c5
          from
               SAWITH0 D1,
               SAWITH1 D2
     ) D1
where  ( D1.c5 = 1 )
order by c2 ) D1 where rownum <= 500001

Celková hodnota 480 predstavuje súčet čiastkových hodnôt 182, 113 a 185. Výraz logického dopytu, ktorý vypočíta celkový súčet, je: “REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.

Pri použití výrazu REPORT_AGGREGATE sa súčet vypočíta nezávisle od čiastkových hodnôt. Ale v prípade tohto návrhu zostavy je možné správny celkový súčet pre túto zostavu vypočítať z čiastkových hodnôt.

Ak upravíte vzorec stĺpca zmenou hodnoty pre výraz Aggregation Rule (Totals Row) z hodnoty Server Complex Aggregate na hodnotu Sum, logický a fyzický dopyt SQL sa zmenia.

Na nasledujúcom obrázku je znázornená pôvodná agregácia.

Popis GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png je uvedený nižšie
.png

Na nasledujúcom obrázku je znázornená modifikovaná agregácia.

Popis GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png je uvedený nižšie
.png

Modifikovaný logický dopyt SQL teraz obsahuje výraz REPORT_SUM.

SELECT
   0 s_0,
   "A - Sample Sales"."Cust Regions"."C50  Region" s_1,"A - Sample Sales"."Counts"."32  # of Cust with Orders  (Cnt Distinct)" s_2,
   REPORT_SUM("A - Sample Sales"."Counts"."32  # of Cust with Orders  (Cnt Distinct)" BY ) s_3
FROM "A - Sample Sales"
WHERE
("Time"."T02 Per Name Month" = '2011 / 11')
ORDER BY 2 ASC NULLS LAST
FETCH FIRST 500001 ROWS ONLY

Toto je vygenerovaný fyzický dopyt:

WITH
SAWITH0 AS (select count(distinct T42433.Cust_Key) as c1,
     T42430.Region as c2
from
     BISAMPLE.SAMP_CUSTOMERS_D T42428 /* D60 Customers */ ,
     BISAMPLE.SAMP_ADDRESSES_D T42430 /* D62 Customers Addresses */ ,
     BISAMPLE.SAMP_TIME_MTH_D T42405 /* D02 Time Month Grain */ ,
     BISAMPLE.SAMP_REVENUE_F T42433 /* F10 Billed Rev */
where  ( T42405.Mth_Key = T42433.Bill_Mth_Key and T42405.Per_Name_Month = '2011 / 11' and T42428.Cust_Key = T42433.Cust_Key and T42428.Address_Key = T42430.Address_Key )
group by T42430.Region),
SAWITH1 AS (select 0 as c1,
     D1.c2 as c2,
     D1.c1 as c3
from
     SAWITH0 D1)
select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3, D1.c4 as c4 from ( select D1.c1 as c1,
     D1.c2 as c2,
     D1.c3 as c3,
     sum(D1.c3) over ()  as c4
from
     SAWITH1 D1
order by c2 ) D1 where rownum <= 500001

Rovnaká voľba na explicitné nastavenie agregácie je k dispozícii v zošitoch. Pozrite si časť Formátovanie číselných hodnôt vo vizualizáciách. V tomto príklade sa pre stĺpec Count Distinct Customers with Orders zmení metóda agregácie na súčet.

Skontrolujte zostavy, či sa pre každú zostavu používa najvhodnejšie pravidlo agregácie. Ak to návrh zostavy umožňuje, používajte explicitné pravidlo agregácie.

Ďalšie informácie o zostavách nájdete v časti Vytváranie analýz.