sabato 30 marzo 2013

Riclassificare i ricavi per fasce e visualizzare i ricavi medi per fascia e offerta

E' possibile utilizzare una IF per riclassificare ad esempio i ricavi in Euro dei nostri clienti, per dividerli in fasce di ricavo, e creare una matrice che per ogni offerta e quindi per ogni fascia di ricavo ci dica nell'incrocio degli assi qual'è il ricavo medio che ci danno i clienti appartenenti a quella fascia di ricavo / offerta.
Non è difficile e con due formule è possibile ottenere la fascia di ricavo da mettere in riga nella nostra matrice, e la media per cliente.

Passo 1
Creiamo la formula che costituisce la fascia di ricavo e inseriamola in una variabile che chiameremo Range Ricavi.
La formula ha la seguente sintassi:
=(IF([Supplied Euro Amount]>80;">80";IF([Supplied Euro Amount]>74,99;"75-80";IF([Supplied Euro Amount]>69,99;"70-75";IF([Supplied Euro Amount]>64,99;"65-70";IF([Supplied Euro Amount]>59,99;"60-65";IF([Supplied Euro Amount]>54,99;"55-60";IF([Supplied Euro Amount]>49,99;"50-55";IF([Supplied Euro Amount]>44,99;"45-50";IF([Supplied Euro Amount]>39,99;"40-45";IF([Supplied Euro Amount]>34,99;"35-40";IF([Supplied Euro Amount]>29,99;"30-35";IF([Supplied Euro Amount]>24,99;"25-30";IF([Supplied Euro Amount]>19,99;"20-25";IF([Supplied Euro Amount]>14,99;"15-20";IF([Supplied Euro Amount]>9,99;"10-15";IF([Supplied Euro Amount]>4,99;"05-10";"00-05")))))))))))))))))




Passo 2
Creiamo la matrice; in riga mettiamo la nostra nuova variabile [Range Ricavi]: si tratta di una variabile che costringerà la matrice ad aggregare i dati che metteremo nel corpo. In colonna mettiamo l'oggetto [Riclass Mktg Offer 1] che ci arriva dall'universo (questo oggetto in pratica contiene le offerte per i clienti), in sezione mettiamo l'oggetto [Class Unita] che ci arriva dall'universo (classifica i clienti per classe di appartenenza).

Passo 3
Nel corpo della matrice digitiamo la seguente formula
=Media([Supplied Euro Amount] In ([Customer No];[Range Ricavi];[Riclass Mktg Offer 1];[Class Unita])

In pratica la formula che calcola la media usa l'operatore In () per contestualizzare il calcolo della media; la contestualizzazione costringe la media a lavorare per tutte le dimensioni che sono coinvolte nella matrice in riga, in colonna e in sezione (pagina), ma aggiunge una dimensione di analisi, cioè l'oggetto [Customer No] che arriva dall'universo, in questo modo la media sarà calcolata all'interno della matrice per singolo cliente, e poi inserita nel corretto incrocio di riga e colonna, cioè nel corretto incrocio di [Range Ricavi], [Riclass Mktg Offer 1] e [Class Unita] (che è in sezione).
L'operatore In () usato con una dimensione di analisi aggiuntiva che non viene usata nel report, costringe la media ad andare in dettaglio, in questo caso sul singolo cliente ([Customer No]), e calcolare quindi la media per cliente.



Le immagini e gli oggetti si riferiscono a casi reali, ecco perchè i nomi degli oggetti spesso sono un pò particolari, e i numeri mascherati. Seleziona le immagini per vederle meglio e ingrandire.




giovedì 21 marzo 2013

Ultimo mese che contiene dati

Se avete una query da universo che in Web Intelligence restituisce righe anche per il futuro, ad esempio per i mesi futuri, anche se in realtà per il futuro non sono disponibili degli indicatori, ma solo i nomi dei mesi, perchè avete un calendario che restituisce nella vostra query righe anche per i mesi futuri, allora probabilmente avrete un problema: capire, dopo ogni estrazione, fino a quale mese gli indicatori sono valorizzati... sembra stupido, ma conoscere fino a quale mese i dati sono valorizzati, consente poi di fare diverse cose, quindi se vi siete trovati in questa situazione ecco la formula che può aiutarvi.

=Max([mese]) Dove (NOT(ÈNullo([fatturato])))

Questa formula restituisce il nome di un mese, e cioè il massimo mese disponibile nella tabella, ma prima esclude tutte le righe dove l'indicatore (fatturato) è nullo, cioè l'indicatore relativo alle righe nel futuro, nei mesi futuri nel nostro esempio, quindi la formula ci dirà il nome dell'ultimo mese che ha un indicatore valorizzato (fatturato).

mercoledì 13 marzo 2013

Estrarre gli ultimi X mesi rolling

In Web Intelligence è possibile creare una quey che contiene la nostra analisi e fare in modo che i dati estratti siano sempre relativi agli ultimi X mesi rolling; se lato universo non è disponibile una condizione che fa questo in automatico, o un oggetto che ci aiuta a creare in autonomia una condizione variabile che estrae gli ultimi X mesi, la seguente soluzione può rendere completamente autonomi.

Passo 1
Creare una query che in selezione ha il mese e nella zona dedicata alle condizioni ha una classifica; la classifica si può attivare selezionando in alto a destra nella sezione dedicata alle condizioni il tasto con la stellina

Impostare la condizione chidendo tramite la tendina i "Primi" 13 mesi, digitando il 13 a mano, trascinare nella condizione lo stesso oggetto mese usato in alto in selezione, inserire sulla parte destra della condizione un indicatore
Nelle Proprietà della query togliere la selezione dall'opzione che costringe la query a prendere le righe duplicate (tutte le righe); in questo modo il sistema prenderà le righe distinte (utile quindi per ottenere un semplice elenco di mesi dall'ultimo).

Passo 2
Creare una nuova query che contiene gli oggetti che servono per la nostra analisi.
Nella zona dedicata alle condizioni selezionare il mese, selezionare l'operatore In elenco e dalla tendina scegliere la voce Risultato di un altra query. Si aprirà un box che mostra gli oggetti coinvolti dalle altre query del report, selezionare quindi l'oggetto mese.
Questa funzione è disponibile su Web Intelligence via Web.


La condizione si presenterà come segue, menzionando quindi l'universo da cui attinge tramite l'altra query

Il report proposto avrà i mesi richiesti partendo dall'ultimo selezionando andando indietro i mesi richiesti, nel nostro esempio 13 mesi. E' possibile convertire la condizione nella prima query in un prompt, in modo che domandi sempre all'utilizzatore del report quanti mesi all'indietro prendere, 1, 3 o 13 ad esempio.

sabato 9 marzo 2013

Creazione di una fascia di ricavo in un report multiquery

Vediamo come creare una fascia di ricavo (vedi immagine) per utilizzarla in un report multiquery dove una query ha più clienti dell’altra. Il passo 1 può anche essere usato come esempio per una riclassifica di un importo per creare delle fasce di clienti, funziona subito in un report mono query.

Passo 1: creazione di una nuova variabile di tipo dimensione, il nome della variabile è Range Ricavi (1)

Formula della variabile:
=(IF([Supplied Euro Amount]>80;">80";IF([Supplied Euro Amount]>74,99;"75-80";IF([Supplied Euro Amount]>69,99;"70-75";IF([Supplied Euro Amount]>64,99;"65-70";IF([Supplied Euro Amount]>59,99;"60-65";IF([Supplied Euro Amount]>54,99;"55-60";IF([Supplied Euro Amount]>49,99;"50-55";IF([Supplied Euro Amount]>44,99;"45-50";IF([Supplied Euro Amount]>39,99;"40-45";IF([Supplied Euro Amount]>34,99;"35-40";IF([Supplied Euro Amount]>29,99;"30-35";IF([Supplied Euro Amount]>24,99;"25-30";IF([Supplied Euro Amount]>19,99;"20-25";IF([Supplied Euro Amount]>14,99;"15-20";IF([Supplied Euro Amount]>9,99;"10-15";IF([Supplied Euro Amount]>4,99;"05-10";"00-05")))))))))))))))))


Passo 2: utilizzo della variabile in un blocco di tipo matrice

Nel seguente esempio abbiamo due query: la prima query fornisce tutti i clienti attivi, indipendentemente dal ricavo che hanno (supplied), la seconda query fornisce i ricavi (supplied) dei clienti.

Complessità del report che si vuole realizzare: la seconda query ha meno clienti della prima perchè ha solo i clienti che hanno un ricavo (supplied); per usare la fascia ottenuta con la variabile riportata sopra è necessario modificare le proprietà del documento per avere i valori estesi tramite l’unione delle due query. Nella matrice è comunque necessario rafforzare la cosa contestualizzando la formula del conteggio usando l’operatore “IN" che consente di contestualizzare un indicatore rispetto a delle dimensioni di analisi; le dimensioni di analisi scelte sono le stesse che la matrice ha in riga e colonna, quindi non doveva essere necessario contestualizzare l'indicatore in questo modo, perchè le intestazioni di colonna e riga funzionano già da contestualizzazione dell'indicatore, ma senza contestualizzazione nel corpo della matrice il conteggio perde i clienti senza ricavo (supplied), che deve andare nella fascia "00-05", mentre il conteggio lavora bene sul totale per tutte le tecnologie.


L'immagine mostra nella barra delle formule la contestualizzazione e a destra l'opzione da attivare

Ricordi: Business Objects e la Oracle OLAP Option

Si tratta di un ricordo perchè parliamo del 2004, per la precisione maggio 2004; grazie al supporto dei colleghi di Oracle Italia e Business Objects Italia è stato possibile realizzare due eventi, a Roma e Milano, organizzati da Oracle Italia con il supporto di Business Objects Italia e The Technology Partners (società per cui io lavoravo). Nei due eventi abbiamo mostrato a circa 200 persone come era possibile realizzare un cubo di dati grazie alla Oracle OLAP Option ed interrogarlo con un universo Business Objects. Io mi sono occupato dello sviluppo della parte Business Objects e dello speech lato BO ai due eventi.
Immagine dell'invito ricevuto dai clienti Oracle che hanno partecipato ai due eventi su Roma e Milano
Questa soluzione si basava (probabilmente è implementabile anche oggi) sui seguenti elementi:

  1. un cubo di dati Oracle popoloso
  2. una vista Oracle che esponeva i dati del cubo in modo relazionale (non multidimensionale)
  3. un universo Business Objects che mappava la vista relazionale: l'universo mappava (grazie alla vista) una tabella dei fatti, le relative dimensioni e utilizzava alcuni join fittizi e shortcut join per consentire la creazione di un particolare SQL che la vista relazionale di Oracle utilizzava per interrogare il cubo, anche gli oggetti usavano particolari istruzioni SQL riconoscibili dalla vista relazionale Oracle e quindi dal cubo
I vantaggi dati da questa soluzione erano:
  • semplicità di realizzazione, perchè convertire un DB relazionale in un cubo OLAP e realizzare la vista relazionale che espone il cubo è semplice e veloce, l'universo BO si realizza velocemente ed è possibile convertire un universo esistente che punta ad un relazionale
  • grande velocità nell'accesso ad una notevole mole di dati
  • la possibilità di usare funzioni analitiche Oracle tipiche dei cubi OLAP, chiedendo quindi ai report Web Intelligence di estrarre un periodo temporale e il precedente per esempio, oppure ottenere un totale per tutto un livello dimensionale
Seguono le immagini relative ai passi principali
1.a Modello del cubo Oracle
1.b Dimensioni del cubo Oracle

2. Vista relazionale Oracle che espone i dati del cubo

3.a Join dell'universo Business Objects

3.b SQL degli oggetti creati nell'universo Business Objects

3.c SQL generato da Web Intelligence durante la creazione dei report

3.d Esempio di report realizzato al volo da Web Intelligence