giovedì 22 giugno 2017

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:

martedì 21 febbraio 2017

Caratteristiche di un buon universo BO

Riporto di seguito le caratteristiche che dovrebbe avere un universo Business Objects

Dal punto di vista "utente", ovvero per quanto riguarda ciò che l'utente finale dell'universo può "vedere" e usare:

- i nomi delle classi e degli oggetti devono essere molto familiari all'utente
- la disposizione delle classi e delle sottoclassi di oggetti deve essere ben organizzara e se possibile in gerarchia
- gli oggetti all'interno delle classi devono essere disposti dall'alto verso il basso dal padre verso il nipote, cioè in gerarchia se possibile, questo consente all'utente di usare il drill down anche se non sono state create delle gerarchie personalizzate
- l'universo deve avere una descrizione chiara e aggiornata
- gli oggetti devono avere una descrizione sempre (se possibile anche le classi); le descrizioni accettano i tag HTML, è possibile quindi inserire dei ritorni a capo e dei colori
- gli oggetti particolari devono avere il formato gestito a livello di universo
- le misure o metriche che hanno senso solo per una classe di oggetti devono stare nella medesima classe di questi oggetti
- i contesti di analisi devono avere un nome familiare all'utente, ma soprattutto devono avere una descrizione che consenta all'utente di prendere una decisione, cioè capire quale tipo di analisi otterrà scegliendo un contesto al posto di un altro
- devono essere gestite le incompatibilità tra oggetti
- devono essere gestiti i limiti di righe estratte e di tempo dedicati alla query perché i valori di default sono troppo restrittivi
- le liste di valori degli oggetti, se possono essere esposte all'utente come gerarchie padre/figlio, vanno modificate rispetto al default (select distinct di una colonna), in modo che l'utente sia agevolato nella scelta del valore interessato, potendo quindi scegliere il padre e quindi il valore di interesse
- le liste di valori se possibile devono avere un ordinamento, perchè per default eseguono una select distinct del campo senza ordinamento
- è utile creare degli oggetti che forniscano all'utente alcune date standard di riferimento, come ad esempio la data di oggi, di ieri, del primo e dell'ultimo giorno del mese in corso e del mese precedente, l'ultimo giorno dell'anno, ecc, dato che l'utente potrà poi usare questi oggetti, apparentemente inutili se esposti come risultato della query, ma fondamentali invece se utilizzati come condizioni nella query, perchè l'utente potrà usarli in combinazione con altri oggetti per costruire condizioni dinamiche, come ad esempio: DATA INGRESSO CLIENTE >= IERI oppure DATA DI APERTURA DEL TICKET >= INIZIO DELL'ANNO IN CORSO
- una variante del punto precedente, relativo agli oggetti dedicati alle date, dovrebbe includere dei @prompt nell'sql, in modo che l'utente possa utilizzare un oggetto che permetta di avere una data pari a oggi - X giorni, dove X viene gestito dall'utente grazie al @prompt

Dal punto di vista "tecnico", ovvero per quanto riguarda le funzionalità tecniche che l'utente subisce in modo trasparente

- deve in diversi casi essere rimosso il flag che costringe l'universo a creare molteplici query per ogni metrica o misura
- devono essere gestite eventuali outerjoin in modo che l'utente non inserisca involontariamente dei filtri man mano che aggiunge oggetti nelle query; ogni universo dovrebbe avere un obiettivo di analisi specifico, ad esempio il Cliente o i Ticket, quindi aggiungendo oggetti nella query non si dovrebbero filtrare le righe e quindi mantenere la cardinalità corretta di Clienti e Ticket
- devono essere gestiti i numeri di righe delle tabelle, in modo automatico (il sistema conta le righe) o in modo manuale; questa funzione è utile perchè l'sql sarà costruito considerando i "pesi" delle tabelle e quindi la FROM sarà gestita in modo coerente nell'SQL (per oracle ricordarsi di modificare il parametro REVERSE_TABLE_WEIGHT da Y a N)
- descrivere le varie versioni di modifica dell'universo, inserendo degli oggetti dimensione nascosti, che hanno per nome la versione o la data della modifica, e nella descrizione un testo che spieghi cosa è stato modificato
- inserire nel modello dati delle descrizioni vicino alle tabelle
- evitare se possibile l'uso eccessivo di alias e quindi il proliferare di oggetti ridondanti verso l'utente
- gestire il parametro BOUNDARY_WEIGHT_TABLE: questo parametro permette di evidenziare una soglia di righe, superata tale soglia, i filtri delle query creati dagli utenti con gli oggetti non saranno gestiti nella WHERE condition dell'SQL, ma come sotto SELECT all'interno della FROM, dove ovviamente la sotto SELECT avrà il filtro richiesto dall'utente nella sua WHERE
- ovviamente prima della pubblicazione deve essere fatto un check di integrità

venerdì 18 aprile 2014

Media rolling degli ultimi X mesi

Ho trovato questa soluzione molto interessante, quindi la condivido così com'è aggiungendo solo una spiegazione in italiano: al seguente link è possibile capire come ottenere la media di un valore numerico per gli ultimi 12 mesi rolling, per esempio.
Immaginiamo di avere una tabella che per ogni mese ci fornisce i nostri ricavi, ma che al fianco di ogni mese vogliamo vedere la media delle revenue per gli ultimi 12 mesi precedenti ad ogni mese.
La soluzione proposta al seguente link fa al caso vostro, si basa su due funzioni, cioè la sommacumulata() e la funzione indietro() o precedente().
La soluzione spiega anche come usare i filtri per nascondere le righe inutili e quindi utilizza la funzione nessunfiltro() per fare in modo che la formula alla base della soluzione funzioni comunque, anche se la tabella ha un filtro che serve a mascherare le righe inutili

Link Soluzione: media ultimi mesi rolling


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