Tilldela aggregeringsregeln för rapportsummor

Det här avsnittet beskriver hur du explicit tilldelar aggregeringsregeln för rapportsummor, vilket ger bättre prestanda och är särskilt avsett för tekniska utvecklare som skriver rapporter med Oracle Analytics.

Följande figur visar ett exempel där rapportdefinitionen är år, månad och kundregion, och måttet Count Distinct of Customers with Orders definierat som antalet unika kunder som har lagt beställningar.

Beskrivning av GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg följer
.jpg

Den logiska frågan ser ut så här:

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

Den fysiska frågan som genereras ser ut så här:

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

Summan, 480, är summan av de värden som ingår, 182 + 113 + 185. Det uttryck i den logiska frågan som beräknar summan är: REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3.

När REPORT_AGGREGATE används beräknas summan oberoende av de värden som ingår. I den här rapportdesignen kan dock rätt summa beräknas med rapportens beståndsdelar.

Om du redigerar kolumnformeln och ändrar Aggregation Rule (Totals Row) från Server Complex Aggregate till Sum ändras den logiska och fysiska SQL-frågan.

Följande figur visar den ursprungliga aggregeringen.

Beskrivning av GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png följer
.png

Följande figur visar den ändrade aggregeringen.

Beskrivning av GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png följer
.png

Den ändrade logiska SQL-frågan innehåller nu 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

Det här är den fysiska frågan som genereras:

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

Samma alternativ för att ställa in aggregeringen explicit finns även i arbetsböcker. Se Formatera numeriska värden i visualiseringar. I det här exemplet ändrar du Aggregeringsmetod till Summa för kolumnen för räkning av antalet unika kunder med beställningar.

Granska dina rapporter och kontrollera att du använder bästa möjliga aggregering. Använd en explicit aggregeringsregel när det är möjligt i rapportens design.

Mer information om rapporter finns i Skapa analyser.