Preparazione dei dati: cosa ti serve per ottenere il meglio da Crystal

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:

  1. Le basi di crystal: entità, aggregazione, alias, obiettivi e topic

  2. La preparazione dei dati fuori da crystal

  3. La gestione dei dati in crystal

1. Le basi di crystal: entità, aggregazione, alias, obiettivi e topic

Entità

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

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”.

Questi sinonimi associati alla stessa unità sono chiamati alias e possono essere utilizzati nel corso della conversazione per riferirsi a una stessa entità.

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).

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?”

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.

Come fare domande a crystal

La conversazione in crystal si basa principalmente su:

  • Entità principali

  • Obiettivi

  • Entità filtro

Sostanzialmente le conversazioni seguono questa struttura:

  • Mostrami l’obiettivo per entità principale in valore filtro.

    • Ad esempio: “Mostrami la tendenza per le vendite nel 2021”.

  • Mostrami l’obiettivo per l’entità principale in valore filtro.

    • Ad esempio: “Mostrami l’andamento nel tempo delle vendite in Germania”.

Puoi trovare tutte le opzioni e le linee guida da seguire per le conversazioni qui.

Di conseguenza, è molto importante preparare i dati per creare topic che possano accedere a essi durante la conversazione in maniera naturale.

A ogni obiettivo corrispondono una o più visualizzazioni, da scegliere a seconda del bisogno. Per maggiori dettagli su obiettivi e visualizzazioni leggi questo articolo.

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. Per maggiori informazioni leggi questo articolo.

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.

2. 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

3. La gestione dei dati in crystal

I 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

Speriamo che questo articolo possa aiutarti a prepare e formattare i dati al meglio per un’esperienza ottimale con crystal.

Vuoi saperne di più sul processo di creazione dei topic? Scopri la nostra sezione Tutorial per admin nelle Risorse!

Se hai domande sulle funzionalità di crystal, hai riscontrato un problema o vuoi condividere il tuo feedback, contattaci utilizzando questo modulo.

Last updated