martedì 2 luglio 2019

Grafico dinamico

In una dashboard forse vi è capitato di avere la possibilità di scegliere quale dimensione o metrica coinvolgere in un grafico, tramite una semplice tendina o un elenco di opzioni, senza dover modificare la struttura del grafico; si tratta di una soluzione interessante perchè rende la dashboard ancora più interattiva e flessibile per l'utilizzatore finale.
SAP Analytics Cloud permette questa possibilità in modo nativo, ma anche in Web Intelligence è possibile ottenere lo stesso risultato, ecco la soluzione:

1. Si creano due oggetti di tipo dimensione che vengono usati per creare due controlli di input
2. Si creano i due controlli di input che usano i due oggetti creati al punto 1 e si aggiungono dei valori a piacere
3. Si creano due oggetti, uno di tipo dimensione e l'altro di tipo metrica, oggetti che useremo nel grafico e che verificano la scelta fatta dall'utente con i controlli di input
4. Si crea un grafico che usa i due oggetti creati al punto 3
5. Si modificano i parametri del grafico in modo che i titoli degli assi X e Y siano dinamici

Ecco i dettagli:

Premessa:
per questa soluzione ho creato una piccola base dati in excel che contiene i seguenti dati, ho quindi creato una query con Web Intelligence che estrae tutti i dati.





1. Oggetti per i controlli:
Creiamo un oggetto di tipo dimensione, che si chiama "Dimensione", la sua formula sarà
="Classe"
Useremo questo oggetto in un controllo di input al passo 2

Creiamo un secondo oggetto di tipo dimensione, che si chiama "Metrica", la sua formula sarà
="Quantità"
Useremo questo oggetto in un controllo di input al passo 2





2. Controlli di input:
Creiamo un controllo di input, di tipo "Pulsanti di opzione", lo chiamiamo "Dimensione" e lo facciamo puntare all'oggetto "Dimensione" creato al punto 1, personalizziamo l'elenco di valori aggiungendo al valore già disponibile "Classe", anche l'elemento "Stato", elemento che dovremo digitare a mano e portare a destra. Togliamo l'opzione su "Consenti selezione di tutti i valori".

Creiamo un controllo di input, di tipo "Pulsanti di opzione", lo chiamiamo "Metrica" e lo facciamo puntare all'oggetto "Metrica" creato al punto 1, personalizziamo l'elenco di valori aggiungendo al valore già disponibile "Quantità", anche l'elemento "Valore", elemento che dovremo digitare a mano e portare a destra. Togliamo l'opzione su "Consenti selezione di tutti i valori".




Ecco il risultato finale




3. Oggetti per il grafico
Creiamo un oggetto di tipo dimensione, che chiameremo "Dimensione grafico" e che avrà la seguente formula
=Se([Dimensione]="Classe";[Classe];[Stato])
Da notare che nel mio esempio i controlli di input hanno solo due valori, quindi la formula riportata sopra non deve verificare altre sclete nel ramo no, ma se vi fossero, basta annidare un altro SE() nel ramo NO del primo SE().

Creiamo un oggetto di tipo indicatore, che chiameremo "Metrica grafico" e che avrà la seguente formula
=Se([Metrica]="Quantità";[Quantità];[Valore])
Da notare che nel mio esempio i controlli di input hanno solo due valori, quindi la formula riportata sopra non deve verificare altre sclete nel ramo no, ma se vi fossero, basta annidare un altro SE() nel ramo NO del primo SE().





4. Grafico
Creiamo un grafico a barre che utilizzi gli oggetti "Dimensione grafico" e "Metrica grafico" creati al punto 3, togliamo la legenda.




5. Assi del grafico
Modifichiamo i parametri del grafico, in modo che il Titolo dell'Asse Categoria sia di Tipo personalizzato e contenga la seguente formula nell'etichetta titolo
=[Dimensione]

Modifichiamo i parametri del grafico, in modo che il Titolo dell'Asse Valore sia di Tipo personalizzato e contenga la seguente formula nell'etichetta titolo
=[Metrica]






Il risultato finale sarà in grafcico che l'utilizzatore finale potrà governare tramite i controlli di input riportati a sinistra, dove potrà scegliere la dimensione da usare sull'asse X e la metrica da usare sull'asse Y.




lunedì 1 luglio 2019

Distribuzione di frequenze

Quando eseguiamo un conteggio e lo decliniamo per una dimensione molto dettagliata, otteniamo una lista poco leggibile, spesso è quindi necessario aggregarla.

Per esempio se abbiamo il conteggio dei ticket aperti per ogni cliente, otteniamo una lista di clienti e quindi il numero di ticket aperti al fianco di ogni cliente; questo tipo di lista non è sintetica, potremmo quindi necessitare di una distribuzione di frequenze, ovvero sapere quanti clienti hanno 3 ticket, quanti ne hanno 2 e quanti ne hanno 1, perchè la lista di dettaglio non ci serve, mentre la distribuzione è importante.

La seguente soluzione mostra come fare con Web Intelligence, con pochi click.

Il report che ho usato conta i ticket aperti per singolo cliente come anticipato sopra; ordinando per Z-A, ci sono clienti che ne hanno 3… 2  e 1, ma quanti sono quelli con 3 ticket, con 2 ticket e con 1 ticket?



Bottone destro sulla colonna del conteggio e quindi click su “inserisci interruzione”.


Sostituire la formula che webi mette come subtotale, mettendo la funzione min().


Inserire il conteggio della colonna dei clienti.

Attivare la funzione "Struttura" (Fold in inglese) dal menù Analisi / Interagisci e richiudere il ramo 1 per nascondere il dettaglio (il ramo si richiude tutto premendo 1, sul fondo dello schermo).

Giocando poi sulle proprietà dell’interruzione si possono togliere le intestazioni ripetute, e poi a valle andando sulle proprietà della tabella si può ripristinare l’intestazione generale di tabella (che Web Intelligence ha tolto quando abbiamo inserito l’interruzione).

martedì 23 aprile 2019

Dimensioni geografiche

Una delle novità più interessanti introdotte dalla versione BI 4.2 SP3 di Web Intelligence è la possibilità di ottenere le latitudini e longitudini geografiche di una posizione, partendo da un oggetto dimensione che contiene il nome di un luogo, ad esempio i nomi delle città; l'obiettivo sarà quindi quello di utilizzare poi le coordinate geografiche così ottenute per rappresentare i dati su una mappa geografica.

Ottenere le coordinate è molto semplice; selezionando il bottone destro del mouse sulla dimensione di analisi che contiene i nomi delle città è possibile selezionare la voce "Edit as a Geography" e quindi "By Name".
Si apre una maschera che mostrerà le città che sono state trovate automaticamente e quelle che invece richiedono un intervento manuale.
Ultimata la mappatura vedremo che sotto la dimensione di analisi che abbiamo scelto, ci saranno dei nuovi oggetti di tipo "Dettaglio"; questi oggetti potranno essere utilizzati come dimensioni di riferimento per una mappa (cioè un oggetto grafico di tipo mappa).

Ecco le immagini che descrivono il processo di mappatura.


Con un semplice click destro del mouse è possibile attivare la funzione

Le città che non vengono mappate automaticamente devono essere mappate a mano

Al termine della mappatura saranno disponibili i nuovi oggetti "Dettaglio"

Al termine del processo sarà possibile realizzare una mappa e posizionare quindi delle metriche su una cartina geografica

domenica 17 marzo 2019

Canale YouTube

Ho creato un canale YouTube dedicato ai fondamentali di Business Objects e Web Intelligence.
Iscrivetevi mi raccomando!

Ecco il link:
Canale YouTube di Massimo Agosta

martedì 5 marzo 2019

Confronto tra Web Intelligence ed Excel

Mi capita spesso per lavoro di dover paragonare Web Intelligence ad Excel, perchè spesso Excel viene preso come punto di riferimento dagli utenti; per far comprendere meglio le potenzialità di Web Intelligence mi trovo quindi a dover elencare le funzionalità che Web Intelligence include, per sottolineare che alcune sono in sovrapposizione con Excel, mentre altre sono tipiche di uno strumento di Business Intelligence e quindi velocizzano il lavoro rispetto al famoso tool di casa Microsoft.

Ecco le funzionalità che secondo il mio personale parere vale la pena evidenziare, divise tra funzionalità di base e avanzate.

Base:
  • Gestione di tabelle e grafici
  • Pivot table
  • Formattazione di testo, bordi, sfondi, allineamento, testo a capo, ecc
  • Formattazione dei testi, date e numeri e formati personalizzati
  • Subtotali (Interruzioni)
  • Raggruppa e separa (Fold / Unfold)
  • Paginazione (Sezioni)
  • Calcoli semplici
  • Calcoli complessi
  • Formule
  • Variabili
  • Utilizzo di funzioni avanzate (matematiche, gestione delle date e dei testi, ecc)
  • Correttore delle formule errate
  • Help contestuale
  • Formattazione condizionata (Alert)
  • Best / Wrost (Classifica)
  • Ordinamento A-Z, Z-A e personalizzato
  • Annulla e Ripeti operazioni
  • Trova
  • Stampa
  • Filtri nella query
  • Filtri nello sheet
  • Filtri nell'oggetto
  • Gestione di diversi fogli (multi sheet)
  • Filtri semplici, complessi e tramite tendina
  • Condizioni dinamiche nelle query (Prompt)
  • Copia / Incolla degli oggetti (celle singole, Tabelle e Grafici)
  • Copia formato
  • Copia come testo o come immagine per incollare ovunque
  • Trasformazione tabella in grafico e viceversa
  • Template prestabiliti
  • Inserimento immagini e logo
  • Aggiornamento automatico all'apertura
  • Descrizione dei report al salvataggio con testo libero e parole chiave
  • Posizionamento automatico degli oggetti (Posizione relativa)
  • Indici (Abbinamento)
  • Riferimento puntuale a particolari celle di valori
  • Commenti
  • Export in PDF (con gestione dell'indice come nel report)
  • Export in Excel (con gestione dei grafici come grafici di Excel)
  • Export in CSV e Testo
  • Salva il report in locale o sul server
  • Accesso ai report sul server via web browser
  • Creazione di nuovi report via web browser
  • Descrizione degli oggetti contestuale
Avanzate:
  • Navigazione tra i dati su tabelle e grafici (Drill down, Drill up e Drill Across)
  • Fotografia statica di un report durante la navigazione (Snapshot durante il Drill)
  • Formule con operatori avanzati che consentono di aggregare i dati
  • Aggregazioni
  • Sottoquery
  • Query di Query
  • Query combinate (union, minus e intersect)
  • Gestione della priorità delle condizioni nella query con logica AND e OR
  • Gestione della priorità delle filtri nei report o negli oggetti con logica AND e OR
  • Utilizzo senza essere connessi al server (Off line)
  • Link tra report differenti (Report Linking)
  • Interazione con controlli di input come tendine, option box e check box
  • Confronto cambiamento dei dati tra diversi aggiornamenti (Track data changes)
  • Schedulazione automatica (oraria, giornaliera, settimanale, mensile,  a evento, su calendario prestabilito, ecc)
  • Distribuzione massiva di un report dove ogni ricevente vede solo i propri dati (Report bursting)
  • Conversione  di un oggetto del report in servizio Web
  • Query verso fonti personali come file Excel, file CSV o servizi Web (Multy query)
  • Query verso molteplici universi  (Multy query)
  • Sincronia delle query tramite gli attributi (dimensioni) in comune
  • Rimappatura di un report da un universo all’altro per riutilizzare il layout
  • Condivisione di componenti tra report diversi
Nota: per questo post la versione di riferimento è la BI 4.2 SP6

lunedì 4 marzo 2019

Unione di query tramite variabili

Una delle novità più interessanti introdotte dalla versione BI 4.2 SP3 di Web Intelligence è certamente la possibilità di unire (sincronizzare) le query utilizzando anche le variabili.
Questa funzione è interessante per chi sviluppa con BO perchè fino ad oggi si potevano sincronizzare le query solo attraverso le dimensioni di analisi disponibili nelle diverse query (fornitori di dati); introducendo invece la possibiltià di farlo anche attraverso le variabili del report, si avrà l'opportunità di sincronizzare i dati anche con fonti di dati che non possono avere tra loro la stessa chiave di dettaglio.

Faccio un esempio utilizzando l'universo di demo e-Fashion.

  • Se abbiamo una query che estrae dall'universo i dati di vendita per Anno e Negozio, dove l'anno e il negozio sono due dimensioni di analisi, avremo nel report una tabella con l'anno e il negozio su due colonne.
  • Se vogliamo confrontare i risultati di vendita ottenuti tramite l'universo con i dati di budget che magari ci arrivano da un file esterno, tale file dovrà fornire il budget per anno e negozio, esponendo queste due informazioni su due colonne diverse.
  • I file esterni non sempre sono modificabili o comunque per farlo dovremo dedicare del tempo per fare le opportune trasformazioni sui dati del file esterno, in questo caso il file del budget; se il file dovesse arrivarci con l'anno e il negozio concatenati, dovremo adeguarlo in modo che l'anno e il negozio siano su due colonne diverse, perchè Web Intelligence per fare uso dell'unione, necessita di due colonne distinte.
  • Grazie alla nuova funzionalità introdotta potremo invece creare una nuova variabile nel nostro report Web Intelligence, che concateni l'anno e il negozio della query che punta all'universo e quindi potremo unire le due query (quella che punta all'universo e quella che punta al file del budget), utilizzando la variabile appena creata come elemento dell'unione.
Esempio di file dedicato al budget, dove l'anno e il negozio sono concatenati.


Selezione delle dimensioni da usare per l'unione, una delle due è una variabile creata nel report, che si occupa di concatenare l'anno e il negozio dalla query da universo.
Da notare il fatto che il budget viene esposto nella tabella a destra, ma si tratta del totale generale del budget.


Risultato finale a valle dell'unione.
Da notare che a valle dell'unione, la colonna del Budget si popola correttamente.


L'esempio potrebbe sembrare stupido, ma questa innovazione apre nuovi scenari di sincronizzazione tra diverse query, perchè sarà possibile beneficiare delle variabili e delle formule che contengono, per ottenere una sincronizzazione a valle delle variabili, mentre prima era per forza necessario, per ottenere una sincronizzazione, far sviluppare nell'universo determinate logiche.

martedì 8 gennaio 2019

Somma se contiene

In Web Intelligence, grazie ad una semplice formula, è possibile aggregare (sommare) un metrica, ma solo se una determinata dimensione di analisi contiene un particolare valore.

Per esempio è possibile sommare il numero di chiamate di un cliente, ma solo se una dimensione di analisi contiene la parola "pippo".

Per risolvere questo problema, suggerisco di creare due variabili:

1. creare una variabile che dice se la dimensione di analisi che vogliamo controllare (la chiamerò attributo1) contiene o meno il testo che stiamo cercando (ad esempio la parola "pippo", scritta in qualsiasi punto nei valori della dimensione controllata).
Chiameremo la variabile "attributo pippo" e avrà la seguente formula:

=Confronta([attributo1];"*pippo*")

Questa variabile si valorizza con 1 quando la ricerca viene soddisfatta, cioè quando la parola "pippo" viene trovata da qualche parte nel testo dei valori della dimensione attributo1.

Nota importante: nel testo da ricercare si possono usare i caratteri jolly, cioè gli asterischi (li ho evidenziati in rosso), per dire che la parola da ricercare può essere scritta in qualsiasi punto, all'interno della stringa di testo dei valori della dimensione di analisi. Se non si mettono gli asterischi, il testo ricercato e il valore della dimensione di analisi dovranno corrispondere perfettamente.

2. creare una variabile che valorizzi la metrica filtrando la variabile che abbiamo creato al passo precedente =1 quindi la nostra nuova variabile, che possiamo chiamare "numero chiamate per attributo pippo", avrà la seguente formula:

=[Nr calls] Dove ([attributo pippo]=1)


La variabile al punto 1, che sostanzialmente fa la ricerca del testo, può essere anche gestita nel seguente modo, se non sappiamo come sarà scritto il testo da cercare, cioè se non sappiamo se viene scritto in maiuscolo o in minuscolo:

=Confronta(maiuscola([attributo1]);"*PIPPO*")