giovedì 22 giugno 2017

Asse temporale senza buchi o nulli

Quando si realizzano dei grafici con Web Intelligence può capitare che, portando una dimensione temporale (ad esempio i giorni) sull'asse delle X, l'oggetto che utilizziamo per avere la data non fornisca sempre una data, per tutti i giorni che esistono nel periodo che stiamo analizzando.
La nuova versione di Web Intelligence fornisce una nuova formula che risolve questo problema.

La formula legge una data, ad esempio la data degli ordini, prende la minima e la massima in assoluto rispetto ai dati che la query ha estratto e crea un asse temporale completo, inserendo quindi anche le date in cui non ci sono ordini.
Funziona con i giorni, ma anche con le ore, i mesi, ecc.

=DimensioneOra([Query1].[Order Date];PeriodoGiorno)

Quando viene usata in una tabella si creano delle righe vuote relative ai giorni dove non ci sono ordini, le date mancanti vengono cioè aggiunte ai dati della tabella dalla formula e la tabella si espande.

Questa soluzione può essere utile in una Pivot (tabella a campi incrociati) dove si desidera avere una colonna per ogni giorno, senza buchi, oppure in un grafico dove sull'asse delle X si desiderano tutti i giorni di un particolare periodo.
Non è possibile usare questa formula per fare dei calcoli e delle considerazioni sulle informazioni temporali che mancavano nel cubo della query.

Tool per documentare gli universi e per generare l'SQL per il Query Builder

Uno dei problemi classici su BO, da quando siamo passati intorno al 2005 alla versione XI, è quello di documentare gli universi e in generale di avere informazioni sul sistema in modo globale e su file.

Esistono sul forum BOB diverse macro VBA in Excel molto efficaci, ma nel caso degli universi, pretendono di avere preventivamente importato l'universo in locale, e comunque documentano un solo universo alla volta.
Personalmente ho modificato una di queste macro per documentare in modo ricorsivo una cartella del file system piena di universi .UNV, ma dovevo preventivamente passare del tempo a importare tutti gli universi, cartella per cartella. Soluzione utile e veloce, ma comunque non completamente automarìtica.

Ho trovato sul web un tool gratuito molto interessante che fa tutto!
Al seguente link, a valle di una veloce registrazione, è possibile scaricare un eseguibile che:
- si autentica con login e password al repository di BO
- apre o importa gli universi che si devono documentare
- genera un file excel singolo, che documenta tutti gli universi scelti, ed in ogni sheet fornisce specifiche informazioni per ogni ambito, ovvero Oggetti, Classi, Join, ecc

Trovo questa soluzione molto interessante e grandiosa, visto che è gratuita.

Link al sito del tool:
http://biclever.com/

Il tool è disponibile sia per la versione 3.x che 4.x, sia per gli universi .UNV che per gli universi .UNX.

Il medesimo sito rende disponibile anche un tool che consente di generare facilmente l'SQL da inviare al CMS, quello che solitamente si scrive a mano nel Query Builder, per ottenere informazioni per esempio relative agli utenti e i gruppi, ai report e alle cartelle, ecc ecc.


Come vedere l'SQL se non si hanno i diritti per vederlo

In alcuni casi l'amministratore di sistema di BO nega all'utente di vedere l'SQL generato dalle query che crea, questo può essere un limite forte, perchè se l'utente ha delle nozioni di SQL può comprendere meglio quale interrogazione si sta inviando al DB.

La seguente formula permette di creare un cella libera nel report e vedere dentro la cella l'SQL di una particolare query del report, basta inserire nella formula un oggetto che proviene dalla query di cui si desidera l'SQL. Per utilizzarla sostituite la parte in rosso.

=FornitoreDiDatiSQL([nome_query].[nome_oggetto])

In inglese la funzione è

=DataProviderSQL([nome_query].[nome_oggetto])

mercoledì 14 giugno 2017

Giorni tra, senza sabati e domeniche

Trovo questa soluzione molto utile e geniale, permette di calcolare i giorni tra due date, escludendo i sabati e le domeniche, senza avere una tabella calendario a supporto.

L’ho tradotta in italiano per testarla


=(Tronca(GiorniTra([Start Date];[End Date]) / 7 ; 0) * 5) + InNumero(Sottostringa("1234555123444512333451222345111234500123450123455"; ((NumeroGiornoDellaSettimana([Start Date])-1)*7)+Resto(GiorniTra([Start Date];[End Date]);7)+1 ; 1))

Ecco la formula originale in inglese

=(Truncate(DaysBetween([Start Date]; [End Date]) / 7 ; 0) * 5) + ToNumber(Substr("1234555123444512333451222345111234500123450123455"; ((DayNumberOfWeek([Start Date])-1)*7)+Mod(DaysBetween([Start Date];[End Date]);7)+1 ; 1))

Ecco dove ho trovato questa soluzione, seguendo questo link è possibile leggere tutta la spiegazione dettagliata, passo per passo: