Tildele aggregeringsreglen for rapporttotaler

Dette emne beskriver metoder til eksplicit at tildele aggregeringsreglen for rapporttotaler, der hjælper med at forbedre ydeevne, og er specifikt beregnet til tekniske udviklere, der skriver rapporter med Oracle Analytics.

Følgende figur viser et eksempel, hvor rapportdefinitionen er år, måned og kunderegion med en metrik Count Distinct of Customers with Orders, der er defineret som et distinkt antal af kunder med ordrer.

Beskrivelse af GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg følger
.jpg

Den logiske forespørgsel ser ud på følgende måde:

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 logiske forespørgsel, der genereres, ser ud på følgende måde:

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

Totalværdien 480 er summen af delværdierne 182 + 113 + 185. Det logiske forespørgselsudtryk, der beregner totalen, er: “REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.

Når REPORT_AGGREGATE bruges, beregnes totalen uafhængigt af delværdierne. Men til dette rapportdesign kan den korrekte totalværdi beregnes ud fra delværdierne for denne rapport.

Hvis du redigerer kolonneformlen for at ændre Aggregeringsregel (totaler for række) fra Server - Kompleks aggregering til Sum, ændres den logiske og fysiske SQL-forespørgsel.

Følgende figur viser den oprindelige aggregering.

Beskrivelse af GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png følger
.png

Følgende figur viser den modificerede aggregering.

Beskrivelse af GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png følger
.png

Den ændrede logiske SQL-forespørgsel indeholder 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

Dette er den fysiske forespørgsel, der genereres:

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

Det samme valg til at angive aggregeringen eksplicit er tilgængeligt i projektmapper. Se Formatere numeriske værdier i visualiseringer. I dette eksempel skal du ændre Aggregeringsmetode til Sum for kolonnen Count Distinct Customers with Orders.

Gennemgå dine rapporter for at kontrollere, at den bedste aggregeringsregel anvendes til rapporten. Brug en eksplicit aggregeringsregel, når rapportdesignet tillader det.

Se Oprettelse af analyser. for at få flere oplysninger om rapporter