Ottimizzazione dei cubi BSO

L'ottimizzazione dei cubi BSO consente di ridurre le dimensioni del database e prevede i seguenti processi:

  • Eseguire una ristrutturazione esplicita.
  • Eseguire il report di analisi blocco Essbase per individuare i valori ripetuti e i valori zero nel cubo BSO.
  • Sostituire i blocchi zero con blocchi #missing.
  • Utilizzare l'operatore di consolidamento Never per i membri con tipo dati smartlist, data, testo e percentuale.

Esecuzione di una ristrutturazione esplicita dei cubi

In Planning è possibile eseguire una ristrutturazione esplicita dei cubi manualmente o tramite un job. È inoltre possibile ristrutturare i cubi utilizzando il comando restructureCube di EPM Automate o l'API REST di Ristrutturazione del cubo.

Note:

  • Non si tratta di un aggiornamento del database, ma di una ristrutturazione densa esplicita del cubo.
  • Una ristrutturazione esplicita rimuove i blocchi #missing per ridurre le dimensioni del database BSO.

Per ristrutturare il cubo utilizzando Calculation Manager, procedere come segue.

  1. In Navigator, selezionare Regole in Creazione e gestione per aprire Calculation Manager.
  2. Selezionare Azioni e quindi Proprietà database.
  3. In Vista Enterprise espandere il database contenente il cubo che si desidera ristrutturare.
  4. Fare clic con il pulsante destro del mouse sul cubo che si desidera ristrutturare e quindi selezionare Ristruttura database.

Analisi dei dati in un cubo

Per iniziare, generare il report di analisi blocco Essbase. Fare riferimento alle fonti di informazione seguenti.

Note:

Il cubo viene impostato sulla modalità di sola lettura quando i dati del cubo vengono esportati nel file di esportazione utilizzato come origine per la generazione del report di analisi blocco Essbase. A seconda delle dimensioni del cubo, l'esportazione può richiedere tempo. Per eseguire questa analisi, è pertanto consigliabile clonare l'istanza in un'istanza di test.

Il report di analisi blocco Essbase fornisce informazioni sulle tre aree indicate di seguito.

  1. Percentuale di blocchi con solo valori zero, che mostra i blocchi che contengono solo valori zero come una percentuale di tutti i blocchi contenuti nel file di esportazione.
  2. Percentuale di celle solo con valori vicini a zero, che visualizza la percentuale di celle con valori vicini a zero (ad esempio, 0,000000001604) in blocchi.

  3. Primi 10 valori di celle numeriche ripetuti per percentuale di celle numeriche, che mostra i primi 10 valori ripetuti come percentuale di tutti i valori nel file di esportazione.
  4. Prime 100 combinazioni di membri densi con valori ripetuti, che mostra le prime 100 combinazioni dense con valori ripetuti nel cubo. Nella colonna Valore cella è riportato un valore per ogni membro, nell'ordine in cui appaiono nella gerarchia, come colonna separata. Ad esempio, se Periodo si riferisce alla colonna, ci saranno colonne specifiche per mese (gennaio, febbraio e così via). Altre dense dimensioni dense compaiono nelle righe. Questo dovrebbe aiutare a identificare le posizioni dei valori ripetuti.

Conversione in zeri dei valori vicini a zero in un cubo BSO

Per rimuovere i valori vicini a zero o molto piccoli nelle dimensioni sparse nel cubo BSO, utilizzare la funzione @round o @truncate, che li trasforma in zeri. Questi valori zero possono quindi essere rimossi, sostituendoli con blocchi #missing. Fare riferimento alla sezione Rimozione dei blocchi contenenti zero in un cubo BSO.

Per convertire in zeri i valori vicini a zero, procedere come segue.

  1. Creare una regola business per arrotondare o troncare a zero i valori vicini a zero o molto piccoli.

    Configurare l'ambiente della regola business per l'ottimizzazione della regola. Questa regola è attualmente impostata per essere eseguita al livello 0. Dopo che i valori vicini a zero vengono convertiti in zeri e cancellati dal cubo (fare riferimento alla sezione successiva), tali valori verranno cancellati anche dai membri di livello superiore durante l'aggregazione successiva se SET AGGMISSG è abilitato.

    SET UPDATECALC OFF;
    SET CREATENONMISSINGBLK OFF;
    SET CREATEBLOCKONEQ OFF;
    FIXPARALLEL(NumberThreads, @RELATIVE("SparseDim",0))
    FIX on all level 0 sparse dimension @RELATIVE(SparseDim,0)
    

    Note:

    • Benché UPDATECALC, CREATENONMISSINGBLK e CREATEBLOCKONEQ siano disabilitati per impostazione predefinita, Oracle consiglia di disattivarli esplicitamente nella regola business.
    • Assicurarsi di sostituire "SparseDim" con i nomi delle dimensioni sparse in cui è necessario sostituire i blocchi zero.
    • Utilizzare FIXPARALLEL per migliorare le performance, ad esempio FIXPARALLEL(4, @RELATIVE("Scenario",0)).
    • Assicurarsi di specificare ENDFIXPARALLEL.
  2. Utilizzare uno dei pattern di calcolo ottimizzati riportati di seguito per modificare i valori vicini a zero in valori zero. Selezionare il pattern di calcolo con performance migliori a seconda della struttura della dimensione, del modello di dati e dei processi.

    Pattern di calcolo 1 (per il calcolo di dimensioni dense o sparse)

    Questo calcolo modifica i valori vicini a zero in zeri.

    "DenseMbr" = @round("DenseMbr",<Insert Decimal Place>);
    "SparseMbr" = @round("SparseMbr ",<Insert Decimal Place>);
    

    Pattern di calcolo 2 (per membri densi solo in modalità blocco)

    "DenseBlockHeader" (
        @CALCMODE(BLOCK);
           "DenseMbr" =@round("DenseMbr",<Insert Decimal Place>);
    )
    

    Note:

    Sostituire DenseMbr, SparseMbr e DenseBlockHeader con nomi effettivi.

    Dopo aver eseguito questa regola, rimuovere gli zeri risultanti. Per le istruzioni, fare riferimento alla sezione Rimozione dei blocchi contenenti zero in un cubo BSO.

Rimozione dei blocchi contenenti zero in un cubo BSO

Iniziare con la rimozione dei blocchi zero nelle dimensioni sparse del cubo sostituendoli con blocchi #missing.

Per sostituire i blocchi zero con blocchi #missing, procedere come segue.

  1. Creare una regola business per sostituire i blocchi zero con blocchi #missing.

    Impostare l'ambiente della regola business per l'ottimizzazione della seguente regola business:

    SET UPDATECALC OFF;
    SET CREATENONMISSINGBLK OFF;
    SET CREATEBLOCKONEQ OFF;
    FIXPARALLEL(NumberThreads, @RELATIVE("SparseDim",0))
    FIX on all level 0 sparse dimension @RELATIVE(SparseDim,0)
    

    Note:

    • Anche se UPDATECALC, CREATENONMISSINGBLK e CREATEBLOCKONEQ sono disabilitati per impostazione predefinita, è consigliabile disattivarli in modo esplicito nella regola business.
    • Assicurarsi di sostituire "SparseDim" con i nomi delle dimensioni sparse in cui è necessario sostituire i blocchi zero.
    • Utilizzare FIXPARALLEL per migliorare le performance, ad esempio FIXPARALLEL(4, @RELATIVE("Scenario",0)).
    • Assicurarsi di specificare ENDFIXPARALLEL.
  2. Utilizzare uno dei seguenti pattern di calcolo ottimizzati per modificare i blocchi zero in blocchi #missing. Selezionare il pattern di calcolo con performance migliori a seconda della struttura della dimensione, del modello di dati e dei processi.

    Pattern di calcolo 1 (per il calcolo di dimensioni dense o sparse)

    Questo calcolo restituisce il valore originale e modifica i valori zero in #missing.

    "DenseMbr" = "DenseMbr" * "DenseMbr" / "DenseMbr";
    "SparseMbr" = "SparseMbr" * "SparseMbr" / "SparseMbr";

    Pattern di calcolo 2 (per membri densi solo in modalità blocco)

    "DenseBlockHeader" (
        @CALCMODE(BLOCK);
           IF ("DenseMbr" == 0) 
               "DenseMbr" = #Missing;
           ENDIF

    Note:

    sostituire DenseMbr, SparseMbr e DenseBlockHeader con nomi effettivi.

Utilizzo dell'operatore di consolidamento Never per i membri con tipo di dati SmartList, Date, Text e Percentage

I membri delle dimensioni il cui tipo di dati è smartlist, data, testo e percentuale devono utilizzare l'operatore di consolidamento Never. L'utilizzo dell'operatore di consolidamento Addition comporta l'incremento delle dimensioni dei cubi senza l'aggiunta di alcun valore. L'utilizzo dell'operatore di consolidamento Ignore eviterà solo l'aggiunta all'interno della dimensione del membro, ma non eviterà il rollup dei valori di altre dimensioni. Questo scenario può potenzialmente creare blocchi non necessari.