Přiřazení pravidla agregace pro součty sestavy

Toto téma popisuje způsoby explicitního přiřazení agregačního pravidla pro celkové součty sestav, což pomáhá zlepšit výkon, a jsou určeny zejména technickým vývojářům, kteří sestavy píší pomocí nástroje Oracle Analytics.

Následující obrázek ukazuje příklad, kdy je definice sestavy rok, měsíc a oblast zákazníků s metrikou Count Distinct of Customers with Orders, která je definována jako počet odlišných zákazníků s objednávkami.

Popis GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg následuje
.jpg''

Logický dotaz vypadá 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ý dotaz vypadá 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 je součtem dílčích hodnot 182 + 113 + 185. Logický výraz dotazu, který vypočítá celkový součet, je:“REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.

Při použití REPORT_AGGREGATE se součet vypočítá nezávisle na hodnotách složek. U tohoto návrhu sestavy však lze správný celkový součet pro tuto sestavu vypočítat ze složek.

Pokud upravíte vzorec sloupce a změníte Pravidlo agregace (řádek součtů)Komplexní agregace serveru na Součet, změní se logický i fyzický dotaz SQL.

Následující obrázek znázorňuje původní agregaci.

Popis GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png následuje
.png''

Následující obrázek znázorňuje změněnou agregaci.

Popis GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png následuje
.png''

Upravený logický dotaz SQL nyní obsahuje 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ý dotaz:

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

Stejná volba explicitního nastavení agregace je k dispozici i v sešitech. Viz Formátování číselných hodnot vizualizací. V tomto příkladu pro sloupec Count Distinct Customers with Orders změňte Způsob agregace na Součet.

Zkontrolujte sestavy, zda je pro ně použito nejlepší agregační pravidlo. Pokud to návrh sestavy umožňuje, použijte explicitní agregační pravidlo.

Další informace o sestavách najdete v části Vytvořte analýzy.