giovedì 5 dicembre 2013

Differenza tra periodi

Tramite l'operatore "Dove" abbiamo la possibilità di calcolare la differenza (delta) tra informazioni disponibili su differenti periodi temporali, ad esempio tra differenti settimane; il calcolo può essere comodamente posizionato in una colonna di "footer", per intenderci la colonna che Web Intelligence aggiunge quando chiediamo una somma in una tabella a campi incrociati, evitando quindi di avere invece la differenza all'interno del corpo e vederla quindi ripetuta per ogni periodo temporale.

Nell'esempio che segue abbiamo un report che mostra una tabella a campi incrociati che espone due settimane a confronto, le due settimane messe a confronto sono pilotate da un apposito filtro sulla tabella. Nella colonna di totale dove di solito Web Intelligence inserisce le sue somme automatiche ho sostituito la formula della somma con la seguente formula:

=([Nr Id 00 Risorsa Final] Dove ([Data riferimento]=Max([Data riferimento]) In Blocco)) - ([Nr Id 00 Risorsa Final] Dove ([Data riferimento]=Min([Data riferimento]) In Blocco))

In questo modo il filtro derivante dall'operatore Dove si focalizzerà sulla prima settimana selezionata dal filtro sulla tabella e sulla seconda e quindi calcolerà in modo semplice e veloce la differenza; questa soluzione consente di modificare velocemente il filtro, ad esempio con un controllo di input, ed ottenere sempre la differenza.


mercoledì 27 novembre 2013

Novità introdotte da Web Intelligence 4.1 rispetto alla 3.1

Elenco di seguito le novità più interessanti introdotte da Web Intelligence 4.1 rispetto alla versione 3.1, in molti probabilmente stanno aspettando che la main release 4.x diventi stabile, e quindi probabilmente partono dalla versione 3.1.

  • interfaccia di Web Intelligence Rich Client completamente ridisegnata
  • nuove forme grafiche come: grafico a colonne, mappa calore, mappa di testo, grafico mono barra, waterfall
  • export/import di file excel da 1.000.000 di righe (.XLSX)
  • fit to one page
  • la possibilità di nascondere le colonne di una tabella o una tabella intera, anche sulla base di una formula (esempio: la tabella si nasconde al verificarsi di alune condizioni)
  • nuovo data management dove è possibile vedere velocemente il numero di righe estratte, la durata delle query, duplicare le query, unire le query o cancellarle; selezionando gli oggetti di una query si possono vedere i valori distinti oppure facendo doppio click su una query si può vedere un set tidotto di righe in modalità datasheet
  • gestione dei Template: import ed export di fogli di stile CSS utile per creare un solo template di colori e font e riutilizzarlo in tutti i report
  • semplificata e diretta gestione degli ordinamenti
  • migliorata la cestione della CPU, Web Intelligence Rich Client quando chiude un documento consete già l'apertura di un nuovo report perchè prosegue in backgroud
  • migliorate integrazioni con SAP, è possibile lanciare una query BEx
  • uso dei drill con il tasto (+) vicino all'elemento nel caso di universi OLAP
  • merge delle dimensioni con bottone destro sulla dimensione per velocizzare il merge
  • dall'editor delle formule ora è possibile accedere ai possibili valori di una dimensione, senza doverli digitare a mano
  • si può costringere la query a cancellare gli oggetti non usati nel report
  • link tra una tabella e un grafico: selezionando degli elementi in una tabella si causano dei filtri in un grafico sulla stessa pagina
  • nuovo motore dedicato ai grafici che migliorata la gestione, molte cose si possono modificare velocemente con bottone destro, migliorata la gestione dei colori
  • freeze colums e rows durante la modalità di lettura dei dati
  • copia/incolla degli oggetti e delle query tra documenti diversi
  • preview di un set di dati mentre si prepara la query; i valori possono essere trasformati in condizioni della query tramite bottone destro del mouse
  • nel pannello delle query la funzionalità di ricerca degli oggetti ora filtra la lista degli oggetti dell'universo mostrando solo gli oggetti che corrispondono alla ricerca
  • nuove formule con funzioni che consentono la gestione dei Set e dei Livelli nelle dimensioni nel caso di universi OLAP
  • possibilità di raggruppare i dati in modo semplice e veloce, evitando le riclassifiche nel DB o nell’universo
  • possibilità di salvare nella query le risposte date ad un prompt
  • possibilità di copiare il nome, il tipo e la descrizione di un oggetto per incollari ad esempio in un file di testo o in un documento
Purtroppo parallelamente abbiamo perso la possibilità di creare una crosstab, trascinando una dimensione direttamente sopra l'intestazione di una tabella e la gestione diretta dei filtri complessi di un report (ora tale gestione è diventata un po' più macchinosa e scomoda).

Grafico a barre nella riga della tabella

Segnalo questo video molto interessante che mostra come ottenere un grafico a barre all'interno delle righe di una tabella grazie ad alcune formule e una sapiente formattazione.

Video

sabato 4 maggio 2013

Calendario

Vi è mai successo di estrarre dati da un universo, per esempio per un periodo temporale definito a livello di singolo giorno, e di verificare poi che le date estratte a volte hanno dei buchi? Significa che per un particolare giorno i dati non sono disponibili, questo però crea un difetto visivo brutto esteticamente se si realizza un grafico, o comunque anche in forma tabellare se si portano le date in colonna non si avrà continuità tra le date da sinistra verso destra, rendendo brutta visivamente una eventuale linea temporale.
È possibile risolvere il problema creando una nuova query nel report che ci fornisca una sorta di calendario, che garantisca quindi la presenza di una data per tutti i giorni necessari.

La query calendario può puntare ad un universo, l'importante è essere sicuri che tale query possa fornire tutte le singole date che ci servono, e poi sincronizzare la nuova query con la precedente per data. Sincronizzando, se la prima query ha diverse dimensioni di analisi oltre alla data, sarebbe importante avere la possibilità di sincronizzare le due query per data e per tutte le dimensioni che la prima query include, per evitare poi di avere problemi perchè le due query sono differenti per quanto riguarda le dimensioni di analisi. Ovviamnete se le due query hanno le stesse dimensioni per via della sincronia, si potrebbe allora obiettare che la seconda query è uguale alla prima, e quindi anche questa potrebbe non avere tutte le date necessarie: non è detto, perchè magari la prima query ha dei filtri particolari che la portano a non estrarre tutte le date possibili per il perido analizzato, quindi sulla seconda si possono evitare tali filtri, solo per arrivare ad avere tutte le date necessarie e poter sincronizzare. In questo caso la seconda query può essere un duplicato della prima e poi cambieremo i filtri.

Se non è possibile creare una seconda query su un universo per ottenere tutte le date del periodo interessato è possibile creare un elenco di date in excel e caricare quindi il file excel come nuova query in Web Intelligence Rich Client, sincronizzando la query che punta al file excel con la prima per data dovremmo colmare i buchi delle date mancanti. Se necessario è possibile declinare il file excel per tutte le date e le dimensioni di analisi utili per la sincronia, per non avere problemi di sincronizzazione. Se la moltiplicazione tra le date del calendario nel file excel e le occorrenze delle altre dimensioni eccede un certo numero può darsi che il file excel diventi troppo popoloso e difficoltoso da manutenere, rendendo questa soluzione scomoda.

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

martedì 26 febbraio 2013

Riclassificare tramite Excel le informazioni che arrivano da un universo


E' possibile riclassificare dei valori estratti da un universo utilizzando un file excel esterno, anche se questo file riclassifica i valori dell'universo sulla base di due o più colonne, ecco come fare:

Ovviamente è necessario avere una query che estrare dei dati da un universo, nell'esempio che segue l'universo ci fornisce la "Regione" di appertenenza di un cliente e la relativa "Area", e quindi ci serve un file excel che per ogni coppia di "Regione" e "Area" ci fornisce una terza colonna che serve ad aggregare i dati estratti dall'universo.


(Vedi immagine A)

A1. Dobbiamo creare un nuovo fornitore dati che punta al file excel e dobbiamo gestire il fornitore come da immagine; è importante che la terza colonna, quella che serve a fare la riclassifica per aggregare, sia definita come Dettaglio, e quindi sia associata ad una delle altre due colonne, che devono essere definite come Dimensioni di analisi. Associamo il dettaglio alla Dimensione che ha il maggiore dettaglio

A2. Quando abbiamo estratto i dati dal file excel uniamo le dimensioni di analisi, cioè uniamo l'oggetto "Regione" all'oggetto da universo che ha lo stesso contenuto informativo e facciamo la stessa cosa per l'oggetto "Area"

A3. Andiamo nelle proprietà del documento (bottone destro su uno dei tab dei report) e attiviamo il flag "Estendi valori delle dimensioni sincronizzate"


(vedi immagine B)

B1. A questo punto possiamo portare nella tabella l'oggetto Dettaglio che arriva dal file excel che serve a riclassificare i dati dell'universo, nella tabella ci saranno già le informazioni che arrivano dall'universo

B2. Modifichiamo la formula che WebI ha creato nella colonna appena aggiunta per specificare tramite l'operatore IN quali sono le dimensioni di analisi che deve usare per valorizzare correttamente la riclassifica del file excel, quindi nel nostro esempio si tratta delle due dimensioni unite "Regione" e "Area", cioè le due colonne del file excel che identificano la riclassifica che ci interessa. L'operatore IN ha la seguente sintassi =[oggetto] IN ([dimensione1];[dimensione2])


Immagine A

Immagine B


lunedì 18 febbraio 2013

Come trasformare le date

Web Intelligence da la possibilità di trasformare le date per allinearle alle esigenze personali dell'utente, riporto di seguito alcuni esempi emblematici che possono essere molto utili, soprattutto per imparare a familiarizzare con le formule di Web Intelligence che consentono di rimaneggiare le informazioni che arrivano dall'universo.

Trasformare un mese da formato numerico (YYYYMM) in data, aggiungendo il giorno fisso “01”

Esempio: 201302 diventa 01/02/2013

=InData(
"01/"+
(Destra(FormatoNumero([Mese numerico];"00");2))+
"/"+
(Sinistra(FormatoNumero([Mese numerico];"0000");4));"dd/MM/yyyy")


Eliminare il giorno da una data per ottenere una data con il giorno fisso “01”

Esempio: 18/02/2013 diventa 01/02/2013

=InData(
"01/"+
FormatoNumero(MeseAnno([Data]);"00")+
"/"+
FormatoNumero(Anno([Data]);"00");"dd/MM/yyyy")


Tramuta un numero che rappresenta una data (formato YYYYMMDD) in data (formato dd/mm/yy)

Esempio: 20130218 diventa 18/02/2013

=InData(FormatoNumero([Data numerica];"00000000");"yyyyMMdd")

venerdì 15 febbraio 2013

Come nascondere una colonna in Web Intelligence ed usarla per ordinare o filtrare

Con questa soluzione cito un post molto interessante che ho trovaro su BOB; il client, Desktop Intelligence, consente di usare una dimensione di analisi per fare un ordinamento o un filtro, ma consente anche di nascondere tale dimensione. Un esempio: l'elenco di mesi in formato testo e un elenco di numeri che ci consentono di ordinare correttamente e in automatico i mesi, oppure un ordinamento automatico che vogliamo gestire a back end con un'apposita colonna numerica che vogliamo nascondere.

Web Intelligence 3.1 (finalmente nella versione 4.x questa funzione è stata inserita) purtroppo non ci consente di nascondere gli oggetti in una tabella, ma il seguente trucco potrebbe essere un'ottima soluzione.

1. Creare la colonna con la dimensione che volete nascondere, [dim_nascosta], e ordinate o filtrate su questa colonna
2. Create un alert
3. Impostate una condizione che è sempre vera (per esempio "[dim_nascosta] = [dim_nascosta]")
4. Nel box dove si inserisce il testo dell'alert da mostrare inserite la dimensione che volete mostrare, [dim_visibile], validate e vedrete la colonna popolata dalla dimensione [dim_nascosta] sostituita con la dimensione [dim_visibile]

Il motore di visualizzazione di Web Intelligence prima disegna la tabella e poi applica gli alert