Asignaţi regula de agregare pentru totalurile din raport

Acest subiect descrie cum să asignaţi în mod explicit regula de agregare pentru totalurile din raport, ceea ce ajută la îmbunătăţirea performanţelor şi este destinat în mod specific pentru dezvoltatorii tehnici care scriu rapoarte cu Oracle Analytics.

Următoarea figură prezintă un exemplu în care definiţia raportului include anul, luna şi regiunea clientului, cu metrica Count Distinct of Customers with Orders, care este definită ca fiind totalul distinct al clienţilor cu comenzi.

Urmează descrierea GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg
.jpg

Interogarea logică arată astfel:

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

Interogarea fizică generată arată astfel:

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

Valoarea totală, 480, este suma valorilor constituente, 182 + 113 + 185. Expresia din interogarea logică ce calculează totalul este: “REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.

Dacă se utilizează REPORT_AGGREGATE, totalul este calculat independent de valorile constituente. Dar pentru proiectarea acestui raport, totalul corect poate fi calculat din valorile sale constituente.

Dacă editaţi formula din coloană pentru a schimba Aggregation Rule (Totals Row) din Server Complex Aggregate în Sum, interogarea SQL logică şi fizică se modifică.

Următoarea figură prezintă agregarea iniţială.

Urmează descrierea GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png
.png

Următoarea figură prezintă agregarea modificată.

Urmează descrierea GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png
.png

Interogarea SQL logică modificată are acum 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

Iată interogarea fizică generată:

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

Aceeaşi opţiune de a seta în mod explicit agregarea este disponibilă şi în registrele de lucru. Consultaţi Formatarea valorilor numerice ale vizualizărilor. În acest exemplu, pentru coloana Contabilizare clienţi distincţi cu comenzi, modificaţi Metoda de agregare la Sumă.

Verificaţi rapoartele pt. a vedea dacă este utilizată în ele cea mai potrivită regulă de agregare. Utilizaţi o regulă de agregare explicită dacă designul raportului permite acest lucru.

Pt. mai multe informaţii despre rapoarte, consultaţi Crearea analizelor.