Cette rubrique décrit les moyens d'affecter explicitement la règle d'agrégation pour les totaux de rapport, ce qui permet d'améliorer la performance, et s'adresse spécifiquement aux développeurs techniques qui rédigent des rapports avec Oracle Analytics.
L'ilustration suivante présente un exemple dans lequel la définition du rapport comporte l'année, le mois et la région du client, avec une mesure Count Distinct of Customers with Orders
, qui est définie comme un nombre distinct de clients ayant passé des commandes.
L'interrogation logique se présente comme suit :
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
L'interrogation physique qui est générée se présente comme suit :
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
La valeur totale, 480, est la somme des valeurs constitutives, 182 + 113 + 185. L'expression d'interrogation logique qui calcule le total est la suivante : “REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.
Lorsque REPORT_AGGREGATE
est utilisé, le total est calculé indépendamment des valeurs constitutives. En revanche, pour la conception de ce rapport, le total correct peut être calculé à partir des éléments constitutifs du rapport.
Si vous modifiez la formule de la colonne pour faire passer la valeur de la zone Aggregation Rule (Totals Row) de Server Complex Aggregate à Sum, les interrogations SQL logiques et physiques sont modifiées.
L'illustration suivante présente l'agrégation initiale.
L'illustration suivante présente l'agrégation modifiée.
L'interrogation SQL logique modifiée contient maintenant 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
Voici l'interrogation physique qui est générée :
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
La même option permettant de définir explicitement l'agrégation est disponible dans les classeurs . Voir Formater les valeurs numériques des visualisations. Pour cet exemple, pour la colonne Nombre distinct de clients avec commandes, remplacez la valeur de Méthode d'agrégation par Somme.
Consultez vos rapports pour vous assurer que la meilleure règle d'agrégation est utilisée pour le rapport. Utilisez une règle d'agrégation explicite lorsque la conception du rapport le permet.
Pour plus d'informations sur les rapports, voir Créer des analyses.