Prepara i tuoi Dati
Questa pagina è attualmente in revisione. Resta sintonizzato!
Lo scopo di Crystal è aiutarti a processare i tuoi dati e ottenere insight per prendere le migliori decisioni per la tua attività.
Per fare questo, serve una fonte dati da cui prendere le informazioni e, per ottenere le performance migliori, questi dati dovrebbero essere preparati seguendo alcune regole.
Più alta è la qualità dei dati e della loro struttura, migliori saranno i risultati che crystal potrà portare.
Ti consigliamo di seguire queste linee guida per ottenere il meglio dall’esperienza con Crystal.
In questo articolo vedremo:
Le Basi di Crystal
La Preparazione dei Dati Fuori da Crystal
La Gestione dei Dati in Crystal
Le basi di Crystal
La conversazione su Crystal ruota attorno ai Topic: fare una domanda a Crystal significa chiedere un Topic.
Di conseguenza, è molto importante preparare i dati per creare Topic che possano essere chiesti durante la conversazione in maniera naturale.
Puoi approfondire il concetto di Topic qui.
Puoi approfondire le regole della Conversazione qui.
Di seguito, una sintesi dei principali concetti alla base di Crystal, da tenere in considerazione per preparare i dati nel modo migliore.
Topic
Un topic è un insight sui dati che si possono ottenere da crystal. È costituito dalla combinazione di una o più entità principali che possono essere filtrate per una o più entità filtro per realizzare un obiettivo e che saranno rappresentate visivamente o con un contenuto testuale.
Obiettivi
Un obiettivo è essenzialmente lo scopo principale di un topic. Ciascun obiettivo può essere rappresentato da una o più visualizzazioni che saranno scelte dall’admin durante la fase di creazione del topic. A ogni obiettivo corrispondono infatti una o più visualizzazioni, che possono essere grafici o avere altri formati (come ad esempio liste o tabelle).
Un obiettivo è essenzialmente l’insight che desideri ottenere dai tuoi dati (per esempio un confronto tra i tuoi dati, una classifica o il loro progresso nel tempo). Si tratta di una delle due informazioni principali che compongono un topic, insieme alle entità. Nel selezionare un obiettivo tieni a mente che tutti gli utenti utilizzeranno questi dati. Per esempio, se sai che gli utenti di riferimento sono colleghi di diverse sedi dell’azienda e vogliono valutare la performance di tutte le sedi, potresti voler impostare il confronto come obiettivo. Ogni obiettivo può essere rappresentato con una o più visualizzazioni (ovvero tipi di grafico).
Per esempio l’obiettivo comparison mostra le somiglianze (o le differenze) tra articoli o eventi, come nella domanda “Puoi confrontare gli articoli venduti e il budget per Paese?”. L’obiettivo over time, invece, mostra come cambiano i dati nel tempo, chiedendo ad esempio: “Mi mostri l’andamento delle vendite mese per mese nell’ultimo anno?”
Entità
Le entity o entità sono il fulcro del topic, l'argomento su cui è incentrato l'insight e che viene esplorato a seconda dell’obiettivo che scegli, ad esempio se l'argomento è “vendite totali nel tempo”, le vendite sono l'entità. Dal punto di vista della configurazione, corrispondono alla colonna selezionata dal database che hai collegato. Inoltre è importante chiamare ciascuna entità con il nome che sei abituato a usare con i tuoi colleghi, in modo che anche crystal possa imparare a chiamarla in quel modo e potrà capire a cosa ti stai riferendo quando la citerai nelle tue domande.
Durante la creazione del topic devi anche fornire alcune varianti del nome. Fondamentalmente, sono sinonimi che potrai utilizzare nella conversazione per riferirti all'entità: ad esempio, se l'entità è "elementi", possiamo impostare "unità" o "articoli" come variazione del nome.
Le entità rappresentano il nucleo del funzionamento di crystal: fondamentalmente, sono il contenuto accessibile agli utenti member nel corso della conversazione con l’advisor.
Ci sono due tipi di entità: le entità principali (main) e le entità filtro (filter).
Un’entità principale è il soggetto su cui si incentra l’insight in base all’obiettivo impostato per l’analisi. Per esempio, mettiamo che la domanda all’advisor sia: “Puoi mostrarmi il totale delle vendite?” In questo caso l’entità principale sarebbe “vendite”.
Un’entità filtro è la dimensione che puoi associare all’entità principale per restringere, filtrare o dettagliare un’analisi. Per esempio, se prendiamo la domanda “Puoi mostrarmi il totale delle vendite?”, un’entità filtro potrebbe essere il valore di un’entità “Paese”, come “Puoi mostrarmi il totale delle vendite per la Germania?”, o di un periodo in particolare, come “Puoi mostrarmi il totale delle vendite per il 2019?”
L’entità filtro non è da confondere con il valore filtro: nel caso del nostro topic, l’entità filtro potrebbe essere “Paese”, riferito alle vendite del singolo Paese, mentre il valore filtro è un valore specifico nella colonna dell’entità, per esempio “Germania”.
Ecco un altro esempio:
“Mostrami le vendite (entità principale) per l’Italia (valore filtro) nel 2019 (valore filtro)”.
Aggregazione
L’aggregazione in crystal è basata sulle funzioni di aggregazione di SQL e rappresenta il modo in cui i valori diversi di un’entità principale possono essere messi insieme in un topic specifico: la stessa entità può essere infatti aggregata in modi diversi.
Ad esempio, se prendiamo l’entità “Vendite”, possiamo sommare i differenti valori di questa entità, oppure possiamo contarli o calcolarne la media.
Se volessimo vedere quanto abbiamo guadagnato, useremmo la somma (Sum), se volessimo contare quante transazioni abbiamo fatto dovremmo effettuare un conteggio (Count), oppure potremmo effettuare la media delle vendite (Average).
Alias
Questi sinonimi associati alla stessa unità sono chiamati alias e possono essere utilizzati nel corso della conversazione per riferirsi a una stessa entità.
I value alias sono nomi alternativi che puoi utilizzare per riferirti ai valori non numerici delle entità, ovvero ogni singolo (non numerico) valore della colonna associata.
Gli alias sono molto importanti per crystal perché permettono all’esperienza conversazionale di realizzarsi. La stessa entità può essere infatti associata a diverse parole: si può dire “vendite” oppure “entrate” o “ricavi” e così via. Un altro esempio: si può usare “articolo” o “unità”, “prodotto”, “capo”.
Per esempio, se hai un'entità che fa riferimento al valore “denaro” e hai stabilito che le valute prese in considerazione sono USD ed EUR, i value aliases di questi codici potrebbero essere “Dollari americani” ed “Euro”. In questo modo, crystal capirà le tue domande sia quando utilizzi il codice EUR sia quando usi l’alias “Euro”.
I value alias posso essere molto utili quando hai valori di entità utilizzati come filtri che sono difficili da scrivere e pronunciare, come per esempio codici di prodotti: puoi associare il codice a un alias pertinente da usare quando parli con crystal, ad esempio “prodotto XG059” può essere chiamato “Divano blu”.
Devi dare almeno un alias (definizione alternativa) per ogni entità, ma ricorda che più alias fornisci, più semplice sarà la comunicazione con la tua virtual advisor.
Formattazione dei dati
Per mostrare correttamente i dati, crystal seguirà alcune convenzioni di formattazione.
Formati supportati
I dati devono essere formattati in base a determinate logiche per essere elaborati correttamente da crystal.
Stringhe
crystal lavora con i campi testuali. Supporta la maggior parte delle tipologie di categorie più diffuse. Qui puoi trovare l'elenco di tutti i tipi di fonti dati supportati da crystal. In base alla fonte connessa, potresti dover trasformare alcune colonne delle tue tabelle.
Ad esempio:
Scenario | Query |
VARCHAR type | CAST ( column AS varchar [ ( 120 ) ] ) |
Ricorda che questi casi sono esemplificativi e devono essere adattati in base allo scenario e alle tecnologie utilizzati.
Caratteri speciali
Incontriamo spesso campi qualitativi, come la descrizione del prodotto, l’indirizzo e altri, contenenti caratteri speciali che non vengono codificati correttamente come Unicode.
Per pulire queste tipologie di dati, è meglio utilizzare l’espressione funzione regolare.
Come gestirli:
Scenario | Query |
publicitÖÖÖÖ | regexp_replace('publicitÖÖÖÖ','[Ö�]+|√†!','à','g'); |
Valori vuoti
crystal si aspetta che i valori vuoti siano rappresentati con NULL.
Come gestirli:
Scenario | Query |
““ | nullif(column, "") |
None | nullif(column, "None") |
Numeri con la virgola
I numeri con la virgola devono seguire il formato standard che prevede la virgola come separatore di migliaia (per esempio 1,200 per mille e duecento) e il punto come separatore delle cifre decimali (per esempio 1.2 per uno virgola due).
1.234 = uno virgola duecentotrentaquattro
1,234 = mille e duecentotrentaquattro
Può però succedere abbastanza frequentemente di incontrare dati che violano queste convenzioni.
Come gestirli:
Nei seguenti esempi si trovano alcuni scenari che si possono incontrare comunemente e indicazioni su come gestirli.
Se i nostri dati sono già allineati allo standard (punto per separare i decimali e virgola per separare le migliaia):
Scenario | Query | Risultato |
Dobbiamo solo leggere correttamente la tipologia testuale e salvarla come numerica. | to_number('1,234,567.009678' , '999G999G999G999D999999'::text) | 1234567.009678 |
Il segno negativo è alla fine del numero. | to_number('123,456,789.01-', '999999999G999D999S'::text); | -123456789.01 |
Se i nostri dati NON sono conformi allo standard:
Scenario | Query | Risultato |
Si utilizza il punto per separare le migliaia e la virgola per separare i decimali (es. 1.200 e 1,2). | NULLIF(replace(replace('5.295,22' , '.'::text, ''::text), ','::text, '.'::text), ''::text)::numeric | 5295.22 |
Si usa la virgola per separare i decimali (es. 1,2) non si usano segni per separare le migliaia (es. 1200). | NULLIF(replace('2271,02', ','::text, '.'::text), ''::text)::numeric | 2271.02 |
Campi complessi
Al momento crystal non supporta tipologie complesse di campi, come “Json objects“ per Postgres o “LOB“ per Oracle. Se in una tabella sono presenti campi di questo tipo, crystal non potrà utilizzarli nel processo di configurazione di un topic e non potrà restituire l’anteprima dei dati relativi.
Per Oracle, non sono supportati tutti i tipi di dati descritti qui.
Limitazioni del prodotto
Prima di iniziare ad addentrarci nei dettagli della preparazione dei dati, dai un’occhiata a questo articolo per saperne di più sui limiti di crystal.
La Preparazione dei Dati Fuori da Crystal
La configurazione dei topic è il processo fondamentale per il successo di un progetto di crystal, per questo è essenziale seguire alcune linee guida e fornire una serie di dati puliti e strutturati.
Le entità principali
Una fonte dati è composta da tabelle, a loro volta formate da colonne.
Per configurare le entità principali basta seguire una semplice regola:
Una colonna = un’entità principale
Questo è l’approccio suggerito e consigliato nella maggior parte dei casi. Ciascuna colonna deve contenere i valori o il contenuto di una singola entità.
Per esempio, vogliamo creare un topic con entità principale “vendite” e questi sono i dati a nostra disposizione:
Prodotto | Città | Canale | Vendite | Chargeback |
Prodotto 1 | Milano | Online | $20,56 | $0 |
Prodotto 2 | Londra | Negozio | $50,36 | $0 |
Prodotto 1 | Torino | Online | $97,76 | $0 |
Prodotto 1 | New York | Negozio | $190,12 | $0 |
In questo caso, Vendite sarà la nostra entità principale. Altre entità principali, come nel nostro esempio il chargeback, possono essere configurate nella colonna relativa.
Un fattore di estrema importanza da ricordare è che gli alias delle entità DEVONO essere unici: di conseguenza non potremo chiamare un’altra entità con il nome “vendite”.
Inoltre ricorda che:
Se concettualmente ci sono colonne multiple riferite in genere alle “vendite”, è necessario mettere i dati in una stessa colonna e in una stessa tabella per far sì che l’entità “vendite” sia unica nella conversazione e per permettere al sistema di identificare la fonte.
Se ci sono più colonne “vendite” contenti differenze (per esempio, vendite reali e vendite in base al budget) vanno mantenute distinte e con alias diversi.
C’è un approccio alternativo che è possibile usare in casi particolari. Prendiamo ad esempio una tabella simile:
Prodotto | Indicatori | Valore |
Prodotto 1 | Ricavi | $0 |
Prodotto 1 | Costi | $0 |
Prodotto 1 | Inventario | $0 |
In questo caso, possiamo usare la colonna “valore” come entità principale e la colonna “indicatori” come entità filtro. Ricorda però che questo approccio funziona solo quando i valori nella colonna “valore” possono essere aggregati logicamente con una delle funzioni supportate: altrimenti c’è il rischio di esporre dati inconsistenti all’utente finale.
Inoltre, ci sarà un impatto diretto sulla struttura stessa della conversazione, dal momento che l’entità principale, e di conseguenza il focus del topic, sarà “valore”, invece dei valori del filtro (come ad esempio vendite o costi).
L’entità filtro
Se una dimensione concettuale (ad esempio “prodotto”) è presente in più di una tabella (per esempio, in tre), e di conseguenza in più di una colonna (sempre tre, in questo caso) e deve essere utilizzata come filtro per i topic, ci sono due opzioni:
Possiamo configurare due entità diverse (per esempio, “Vendite” e “Target di vendite”) e, nel caso in cui la domanda per l’advisor sia parziale o incompleta (per esempio se si riferisce genericamente solo a “vendite”), potenzialmente dare avvio alla funzionalità di disambiguazione.
Oppure potremmo centralizzare la colonna filtro in un singolo oggetto, per configurare l’entità in una sola colonna.
Vediamo un esempio.
Se consideriamo che “prodotto” è l’unica dimensione di filtro che vogliamo condividere tra due tabelle, dovremo creare una tabella master e due tabelle dati di seguito, collegate a un valore che useremo per effettuare il join delle due tabelle.
Tabella master
ID | ID prodotto | Prezzo |
34 | 2 | 12 |
85 | 6 | 15 |
45 | 3 | 23 |
Tabella 1: Target di vendite
ID | ID prodotto | Target |
23 | 2 | 45,000 |
54 | 6 | 125,000 |
57 | 3 | 10,000 |
Tabella 2: Prodotti
ID | Nome |
2 | Mele |
6 | Pere |
3 | Banane |
La colonna “Nome” sarebbe l’entità filtro Prodotto.
Centralizzare tutte le entità
Considerato che Prodotto è l’unica dimensione di filtro che vogliamo condividere tra le due tabelle, possiamo creare direttamente una singola tabella contenente tutti i filtri e le entità principali.
Il criterio per questa decisione sarebbe la granularità dei dati e il numero di entità che condividono gli stessi filtri.
Per esempio:
Tabella master: vendite
ID | Prodotto | Prezzo |
34 | Mele | 12 |
85 | Pere | 15 |
45 | Banane | 23 |
Tabella 1: target di vendite
ID | Prodotto | Target |
23 | Mele | 45,000 |
54 | Pere | 125,000 |
57 | Banane | 10,000 |
Tabella 2: prodotti
ID | Prodotto | Prezzo | Target |
1 | Mele | 12 | 45,000 |
2 | Pere | 15 | 125,000 |
3 | Banane | 23 | 10,000 |
Colonne calcolate
Le colonne calcolate sono colonne dinamiche create attraverso operazioni. Nell’esempio di seguito la colonna totale è una colonna calcolata che si basa sulla moltiplicazione della colonna prezzo per la colonna quantità. Al momento crystal non supporta la creazione di colonne calcolate.
ID | ID prodotto | Prezzo | Quantità | Totale |
34 | 34 | 5 | 3 | 15 |
85 | 85 | 10 | 5 | 50 |
45 | 45 | 20 | 6 | 120 |
La Gestione dei Dati in Crystal
Le join
I join possono essere eseguiti su un singolo valore e non è possibile utilizzare campi multipli per unire due tabelle. Inoltre, operazioni di join possono essere gestite solo se gli oggetti si trovano nella stessa fonte dati.
Si possono unire fino a un massimo di 5 tabelle.
Le performance di crystal dipendono dal numero di operazioni di join e dalle performance delle fonti dati connesse (per esempio, se vengono eseguite l’indicizzazione e altre tecniche di ottimizzazione per accelerare il recupero dei dati e migliorare la velocità di risposta di crystal).
I join supportati sono:
Interno (inner)
Sinistro (left)
Destro (right)
Ordinamento
È possibile ordinare in maniera ascendente o discendente i risultati finali in base a ciascuna colonna delle fonti date connesse.
Filtri statici
In crystal, i filtri statici corrispondono alla where clause di SQL.
È possibile applicare i filtri statici ai dati connessi: i filtri statici sono applicati di default a un topic e non devono essere confusi con i filtri dinamici che vengono applicati nel passaggio “filter” del flusso di configurazione di un topic.
Puoi applicare più di un filtro statico a ciascun topic attraverso operazioni specifiche. Ad esempio, puoi selezionare “categoria” come filtro statico e assegnare l’operazione “uguale a” (equals) “gadget” e il topic farà riferimento solo agli oggetti “gadget”. Oppure puoi selezionare il filtro “prezzo”, l’operazione “maggiore di” (greater than) e il valore 100: il topic restituirà solo i valori dal 100 in su.
Le operazioni disponibili sono:
Equal
Different
Empty
Not Empty
Greater Than
Less Than
Greater Than Or Equal To
Less Than Or Equal To
Between
Funzioni di aggregazione
Puoi scegliere tra le seguenti funzioni di aggregazione:
Count
Count distinct
Sum
Average
Last updated