Ανάθεση του κανόνα συνάθροισης για σύνολα αναφορών

Αυτό το θέμα περιγράφει τρόπους ρητής ανάθεσης του κανόνα συνάθροισης για σύνολα αναφορών, το οποίο συμβάλλει στη βελτίωση της απόδοσης και προορίζεται ειδικά για τεχνικούς προγραμματιστές που συντάσσουν αναφορές με το Oracle Analytics.

Στο ακόλουθο σχήμα εμφανίζεται ένα παράδειγμα όπου ο ορισμός αναφοράς είναι έτος, μήνας και περιοχή πελάτη, με τον δείκτη μέτρησης Διακριτό πλήθος πελατών με παραγγελίες που ορίζεται ως το διακριτό πλήθος πελατών με παραγγελίες.

Ακολουθεί η περιγραφή για GUID-4E9DB43C-F827-4BBB-A94D-5A91F3626C72-default.jpg
.jpg''

Το λογικό ερώτημα μοιάζει ως εξής:

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

Το φυσικό ερώτημα που δημιουργείται μοιάζει ως εξής:

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

Η συνολική τιμή, 480, είναι το άθροισμα των συστατικών τιμών, 182 + 113 + 185. Η έκφραση λογικού ερωτήματος που υπολογίζει το σύνολο είναι: “REPORT_AGGREGATE("A - Sample Sales"."Counts"."32 # of Cust with Orders (Cnt Distinct)" BY ) s_3”.

Όταν χρησιμοποιείται η συνάρτηση REPORT_AGGREGATE , το σύνολο υπολογίζεται ανεξάρτητα από τις συστατικές τιμές. Ωστόσο, για αυτήν τη σχεδίαση αναφοράς, το σωστό σύνολο μπορεί να υπολογιστεί από τα συστατικά στοιχεία για αυτήν την αναφορά.

Εάν επεξεργαστείτε τον τύπο στήλης για να αλλάξετε την επιλογή Κανόνας συνάθροισης (Σειρά συνόλων) από Σύνθετη συνάθροιση server σε Άθροισμα, το λογικό και το φυσικό ερώτημα SQL αλλάζει.

Το παρακάτω σχήμα εμφανίζει την αρχική συνάθροιση.

Ακολουθεί η περιγραφή για GUID-96FB697B-24F7-41A9-8678-F99921E5BB19-default.png
.png''

Το παρακάτω σχήμα εμφανίζει την τροποποιημένη συνάθροιση.

Ακολουθεί η περιγραφή για GUID-ED289D12-C0BD-4588-B288-2069EAB3EB1D-default.png
.png''

Το τροποποιημένο λογικό ερώτημα SQL πλέον έχει 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

Αυτό είναι το φυσικό ερώτημα που δημιουργείται:

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

Η ίδια επιλογή για ρητό ορισμό της συνάθροισης είναι διαθέσιμη στα βιβλία εργασίας. Ανατρέξτε στην ενότητα Μορφοποίηση αριθμητικών τιμών απεικονίσεων. Για αυτό το παράδειγμα, για τη στήλη Διακριτό πλήθος πελατών με παραγγελίες, αλλάξτε τη Μέθοδο συνάθροισης σε Άθροισμα.

Ελέγξτε τις αναφορές σας, για να βεβαιωθείτε ότι χρησιμοποιείται ο βέλτιστος κανόνας συνάθροισης για την αναφορά. Χρησιμοποιήστε έναν ρητό κανόνα συνάθροισης όταν το επιτρέπει η σχεδίαση της αναφοράς.

Για περισσότερες πληροφορίες σχετικά με τις αναφορές, δείτε το θέμα Δημιουργήστε Αναλύσεις.