Affectation de la règle d'agrégation pour les totaux de rapport

Cette rubrique décrit les moyens d'affecter explicitement la règle d'agrégation pour les totaux de rapport, ce qui contribue à améliorer les performances. Elle est spécialement destinée aux développeurs techniques qui génèrent des rapports avec Oracle Analytics.

La figure suivante illustre un exemple dans lequel la définition de rapport inclut l'année, le mois et la région client, avec la mesure Count Distinct of Customers with Orders définie comme le nombre distinct de clients avec des commandes.

La description de GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg est la suivante
.jpg

La requête logique doit ressembler à ce qui 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

La requête physique générée doit ressembler à ce qui 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 de requête 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. Dans la conception de ce rapport, le total correct peut toutefois être calculé à partir des valeurs constitutives du rapport.

Si vous modifiez la formule de colonne pour remplacer la valeur de Règle d'agrégation (ligne des totaux) Agrégat complexe de serveurs par Total, les requêtes SQL logique et physique changent.

La figure suivante présente l'agrégation d'origine.

La description de GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png est la suivante
.png

La figure suivante présente l'agrégation modifiée.

La description de GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png est la suivante
.png

La requête SQL logique modifiée comporte à présent 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

La requête physique générée est la suivante :

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 servant à définir explicitement l'agrégation est disponible dans les classeurs . Reportez-vous à Formatage des valeurs numériques des visualisations. Dans cet exemple, pour la colonne Count Distinct Customers with Orders, définissez Méthode d'agrégation sur Somme.

Examinez vos rapports afin de vérifier 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, reportez-vous à Création d'analyses.