Asignación de la regla de agregación para totales de informe

En este tema se describen las formas de asignar explícitamente la regla de agregación para los totales de informe, lo cual contribuye a mejorar el rendimiento y se ha diseñado específicamente para los desarrolladores técnicos que escriben informes mediante Oracle Analytics.

En la siguiente figura se muestra un ejemplo en el que la definición de informe es el año, el mes y la región del cliente con la métrica Count Distinct of Customers with Orders que se define como un recuento de distintos de clientes con órdenes.

A continuación se muestra la descripción de GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg
.jpg

La consulta lógica tiene el siguiente aspecto:

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 consulta física que se genera tiene el siguiente aspecto:

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

El valor total, 480, es la suma de los valores constituyentes, 182 + 113 + 185. La expresión de consulta lógica que calcula el total es: “REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.

Cuando se utiliza REPORT_AGGREGATE, el total se calcula con independencia de los valores constituyentes. Sin embargo, para este diseño de informe, el total correcto se puede calcular a partir de los constituyentes para este informe.

Si edita la fórmula de columna para cambiar Aggregation Rule (Totals Row) de Server Complex Aggregate a Sum, se modifica la consulta SQL lógica y física.

En la siguiente figura se muestra la agregación original.

A continuación se muestra la descripción de GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png
.png

En la siguiente figura se muestra la agregación modificada.

A continuación se muestra la descripción de GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png
.png

La consulta SQL lógica modificada tiene ahora 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

Esta es la consulta física que se genera:

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 misma opción para definir de forma explícita la agregación está disponible en los libros de trabajo. Consulte Aplicación de formato a valores numéricos de visualizaciones. En este ejemplo, para la columna Count Distinct Customers with Orders, cambie el Método de agregación a Suma.

Revise los informes para comprobar que se está agregando la mejor regla de agregación para el informe. Utilice una regla de agregación explícita cuando el diseño del informe lo permita.

Para obtener más información sobre los informes, consulte Creación de análisis.