Calcolo intelligente dei blocchi di dati

Informazioni sulla gestione dei calcoli densi e sparsi, dei calcoli concorrenti e di più calcoli dei passi da parte di Intelligent Calculation di Essbase.

Essbase crea un blocco di dati per ogni combinazione univoca di membri di dimensioni sparse, a condizione che esista almeno un valore di dati per la combinazione. Ogni blocco di dati rappresenta tutti i valori dei membri dimensione completi per la combinazione univoca di membri dimensione sparsa.

Ad esempio, nel database Sample Basic, le dimensioni Market e Product sono sparse. Pertanto, il blocco di dati New York -> Colas rappresenta tutti i valori membro nelle dimensioni Anno, Misure e Scenario per la combinazione sparsa New York -> Colas.

Le sezioni successive presuppongono di avere familiarità con i concetti di blocchi di dati di livello superiore, livello 0 e input, come descritto in Storage dei dati nei blocchi di dati.

Calcolo intelligente delle dimensioni dense

Quando si calcola una dimensione densa e non si utilizza un comando FIX, Essbase calcola almeno alcuni valori di dati in ogni blocco di dati nel database. In termini di stato Calcolo intelligente, i blocchi vengono contrassegnati come puliti da un calcolo denso.

Ad esempio, il seguente script di calcolo calcola la dimensione Anno, che è densa.

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Year);

Poiché Anno è denso, ogni blocco del cubo include membri di Anno. Pertanto, Essbase calcola ogni blocco.

Quindi, poiché lo script utilizza il comando SET CLEARUPDATESTATUS AFTER, Essbase contrassegna tutti i blocchi di dati nel cubo come puliti.

Calcolo intelligente delle dimensioni sparse

Quando si calcola una dimensione sparsa, Essbase potrebbe non essere necessario calcolare ogni blocco di dati nel database. Scopri in che modo lo stato di aggiornamento pulito/sporco di Intelligent Calculation può influire sullo stato dei blocchi di livello 0 e superiore e su come evitare calcoli non necessari.

Ad esempio, lo script di calcolo seguente si basa sul database di base di esempio:

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);

Questo script calcola la dimensione Prodotto, che è una dimensione sparsa. Poiché il prodotto è sparso, esiste un blocco di dati per ogni membro della dimensione Prodotto. Ad esempio, esiste un blocco di dati per New York -> Colas e un altro per New York -> 100-10.

Effetti livello 0

Se si caricano i dati nel cubo al livello 0, i blocchi interessati vengono contrassegnati come modificati. Se successivamente si calcola solo una dimensione sparsa, i blocchi di livello 0 non vengono calcolati e rimangono sporchi. Quando si ricalcola solo una dimensione o dimensioni sparse, Essbase ricalcola i blocchi di dati di livello superiore.

Nota

Essbase calcola i blocchi di dati di livello 0 se a un membro sparso corrispondente di livello 0 è applicata una formula.

Il blocco dati New York -> 100-10 è un blocco di livello 0; non rappresenta un membro padre in una dimensione sparsa (Market o Product). I valori dei dati per New York -> 100-10 sono valori di input e vengono caricati nel database. Pertanto, Essbase non deve calcolare questo blocco di dati. Inoltre, Essbase non contrassegna il blocco dati per New York -> 100-10 come pulito, anche se lo script utilizza il comando SET CLEARUPDATESTATUS AFTER.

Effetti di livello superiore

Quando Essbase calcola una dimensione sparsa, ricalcola un blocco dati di livello superiore se il blocco dipende da uno o più blocchi figlio sporchi.

Colas è un membro di livello padre nella dimensione Prodotto. Essbase deve calcolare i valori per Colas, pertanto Essbase calcola questo blocco di dati. Poiché lo script utilizza il comando SET CLEARUPDATESTATUS AFTER, Essbase contrassegna il blocco di dati come pulito.

Calcolo non necessario

È possibile evitare calcoli non necessari calcolando almeno una dimensione densa. Quando si calcola una dimensione densa senza utilizzare il comando FIX, i valori dei dati vengono calcolati in ogni blocco, inclusi i blocchi di livello 0. Quindi i blocchi di livello 0 sono contrassegnati come puliti.

Calcolo intelligente e calcoli concorrenti

Prendere precauzioni con i calcoli concorrenti quando l'opzione Calcolo intelligente è abilitata. Se più calcoli tentano di calcolare gli stessi blocchi, Essbase potrebbe non ricalcolare i blocchi di dati perché sono già contrassegnati come puliti.

Nell'esempio seguente, in base al database Sample Basic, Actual e Budget sono membri della dimensione dense Scenario. Poiché lo scenario è denso, ogni blocco del database contiene valori effettivi e budget. Se l'utente 1 esegue il seguente script di calcolo, Essbase calcola i valori effettivi per tutti i blocchi di dati che rappresentano New York.

SET CLEARUPDATESTATUS AFTER;
FIX("New York", Actual)
   CALC DIM(Product, Year);
ENDFIX

Essbase contrassegna i blocchi di dati calcolati come puliti, anche se non sono stati calcolati tutti i valori in ciascun blocco calcolato. Ad esempio, i valori del budget non sono stati calcolati.

Se l'utente 2 esegue il seguente script di calcolo per calcolare i valori del budget per New York, Essbase non ricalcola i blocchi specificati perché sono già contrassegnati come puliti. I risultati del calcolo per il budget non sono corretti.

SET CLEARUPDATESTATUS AFTER;
FIX("New York", Budget)
   CALC DIM(Product, Year);
ENDFIX

Un modo per risolvere questo problema è rendere sparsa la dimensione Scenario. Quindi i valori Effettivo e Budget sono in blocchi diversi; ad esempio, New York -> Colas -> Effettivo e New York -> Colas -> Budget. In questo caso, il secondo script di calcolo calcola correttamente il blocco Budget.

L'esecuzione di calcoli concorrenti potrebbe richiedere un aumento della cache dei dati.

Calcolo intelligente e calcoli a più passaggi

Gli script di calcolo di Essbase che richiedono più passaggi possono essere incompatibili con l'uso di Calcolo intelligente in alcune situazioni.

Quando Essbase calcola i blocchi di dati in un primo passaggio di calcolo in un database, contrassegna i blocchi di dati come puliti. Se si tenta di calcolare gli stessi blocchi di dati in un passaggio successivo con l'opzione Calcolo intelligente abilitata, Essbase non ricalcola i blocchi di dati perché sono già contrassegnati come puliti.

Quando possibile, Essbase calcola un database in un unico passaggio di calcolo nel database.

Quando si utilizza uno script di calcolo per calcolare un database, il numero di calcoli superati da Essbase dipende dallo script di calcolo.

Si supponga, ad esempio, che Essbase calcoli i blocchi al primo passaggio di calcolo e li contrassegni come puliti. Se si tenta di calcolare gli stessi blocchi in un passaggio successivo quando l'opzione Calcolo intelligente è abilitata, Essbase non ricalcola i blocchi di dati perché sono già contrassegnati come puliti.

Esempi e soluzioni per i calcoli a più passaggi

Questi esempi descrivono situazioni che producono risultati di calcolo Essbase errati, con soluzioni per ottenere risultati corretti. Si basano sul database di base di esempio e presuppongono che l'opzione Calcolo intelligente sia attivata.

Esempio 1: calcolo intelligente e due passaggi

Lo script di calcolo seguente esegue un calcolo predefinito e quindi un calcolo a due passaggi:

CALC ALL;
CALC TWOPASS;

Errore

Essbase calcola i blocchi di dati danneggiati nel database e contrassegna tutti i blocchi di dati come puliti. Essbase deve quindi ricalcolare i membri contrassegnati come due passaggi nella dimensione contrassegnata come account. Tuttavia, Essbase non ricalcola i blocchi di dati specificati perché sono già contrassegnati come puliti. I risultati del calcolo non sono corretti.

Soluzione

È possibile calcolare i risultati corretti disabilitando Calcolo intelligente per il calcolo a due passaggi.

Esempio 2: SET CLEARUPDATESTATUS e FIX

Questo script di calcolo calcola i valori dei dati per New York. Il calcolo si basa sulla dimensione Prodotto:

SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Product);
ENDFIX
CALC TWOPASS;

Errore

Essbase esegue i processi riportati di seguito.

  1. Essbase esegue cicli nel database per calcolare i blocchi di dati danneggiati che rappresentano New York. Il calcolo si basa sulla dimensione Prodotto. Pertanto, Essbase calcola solo i blocchi che rappresentano un membro padre nella dimensione Prodotto (ad esempio, New York -> Colas, New York -> Root Beer e New York -> Fruit Soda), quindi calcola solo le aggregazioni e le formule per la dimensione Prodotto.

  2. Poiché viene utilizzato il comando SET CLEARUPDATESTATUS AFTER, Essbase contrassegna i blocchi di dati calcolati come puliti, sebbene non tutti i valori di dati in ciascun blocco calcolato siano stati calcolati.

  3. Essbase deve ricalcolare i membri contrassegnati come due passaggi nella dimensione contrassegnati come conti; tuttavia, alcuni di questi blocchi di dati sono già contrassegnati come puliti dal calcolo nel passo precedente. Essbase non ricalcola i blocchi di dati contrassegnati come puliti. I risultati del calcolo non sono corretti.

Soluzione

È possibile calcolare i risultati corretti disabilitando Calcolo intelligente per il calcolo a due passaggi.

Esempio 3: SET CLEARUPDATESTATUS e due comandi CALC DIM

Questo script di calcolo basa il calcolo del database sulle dimensioni Prodotto e Anno. Poiché vengono utilizzati due comandi CALC DIM, Essbase esegue due passaggi di calcolo nel database:

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product);
CALC DIM(Year);

Errore

Essbase esegue i processi riportati di seguito.

  1. Essbase esegue cicli nel database per calcolare i blocchi di dati danneggiati. Il calcolo si basa sulla dimensione Prodotto, come nell'esempio 2.

  2. Poiché viene utilizzato il comando SET CLEARUPDATESTATUS AFTER, Essbase contrassegna i blocchi di dati calcolati come puliti, sebbene non tutti i valori di dati in ciascun blocco calcolato siano stati calcolati.

  3. Essbase deve ricalcolare i blocchi di dati. Il ricalcolo si basa sulla dimensione Anno. Tuttavia, come risultato del calcolo nel passo precedente, alcuni blocchi di dati sono già contrassegnati come puliti e Essbase non li ricalcola. I risultati del calcolo non sono corretti.

Soluzione

È possibile calcolare i risultati corretti utilizzando un comando CALC DIM per calcolare le dimensioni Prodotto e Anno. Essbase calcola entrambe le dimensioni in un unico passaggio di calcolo nel database.

Il seguente script di calcolo calcola i risultati corretti:

SET CLEARUPDATESTATUS AFTER;
CALC DIM(Product, Year);

Nota

Quando si calcolano più dimensioni in un comando CALC DIM, Essbase calcola le dimensioni nell'ordine di calcolo predefinito e non nell'ordine in cui vengono elencate nel comando. Vedere Ordine di calcolo membri.

Esempio 4: due script di calcolo

In questo esempio vengono calcolati i valori dei dati per New York, ma vengono calcolati in base a due dimensioni utilizzando due script di calcolo. Il primo script di calcolo calcola la dimensione Prodotto:

SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Product);
ENDFIX

Essbase calcola i blocchi di dati che includono New York. Poiché il calcolo si basa sulla dimensione Prodotto, Essbase calcola solo i blocchi sporchi che includono un membro padre nella dimensione Prodotto (ad esempio, New York -> Colas, New York -> Root Beer e New York -> Fruit Soda) e calcola solo le aggregazioni e le formule per la dimensione Prodotto.

A causa del comando CLEARUPDATESTATUS AFTER, Essbase contrassegna i blocchi di dati calcolati come puliti, sebbene non tutti i valori di dati in ciascun blocco calcolato siano stati calcolati.

Il secondo script di calcolo calcola la dimensione Anno:

SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Year);
ENDFIX

Essbase calcola i blocchi di dati che rappresentano New York. Poiché il calcolo si basa sulla dimensione Anno, che è una dimensione densa, Essbase deve calcolare tutti i blocchi di dati che includono New York, sebbene all'interno di ciascun blocco Essbase calcoli solo le aggregazioni e le formule per la dimensione Anno.

Errore

Come risultato del primo calcolo, alcuni blocchi di dati per New York sono già contrassegnati come puliti. Essbase non ricalcola questi blocchi di dati con il secondo script di calcolo perché i blocchi di dati sono contrassegnati come puliti. I risultati del calcolo non sono corretti.

Soluzione

È possibile calcolare i risultati corretti dicendo a Essbase di non contrassegnare i blocchi di dati calcolati come puliti. Il seguente script di calcolo calcola i risultati corretti:

SET CLEARUPDATESTATUS OFF;
FIX("New York")
   CALC DIM(Product);
ENDFIX
SET CLEARUPDATESTATUS AFTER;
FIX("New York")
   CALC DIM(Year);
ENDFIX

Con il comando SET CLEARUPDATESTATUS OFF, Essbase calcola i blocchi di dati danneggiati ma non li contrassegna come puliti, a differenza del comando SET CLEARUPDATESTATUS AFTER.

Questa soluzione presuppone che i blocchi di dati non siano contrassegnati come puliti da un precedente calcolo parziale del database.

È possibile assicurarsi che tutti i blocchi di dati vengano calcolati, indipendentemente dal loro stato, disabilitando il calcolo intelligente. Il seguente script di calcolo calcola tutti i blocchi di dati specificati, indipendentemente dal loro stato pulito o sporco:

SET UPDATECALC OFF;
FIX("New York")
   CALC DIM(Year, Product);
ENDFIX

Poiché il comando SET CLEARUPDATESTATUS AFTER non è stato utilizzato, Essbase non contrassegna i blocchi di dati calcolati come puliti.