Analisi con la seconda data in Tableau Desktop

Questa è la seconda fase dell’esercitazione e presuppone che il primo passaggio, Trovare la seconda data con Tableau Prep, sia stato completato.

Nella prima fase, abbiamo preso il nostro insieme di dati originali e gli abbiamo conferito una forma per rispondere alle seguenti domande:

  1. Quanti giorni sono trascorsi tra la prima e la seconda infrazione per ogni conducente?

  2. Confronta gli importi delle sanzioni relative alla prima e alla seconda infrazione. Esiste una relazione tra di esse?

  3. Quale conducente ha pagato di più? Chi ha pagato di meno?

  4. Quanti conducenti hanno commesso più tipi di infrazione?

  5. Qual è stato l’importo medio della sanzione per i conducenti che non hanno mai frequentato la scuola guida?

Mentre esploriamo queste domande, diventa chiaro che ci sono alcuni pro e contro alla prima struttura di dati che abbiamo creato. Torneremo in Tableau Prep Builder e faremo qualche ulteriore rimodellamento, poi vedremo come questo influisce sulla medesima analisi in Tableau Desktop. Infine, esamineremo un approccio all’analisi, esclusivamente per Tableau Desktop, utilizzando le espressioni Livello di dettaglio (LOD) con i dati originali.

L’obiettivo di questa esercitazione è presentare diversi concetti nel contesto di uno scenario di vita reale e prendere in considerazione più opzioni, stabilendo in modo non prescrittivo quale sia la migliore. Alla fine, avrai una visione completa di come la struttura dei dati influisce su calcoli e analisi, oltre ad aver acquisito maggiore familiarità con diversi aspetti di Tableau Prep e con i calcoli in Tableau Desktop.

Nota: per completare le attività di questa esercitazione, devi aver installato Tableau Prep Builder e Tableau Desktop (quest’ultimo è facoltativo) e aver scaricato i dati.

Per installare Tableau Prep e Tableau Desktop prima di continuare con questa esercitazione, consulta la Guida alla distribuzione di Tableau Desktop e Tableau Prep(Il collegamento viene aperto in una nuova finestra). Altrimenti puoi scaricare le versioni di prova gratuite di Tableau Prep(Il collegamento viene aperto in una nuova finestra) e Tableau Desktop(Il collegamento viene aperto in una nuova finestra).

L’insieme di dati è l’output ottenuto da Driver Infractions.tflx, come creato nella prima fase.

Analisi in Tableau Desktop

Ora che abbiamo configurato i nostri dati, li importeremo in Tableau Desktop. Possiamo rispondere facilmente ad alcune domande, ma altre implicano pochi (o molti) calcoli. Prova con le domande sottostanti; puoi espandere ciascuna di esse per visualizzare le informazioni di base su come procedere in caso di difficoltà.

Nota: puoi scaricare la cartella di lavoro Driver Infractions.twbx(Il collegamento viene aperto in una nuova finestra) per esaminare le soluzioni nel contesto. Ricorda che ci possono essere modi alternativi per interpretare l’analisi o approfondire le risposte.

1. Quanti giorni sono trascorsi tra la prima e la seconda infrazione per ogni conducente?
  1. Per rispondere a questa domanda in Tableau Desktop, useremo la funzione DATEDIFF. Questa funzione considera tre argomenti: la parte della data, la data di inizio e la data di fine. Poiché vogliamo conoscere i giorni che intercorrono tra questi eventi, useremo la parte della data "giorno". Le nostre date di inizio e fine sono riportate nell’insieme di dati come Data prima infrazione e Data seconda infrazione.

  2. Il calcolo è:

    Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  3. Possiamo tracciare un grafico a barre con l’ID conducente. Nota che sette conducenti non hanno commesso una seconda infrazione, quindi ci sono sette nulli.

    Grafico a barre dei conducenti in base al tempo trascorso tra le infrazioni

2. Confronta gli importi delle sanzioni relative alla prima e alla seconda infrazione. Esiste una relazione tra di esse?
  1. Per rispondere a questa domanda in Tableau Desktop, creeremo un grafico a dispersione di Importo prima sanzione e Importo seconda sanzione. Portando l’ID conducente nello spazio Dettagli sulla scheda indicatori, possiamo creare un indicatore per ciascun conducente.

  2. Per aggiungere una linea di tendenza, utilizza la scheda Analisi nel riquadro di sinistra e visualizzerai una linea di tendenza lineare. Passando sopra la linea di tendenza, possiamo notare che il valore R quadrato è praticamente nullo, e il valore p è decisamente superiore a qualsiasi limite per rilevanza. Possiamo stabilire che non c’è correlazione tra la prima e la seconda sanzione.

    Se dovessimo usare questo grafico a dispersione in una dashboard, la linea di tendenza dovrebbe essere rimossa.

Grafico a dispersione della prima e della seconda sanzione in base all’ID conducente, con le informazioni della linea di tendenza visualizzate

3. Quale conducente ha pagato di più? Chi ha pagato di meno?

Quando vogliamo approfondire l’analisi, potresti dover creare dei calcoli.

  1. Per rispondere a questa domanda in Tableau Desktop, dobbiamo aggiungere le multe per entrambe le infrazioni in un unico campo. Poiché alcuni driver potrebbero non aver commesso una seconda infrazione, dobbiamo usare la funzione nulla con valore zero ZN per trasformare qualsiasi nullo per l’Importo seconda sanzione in zeri. In caso contrario, verranno restituiti valori Null se non è presente una seconda sanzione.

  2. Il calcolo è:

    Importo totale pagato = [1st Fine Amount] + ZN([2nd Fine Amount])

  3. Possiamo quindi tenere traccia dell’Importo totale pagato per ogni ID conducente e applicare filtri al grafico a barre.

Grafico a barre dell’importo pagato dall’ID conducente, con l’editor di calcolo che mostra l’importo pagato

4. Quanti conducenti hanno commesso più tipi di infrazione?
  1. Per rispondere a ciò in Tableau Desktop, dobbiamo svolgere un calcolo IF più ricercato, confrontando se il primo e il secondo tipo di infrazione sono gli stessi. Se lo sono, vogliamo assegnare il valore "1". Se non sono gli stessi, assegneremo "2". Poiché siamo interessati solo a più tipi di infrazione, a qualsiasi altro risultato, ad esempio un secondo tipo di infrazione Null, verrà assegnato "1".

  2. Il calcolo è:

    Numero dei tipi di infrazione =

    IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 
    ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 
    ELSE 1 END
  3. Possiamo quindi tenere traccia del Numero dei tipi di infrazione per ogni ID conducente e applicare filtri al grafico a barre.

Grafico a barre del numero di tipi di infrazione per ID conducente, con l’editor di calcolo che mostra il numero di tipi di infrazione

5. Qual è stato l’importo medio della sanzione per i conducenti che non hanno mai frequentato la scuola guida?
  1. Per rispondere a questa domanda in Tableau Desktop, non possiamo semplicemente dividere l’importo totale della sanzione per due, dato che alcuni conducenti hanno commesso una sola infrazione. Inoltre, non possiamo calcolare la sanzione media per conducente e fare la media di quei valori, poiché la media delle medie può portare ad incongruenze. Dobbiamo invece calcolare l’importo totale pagato dai conducenti che non hanno mai frequentato la scuola guida e poi dividere per il numero totale di infrazioni associate a tali sanzioni.

    1. Per prima cosa, dobbiamo determinare quali conducenti hanno commesso una seconda infrazione. Possiamo sfruttare il fatto che tutti i campi relativi a "2a" non saranno presenti informazioni se non c’è stata una seconda infrazione e iniziare a impostare il calcolo:

      IFNULL([2nd Infraction Type], 'no')

      Questa operazione restituirà un tipo di infrazione se esiste, o "no" se non si è verificata una seconda infrazione.

    2. Poi, dobbiamo trasformare queste informazioni nel numero di infrazioni, 1 o 2. Se il risultato del nostro calcolo IFNULL è "no", allora dobbiamo segnalare che il conducente ha ricevuto una sola sanzione. Ogni altri risultato deve essere contrassegnato come avente due sanzioni. Il calcolo è:

      Numero di infrazioni =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 
      ELSE 2 
      END
    3. Ora dobbiamo considerare l’importo totale della sanzione. Come per la domanda 3 di cui sopra, aggiungeremo la prima e la seconda sanzione, con una funzione ZN sulla seconda. Tuttavia, poiché vogliamo che questo venga calcolato a livello dell’intero insieme di dati, è una buona pratica specificare le aggregazioni, SUM, nel calcolo stesso. Il calcolo è: 

      SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) )

    4. Per riunire tutto insieme, prenderemo questo importo totale della sanzione e la divideremo per il nostro nuovo campo calcolato Numero di infrazioni, al fine di determinare l’importo medio della sanzione:

      Sanzione media = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  2. Dobbiamo anche filtrare i conducenti che hanno frequentato la scuola guida, ma queste informazioni sono memorizzate in due campi.

    1. Tableau è molto efficiente nei calcoli numerici. Lo scriveremo con i numeri per ottimizzare il più possibile le prestazioni. Per combinare questi due campi, creeremo un calcolo per ognuno di essi che dice "Sì = 1" e "No = 0" (nullo dovrebbe anche essere = 0, per i conducenti senza seconda infrazione). Sommando il risultato di questi calcoli, qualsiasi conducente con un valore complessivo di 0 non è mai andato alla scuola guida (e un valore di 1 o 2 rappresenta quante volte è andato). Possiamo quindi filtrare per mantenere solo i driver con un valore di 0.

    2. Questa volta, useremo un’istruzione CASE invece di IF. Operano in modo molto simile, ma hanno una sintassi diversa. L’inizio del calcolo dovrebbe apparire così:

      CASE [1st Traffic School]
      WHEN 'Yes' THEN 1
      WHEN 'No' THEN 
      ELSE 0
      END
    3. E successivamente faremo la stessa cosa per la seconda scuola guida. Possiamo aggiungere entrambi i pezzi nello stesso calcolo avvolgendo ogni istruzione case tra parentesi e aggiungendo un più tra di essi. Rimuovendo alcune delle interruzioni di riga, apparirà così:

      Numero di presenze a scuola guida =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      
    4. Se trasciniamo Numero di presenze a scuola guida nell’area Dimensioni del riquadro Dati (sopra la linea), i valori da 0 a 2 diventeranno distinti.

    5. Ora, se filtriamo su Numero di presenze a scuola guida, possiamo selezionare solo lo 0, sapendo che otterremo i conducenti che non hanno mai frequentato la scuola guida.

  3. Per rispondere alla domanda originale, porteremo semplicemente Sanzione media allo spazio Testo della scheda Indicatori.

    Poiché abbiamo inserito le aggregazioni nel calcolo, l’aggregazione nella pillola sarà AGG e non possiamo cambiarla. È ciò che ci aspettavamo.

Vista con un singolo numero dell’importo medio pagato con l’editor di calcolo aperto per visualizzare il numero di presenze a scuola guida

Un passo avanti - Dati in forma pivot

Mentre i dati con cui abbiamo lavorato sono ben strutturati per rispondere a domande specifiche sulla prima e seconda infrazione, non è la struttura standard raccomandata per l’uso con Tableau Desktop. Più la nostra analisi si discosta dalle domande di base sulle date delle infrazioni, più i nostri calcoli diventano complicati per unire le informazioni rilevanti in forma utilizzabile.

Generalmente, quando i dati sono memorizzati con colonne multiple per lo stesso tipo di dati (come due colonne per la data, due colonne per l’importo della sanzione, ecc.) e le informazioni uniche sono memorizzate nel nome del campo (come ad esempio se si tratta della prima o della seconda infrazione), ciò indica che i dati devono essere trasformati tramite pivot.

L’esecuzione di un pivot multiplo in Tableau Prep Builder può gestire bene questa situazione. Possiamo lavorare dalla fine del flusso di Tableau Prep Infrazioni del conducente creato nell’esercitazione precedente Trovare la seconda data con Tableau Prep.

Suggerimento: assicurati di essere di nuovo in Tableau Prep per questi passaggi successivi.

  1. Dalla fase di pulizia finale, aggiungere un passaggio Pivot per ciascun campo duplicato. Utilizza l’icona del segno più nell’angolo superiore destro dell’area Campi trasformati tramite pivot per aggiungere altri valori pivot. Tutti gli insiemi dei campi (come l’importo della prima e della seconda sanzione) devono essere trasformati insieme in forma pivot.

    Suggerimento: per ulteriori informazioni su come trasformare tramite pivot, consulta Pulire e dare forma ai dati.

  2. Nell’area Campi trasformati tramite pivot, nella colonna Nomi Pivot1 fai doppio clic su ogni valore e rinominali 1a e 2a.

    Riquadro di configurazione di Pivot 1 in Tableau Prep che mostra i cinque pivot

I risultati possono essere riordinati eliminando le date nulle e rinominando e riordinando i campi.

  1. Aggiungi una fase di pulizia dopo il pivot. Nella colonna Data infrazione, fai clic con il tasto destro del mouse sulla barra nulla e scegli Escludere.

  2. Fai doppio clic sul nome del campo Nomi Pivot1 e rinominalo in Numero di infrazione.

  3. Trascina i campi se necessario per riordinarli come segue:

    Anteprima dei dati sottoposti a pivot e ripuliti

  1. Dai nuovi dati in forma pivot, crea un output denominato Infrazioni conducente in forma pivot e portarlo in Tableau Desktop. (Non dimenticare di eseguire il flusso dopo aver aggiunto il passaggio Output.)

Ora possiamo rivedere le nostre cinque domande con questa struttura di dati in forma pivot; puoi espandere ciascuna di esse per visualizzare le informazioni generali su come procedere in caso di difficoltà.

Nota: puoi scaricare il file completo del flusso Pivoted Driver Infractions.tflx per controllare il lavoro oppure puoi scaricare la cartella di lavoro Pivoted Driver Infractions.twbx per esaminare le soluzioni nel contesto. Ricorda che ci possono essere modi alternativi per interpretare l’analisi o approfondire le risposte.

1. Quanti giorni sono trascorsi tra la prima e la seconda infrazione per ogni conducente?
  1. Per rispondere a questa domanda in Tableau Desktop, come abbiamo fatto con il primo insieme di dati, useremo la funzione DATEDIFF . Questa funzione richiede una data di inizio e una data di fine. Queste informazioni sono presenti nei nostri dati, ma tutte in un unico campo. Dobbiamo estrarle in due campi.

    1. Creare due campi calcolati in via preliminare:

      Data 1a infrazione = IF [Infraction Number] = "1st" THEN [Infraction Date] END

      Data 2a infrazione = IF [Infraction Number] = "2nd" THEN [Infraction Date] END

    2. Poiché vogliamo essere sicuri che entrambi questi valori siano disponibili per essere confrontati per ogni conducente, dobbiamo fissarli al livello di ID conducente.

      Nota: non ci credi? Prova ad eseguire un calcolo DATEDIFF con questi due campi così come sono: Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])
      Otterrai risultati nulli ovunque, perché Tableau sta cercando di confrontare attraverso una struttura di dati che assomiglia a questa:
      tabella di testo che mostra risultati Null
      Qui, la riga che conosce la prima data non conosce la seconda data, e viceversa. Per aggirare questo problema, useremo un’espressione Livello di dettaglio FIXED per forzare queste prime e seconde date ad essere correlate dall’ID conducente.

    3. Modifica ciascun calcolo come segue:

      Data 1a infrazione = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) }

      Data 2a infrazione = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

      Nota: il calcolo IF originale deve essere aggregato quando incorporato in un’espressione LOD. Possiamo usare qualsiasi aggregazione di base che conservi il valore della data (quindi aggregazioni come SUM, AVG, o MIN work, ma non CNT o CNTD).

      Nota: questi calcoli possono anche essere creati in Tableau Prep Builder. Per maggiori informazioni sulle espressioni LOD in Prep, consulta Creare calcoli Level of Detail, di classificazione e di sezione.

    4. Ora possiamo creare il calcolo DATEDIFF come segue:

      Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

      • Se vogliamo visualizzare le settimane o i mesi, basta modificare la parte della data (attualmente 'day').

      • Sarebbe anche possibile creare un unico calcolo per l’intera operazione posizionando direttamente i calcoli FIXED all’interno di DATEDIFF: 

        DATEDIFF ( 'day',

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Infraction Date] END ) },

        { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Infraction Date] END ) }

        )

    5. Traccia Tempo trascorso tra le infrazioni in Colonne e ID conducente in Righe.

I risultati saranno identici a quello con la struttura dei dati trasformati tramite UnPivot

2. Confronta gli importi delle sanzioni relative alla prima e alla seconda infrazione. Esiste una relazione tra di esse?
  1. Per rispondere a questa domanda in Tableau Desktop, useremo una logica molto simile alla domanda precedente. Useremo il Numero infrazione per identificare se una data riga corrisponde alla prima o alla seconda infrazione, poi estraiamo l’ammontare della sanzione appropriata.

    1. Se vogliamo creare solo un grafico a dispersione, possiamo saltare la parte di LOD e usare il calcolo IF :

      1a - Importo sanzione = IF [Infraction Number] = "1st" THEN [Fine Amount] END

      2a - Importo sanzione = IF [Infraction Number] = "2nd" THEN [Fine Amount] END

    2. Tuttavia, se volessimo confrontare e vedere la differenza di importo tra la prima e la seconda sanzione per un singolo conducente, incontreremo lo stesso problema nullo delle date. Non può nuocere includere questi calcoli in un LOD FIXED , quindi potrebbe essere utile farlo fin dall’inizio:

      1a - Importo sanzione = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

      2a - Importo sanzione = { FIXED [Driver ID] : MIN ( IF [Infraction Number] = "2nd" THEN [Fine Amount] END ) }

      Questi calcoli possono anche essere creati in Tableau Prep Builder. Per maggiori informazioni sulle espressioni LOD in Prep, consulta Creare calcoli Level of Detail, di classificazione e di sezione.

    3. Crea un grafico a dispersione con Importo 1a sanzione in Colonne e Importo 2a sanzione in Righe, quindi visualizza una linea di tendenza lineare come in precedenza.

I risultati saranno identici a quello con la struttura dei dati trasformati tramite UnPivot

3. Quale conducente ha pagato di più? Chi ha pagato di meno?
  1. Per rispondere a questa domanda in Tableau Desktop, la struttura dei dati in forma pivot è ideale. Tutto quello che dobbiamo fare è estrarre l’ID conducente e l’importo della sanzione in un grafico a barre. L’aggregazione predefinita è già SUM, quindi l’importo totale pagato dal conducente verrà tracciato automaticamente.

I risultati saranno identici a quello con la struttura dei dati trasformati tramite UnPivot

4. Quanti conducenti hanno commesso più tipi di infrazione?
  1. Per rispondere a questa domanda in Tableau Desktop, la struttura dei dati in forma pivot è ideale. Dobbiamo solo estrarre l’ID conducente e un Conteggio distinti del tipo di infrazione come grafico a barre, e otterremo la risposta.

I risultati saranno identici a quello con la struttura dei dati trasformati tramite UnPivot

5. Qual è stato l’importo medio della sanzione per i conducenti che non hanno mai frequentato la scuola guida?
  1. Per rispondere a questa domanda in Tableau Desktop, non possiamo semplicemente dividere l’importo totale della sanzione per due, dato che alcuni conducenti hanno commesso una sola infrazione. Inoltre, non possiamo calcolare la sanzione media per conducente e fare la media di quei valori, poiché la media delle medie può portare ad incongruenze. Dobbiamo invece calcolare l’importo totale pagato dai conducenti che non hanno mai frequentato la scuola guida e poi dividere per il numero totale di infrazioni associate a tali sanzioni.

    1. Per prima cosa, dobbiamo determinare quali conducenti hanno commesso una seconda infrazione. Possiamo sfruttare il fatto che la Data seconda infrazione sarà nulla se non c’è stata una seconda infrazione e iniziare a impostare il calcolo:

      IFNULL(STR([2nd Infraction Date]), 'no')

      Questa operazione restituirà la data della seconda infrazione se esiste, o "no" se non si è verificata una seconda infrazione.

      Nota: la parte STR di questo calcolo è necessaria perché IFNULL  richiede la coerenza del tipo di dati nelle sue argomentazioni. Poiché vogliamo restituire la stringa "no" per i valori nulli, abbiamo bisogno di convertire anche la data in una stringa.

    2. Poi, dobbiamo trasformare queste informazioni nel numero di infrazioni, 1 o 2. Se il risultato del nostro calcolo IFNULL è "no", allora dobbiamo segnalare che il conducente ha ricevuto una sola sanzione. Ogni altri risultato deve essere contrassegnato come avente due sanzioni. Il calcolo è:

      Numero di infrazioni =

      IF IFNULL(STR([2nd Infraction Date]), 'no')= 'no' THEN 1 
      ELSE 2 
      END
      
    3. Ora dobbiamo considerare l’importo medio della sanzione. Abbiamo già un solo campo per Importo sanzione. Dobbiamo solo dividerlo per il nostro nuovo campo Numero di infrazioni, comprendendo entrambi in SUM

      Sanzione media = (SUM([Fine Amount]) / SUM([Number of Infractions])

  2. Dobbiamo anche filtrare i conducenti che hanno frequentato la scuola guida. Sembra che potremmo usare il campo Scuola di traffico e filtrare su Scuola di traffico = no. Tuttavia, in questo modo il filtro verrebbe applicato in base alle infrazioni non associate alla scuola guida, non ai conducenti che non hanno mai frequentato la scuola guida. Se un conducente ha frequentato la scuola guida per un’infrazione ma non per l’altra, non vogliamo che nessuna delle due infrazioni sia considerata qui: il conducente ha frequentato la scuola guida e quindi non è adatto per i parametri della domanda.

    Vogliamo filtrare tutti i conducenti che hanno frequentato la scuola guida. In termini di dati, vogliamo filtrare tutti gli automobilisti che hanno un "Sì" per la Scuola guida in qualsiasi riga, indipendentemente dall’infrazione a cui è associata. Costruiamo i nostri calcoli in più fasi, utilizzando una semplice visualizzazione per tenere traccia di ciò che sta accadendo:

    1. In primo luogo, vogliamo sapere se un conducente ha un "Sì" per la scuola guida. Trascina l’ID conducente in Righe e Scuola guida in Colonne. Otterremo una tabella di testo con il testo del segnaposto "Abc" che indica i valori rilevanti per ogni conducente.

    2. Successivamente, vogliamo costruire un calcolo che identificherà se il valore della Scuola guida è "Sì". La prima fase del calcolo è:

      Scuola guida frequentata = CONTAINS([Traffic School), 'Yes')

      Se portiamo Scuola guida frequentata nello spazio Colore nella scheda Indicatori vediamo che assegna accuratamente etichette "Falso" per ogni indicatore nella colonna "No", e "Vero" per ogni indicatore nella colonna "Sì".

    3. Tuttavia, ciò che vogliamo veramente è questa informazione a livello di conducente, non l’infrazione. Un’espressione LOD è un adattamento naturale quando si cerca di calcolare un risultato ad un diverso livello di dettaglio rispetto alla struttura di base dei dati. La faremo diventare un’espressione LOD FIXED . Ma, come sappiamo, la porzione di espressione aggregata di un LOD deve essere aggregata. In precedenza, abbiamo usato MIN. Funzionerà qui? Modificheremo il calcolo in modo che diventi: 

      Scuola guida frequentata = { FIXED [Driver ID] : MIN( CONTAINS([Traffic School], 'Yes'))}

      Visualizzazione dell’ID conducente per scuola guida, con la Scuola guida frequentata in Colori

      Con quel cambiamento applicato nella visualizzazione, vediamo il contrario di ciò che vogliamo. Tutti i conducenti che hanno un "No" sono contrassegnati come "Falso" su tutta la scheda. Invece, vogliamo che il "Sì" sia "Vero" per ogni registro per tale conducente. Cosa ci fa il MIN qui? Sta scegliendo la prima risposta in ordine alfabetico, cioè "No".

    4. E se lo cambiassimo in MAX? Prenderebbe l’ultima risposta in ordine alfabetico? Modificheremo il calcolo in modo che diventi: 

      Scuola guida frequentata = { FIXED [Driver ID] : MAX ( CONTAINS( [Traffic School], 'Yes') ) }

      Visualizzazione dell’ID conducente per scuola guida, con la Scuola guida frequentata in Colori

      Eccola qui: se un conducente ha un "Sì" in qualsiasi punto dei dati, sono contrassegnati come "Vero" per aver frequentato la scuola guida, anche sull’infrazione che non ha coinvolto la scuola guida.

    5. Se portiamo la Scuola guida frequentata allo spazio Filtri e selezioniamo solo "Falso", ci rimarranno solo i conducenti che non hanno mai frequentato la scuola guida.

  3. Per rispondere alla domanda originale, con il nostro filtro corretto, porteremo semplicemente Sanzione media allo spazio Testo della scheda Indicatori. Poiché abbiamo inserito le aggregazioni nel calcolo, l’aggregazione nel campo sarà AGG e non possiamo cambiarla. È ciò che ci aspettavamo.

I risultati saranno identici a quello con la struttura dei dati trasformati tramite UnPivot

I vantaggi dei dati in forma pivot

Potremmo attenerci alla struttura originale dei dati del tutorial se sapessimo di dover rispondere solo a domande a cui è facile rispondere con quella struttura. Tuttavia, il formato dei dati in forma pivot è più flessibile. Anche se richiede alcuni calcoli, una volta che sono in atto, l’insieme di dati risultante è adatto a rispondere a domande più ampie.

Un altro passo avanti - solo per i calcoli

E se non disponi di accesso a Tableau Prep Builder? È davvero una sfortuna se hai difficoltà con i dati originali? No, per niente!

Le espressioni LOD e di Tableau Desktop possono rispondere a tutte le nostre domande analitiche. Se ci colleghiamo al file Traffic Violations.xlsx(Il collegamento viene aperto in una nuova finestra) originale, sembra molto simile all’insieme di dati in forma pivot - solo senza il campo fondamentale di Numero infrazioni. Dobbiamo imitare il risultato dei passaggi di aggregazione tramite espressioni LOD.

Nota: puoi scaricare la cartella di lavoro LOD Driver Infractions.twbx(Il collegamento viene aperto in una nuova finestra) per esaminare le soluzioni nel contesto. Ricorda che ci possono essere modi alternativi per interpretare l’analisi o approfondire le risposte.

1. Quanti giorni sono trascorsi tra la prima e la seconda infrazione per ogni conducente?
  1. Per rispondere in Tableau Desktop, useremo la funzione DATEDIFF . Questa funzione richiede una data di inizio e una data di fine. Queste informazioni sono presenti nei nostri dati, ma tutte in un unico campo. Dobbiamo estrarle in due campi. Poiché vogliamo essere sicuri che entrambi questi valori siano disponibili per essere confrontati per ogni conducente, dobbiamo fissarli al livello di ID conducente.

    1. Per trovare la data della prima infrazione, usiamo il calcolo:

      1ª infrazione = { FIXED [Driver ID] : MIN ( [Infraction Date] ) } 

    2. Ci occuperemo della seconda infrazione in più passaggi.

      1. Per iniziare, dobbiamo considerare solo le date maggiori della prima data:

        IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END

      2. Ma questo ci darà tutte le infrazioni dopo la prima, e noi vogliamo solo la seconda. Quindi vogliamo la data inferiore. Includi il tutto in MIN:

        MIN( IF [Infraction] : [1st Infraction] THEN [Infraction Date] END )

      3. Vogliamo anche ricalcolare la data della seconda infrazione per ogni conducente. È qui che entrano in gioco le espressioni LOD. Risolveremo la questione al livello di ID conducente:

        2ª infrazione = { FIXED [Driver ID] : MIN ( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

    3. E ora possiamo creare il calcolo DATEDIFF :

      Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction], [2nd Infraction])

I risultati saranno identici a quelli con le altre due strutture dei dati.

2. Confronta gli importi delle sanzioni relative alla prima e alla seconda infrazione. Esiste una relazione tra di esse?
  1. Per rispondere a questa domanda in Tableau Desktop, useremo una logica molto simile alla domanda precedente. Useremo i campi Prima infrazione e Seconda infrazione che abbiamo creato per la prima domanda, per identificare se una data riga corrisponde alla prima o alla seconda infrazione, poi estraiamo l’ammontare della sanzione appropriata.

    1. Se vogliamo creare solo un grafico a dispersione, possiamo saltare la parte di LOD e usare un calcolo IF :

      1a - Importo sanzione = IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END

      2a - Importo sanzione = IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END

    2. Tuttavia, se vogliamo confrontare e vedere la differenza di importo tra la prima e la seconda sanzione per un singolo conducente, ci imbatteremmo in problemi con i nulli, come nella prima struttura dei dati. Non può nuocere includere questi calcoli in un LOD FIXED, quindi potrebbe essere utile farlo fin dall’inizio:

      1a - Importo sanzione = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

      2a - Importo sanzione = {FIXED [Driver ID] : MIN( IF [2ndInfraction] = [Infraction Date] THEN [Fine Amount] END ) }

I risultati saranno identici a quelli con le altre due strutture dei dati.

3. Quale conducente ha pagato di più? Chi ha pagato di meno?
  1. Per rispondere in Tableau Desktop, dobbiamo prima riflettere sul metodo solo per LOD. Entrambi i metodi che utilizzano Tableau Prep filtrano i record che non sono la prima o la seconda infrazione per un conducente. Il metodo LOD in Tableau Desktop mantiene tutti i dati. Questo significa che se dovessimo creare un viz di SUM(Importo pagato) per ID conducente, la versione solo per Tableau Desktop mostrerà importi più alti per i driver con più di due infrazioni. Per ottenere un valore di Importo totale pagato dai dati completi che corrisponde agli altri metodi, invece di utilizzare il campo originale Importo sanzione, dobbiamo sommare la prima e la seconda sanzione come abbiamo fatto con la prima struttura dei dati.

  2. Usando i campi che abbiamo creato per la domanda 2, aggiungeremo i due importi delle sanzioni. ZN  è necessario per evitare un risultato nullo per tutti i conducenti che hanno commesso una sola infrazione. Il calcolo è: 

    Importo totale pagato = [1st Fine Amount] + ZN([2nd Fine Amount])

I risultati saranno identici a quelli con le altre due strutture dei dati.

4. Quanti conducenti hanno commesso più tipi di infrazione?
  1. Per rispondere a questa domanda in Tableau Desktop, non possiamo semplicemente estrarre un ID conducente e un Conteggio distinti del tipo di infrazione. Poiché questo insieme di dati presenta infrazioni oltre la seconda, alcuni conducenti possono avere più di due tipi di infrazioni. Per abbinare i risultati con gli altri metodi, dobbiamo limitare l’ambito di applicazione solo alle prime due infrazioni.

  1. Possiamo estrarre i tipi della prima e seconda infrazione, inserirli in espressioni LOD per renderli FIXED al conducente, quindi utilizzare un calcolo IF per contare i tipi:

    1. 1a - Tipo infrazione = { FIXED [Driver ID] : MIN ( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    2. 2a - Tipo infrazione = { FIXED [Driver ID] : MIN ( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

    3. Numero dei tipi di infrazione =

      IF [1st Infraction Type] = [2nd Infraction Type] THEN 1 
      ELSEIF [1st Infraction Type] != [2nd Infraction Type] THEN 2
      ELSE 1 END 

      Nota: è anche possibile creare molti di questi calcoli come un unico campo, annidando i calcoli iniziali direttamente nel calcolo più grande. In questo caso, il calcolo combinato assomiglierebbe a questo:
      IF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      =
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 1

      ELSEIF
      {FIXED [Driver ID] : MIN(IF [1st Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      !=
      {FIXED [Driver ID] : MIN(IF [2nd Infraction]=[Infraction Date] THEN [Infraction Type] END)}
      THEN 2

      ELSE 1
      END


      Al quale è un po' più difficile da dare un senso, ma funziona se lo si preferisce. (Nota che le interruzioni di riga e alcuni spazi non influenzano l’interpretazione di un calcolo da parte di Tableau.)

  2. Possiamo quindi tenere traccia del Numero dei tipi di infrazione per ogni ID conducente e applicare filtri al grafico a barre.

I risultati saranno identici a quelli con le altre due strutture dei dati.

5. Qual è stato l’importo medio della sanzione per i conducenti che non hanno mai frequentato la scuola guida?
  1. Per rispondere a questa domanda in Tableau Desktop, non possiamo semplicemente dividere l’importo totale della sanzione per due, dato che alcuni conducenti hanno commesso una sola infrazione. Inoltre, non possiamo calcolare la sanzione media per conducente e fare la media di quei valori, poiché la media delle medie può portare ad incongruenze. Dobbiamo invece calcolare l’importo totale pagato dai conducenti che non hanno mai frequentato la scuola guida e poi dividere per il numero totale di infrazioni associate a tali sanzioni.

    1. Per prima cosa, dobbiamo determinare quali conducenti hanno commesso una seconda infrazione. Possiamo sfruttare il fatto che tutti i campi relativi a "2a" non saranno presenti informazioni se non c’è stata una seconda infrazione e iniziare a impostare il calcolo:

      IFNULL([2nd Infraction Type], 'no')

      Questa operazione restituirà un tipo di infrazione se esiste, o "no" se non si è verificata una seconda infrazione.

    2. Poi, dobbiamo trasformare queste informazioni nel numero di infrazioni, 1 o 2. Se il risultato del nostro calcolo IFNULL è "no", allora dobbiamo segnalare che il conducente ha ricevuto una sola sanzione. Ogni altri risultato deve essere contrassegnato come avente due sanzioni. Il calcolo è:

      Numero di infrazioni =

      IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1
      ELSE 2
      END
    3. Per l’importo totale pagato, possiamo utilizzare il calcolo della domanda 3. Per riunire tutto insieme, prenderemo questo importo totale della sanzione e la divideremo per il nostro nuovo campo calcolato Numero di infrazioni, al fine di determinare l’importo medio della sanzione:

      Sanzione media = SUM([Total Amount Paid]) / SUM([Number of Infractions])

  2. Dobbiamo anche filtrare i conducenti che hanno frequentato la scuola guida. Poiché questo insieme di dati contiene alcuni conducenti con una terza o quarta infrazione, non possiamo usare lo stesso metodo della struttura dei dati in forma pivot. Seguiremo invece lo stesso metodo dei dati non in forma pivot, qui riassunti:

    1. In primo luogo, abbiamo bisogno di costruire due calcoli per identificare se la prima e la seconda infrazione ha coinvolto o meno la scuola guida: 

      1a - Scuola guida = { FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

      2a - Scuola guida = { FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

    2. Poi aggiungeremo questi valori per ottenere il numero complessivo di presenze alle scuole guida: 

      Numero di presenze a scuola guida =

      (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
      +
      (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)
    3. Se trasciniamo il Numero di presenze a scuola guida nell’area Dimensioni del riquadro Dati, i valori da 0 a 2 diventano discreti.

    4. Ora, se filtriamo su Numero di presenze a scuola guida, possiamo selezionare solo lo 0, sapendo che otterremo i conducenti che non hanno mai frequentato la scuola guida.

  3. Per rispondere alla domanda originale, porteremo semplicemente Sanzione media allo spazio Testo della scheda Indicatori. Poiché abbiamo inserito le aggregazioni nel calcolo, l’aggregazione nel campo sarà AGG e non possiamo cambiarla. È ciò che ci aspettavamo.

I risultati saranno identici a quelli con le altre due strutture dei dati.

È importante ricordare che questa soluzione ha molti calcoli annidati ed espressioni LOD. A seconda delle dimensioni dell’insieme di dati e della complessità dei dati, le prestazioni potrebbero presentare dei problemi.

Riflessione sulle modalità

Allora, quale percorso seguire? Dipende interamente da te e dagli strumenti a tua disposizione.

  • Se si vuole stare alla larga dai LOD, c’è una soluzione di modellamento dei dati, anche se i calcoli potrebbero essere necessari per alcune analisi (Analisi in Tableau Desktop).

  • Se puoi modellare i dati e ti senti a tuo agio con i calcoli - compresi i LOD - l’opzione centrale offre la migliore flessibilità (Un passo avanti - Dati in forma pivot).

  • Se ti senti a tuo agio con i LOD, l’impatto sulle prestazioni è minimo e/o se non hai accesso a Tableau Prep, la soluzione di questo problema con i soli LOD è un’opzione praticabile (Un altro passo avanti - solo per i calcoli).

Come minimo, è importante capire come l’aggregazione in Tableau Prep e il livello delle espressioni di dettaglio in Tableau Desktop sono correlati e quale impatto hanno sull’analisi dei dati. Come per la maggior parte delle funzioni in Tableau, c’è più di un modo di farle. Esplorare tutte le varie opzioni può aiutare a riunire i concetti e a scegliere la soluzione migliore per te.

Calcoli utilizzati:

Infrazioni del conducente

  • Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction Date], [2nd Infraction Date])

  • Importo totale pagato = [1st Fine Amount] + ZN([2nd Fine Amount])

  • Numero dei tipi di infrazione = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Numero di infrazioni = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Sanzione media = ( SUM([1st Fine Amount]) + SUM( ZN([2nd Fine Amount]) ) ) / SUM([Number of Infractions])

  • Numero di presenze a scuola guida = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Infrazioni del conducente in forma pivot

  • 1ª infrazione = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "1st" THEN [Infraction Date] END)}

  • 2ª infrazione = {FIXED [Driver ID] : MIN(IF [Infraction Number] = "2nd" THEN [Infraction Date] END)}

  • Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • 1a - Importo sanzione = {FIXED [Driver ID] : MIN( IF [Infraction Number] = "1st" THEN [Fine Amount] END ) }

  • Numero di infrazioni = IF IFNULL(STR([2nd Infraction]), 'no')= 'no' THEN 1 ELSE 2 END

  • Sanzione media = SUM([Fine Amount])/SUM([Number of Infractions])

  • Scuola guida frequentata = { FIXED [Driver ID] : MAX( CONTAINS([Traffic School], 'Yes'))}

Infrazioni del conducente LOD

  • 1ª infrazione = {FIXED [Driver ID] : MIN([Infraction Date])}

  • 2ª infrazione = { FIXED [Driver ID] : MIN( IF [Infraction Date] > [1st Infraction] THEN [Infraction Date] END ) }

  • Tempo trascorso tra le infrazioni = DATEDIFF('day', [1st Infraction], [2nd Infraction])

  • 1a - Importo sanzione = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • 2a - Importo sanzione = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Fine Amount] END ) }

  • Importo totale pagato = [1st Fine Amount] + ZN([2nd Fine Amount])

  • 1a - Tipo infrazione = {FIXED [Driver ID] : MIN( IF [1st Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • 2a - Tipo infrazione = {FIXED [Driver ID] : MIN( IF [2nd Infraction] = [Infraction Date] THEN [Infraction Type] END ) }

  • Numero dei tipi di infrazione = IF [1st Infraction Type]=[2nd Infraction Type] THEN 1 ELSEIF [1st Infraction Type]!= [2nd Infraction Type] THEN 2 ELSE 1 END

  • Numero di infrazioni = IF IFNULL([2nd Infraction Type], 'no') = 'no' THEN 1 ELSE 2 END

  • Sanzione media = SUM ([Total Amount Paid]) / SUM([Number of Infractions])

  • 1a - Scuola guida = {FIXED [Driver ID] : MIN (IF [1st Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • 2a - Scuola guida = {FIXED [Driver ID] : MIN (IF [2nd Infraction] = [Infraction Date] THEN [Traffic School] END ) }

  • Numero di presenze a scuola guida = (CASE [1st Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END) + (CASE [2nd Traffic School] WHEN 'Yes' THEN 1 WHEN 'No' THEN 0 ELSE 0 END)

Nota: un ringraziamento speciale ad Ann Jackson per l’articolo pubblicato su Workout Wednesday Do Customers Spend More on Their First or Second Purchase?(Il collegamento viene aperto in una nuova finestra) e al suggerimento di Andy Kriebel riguardo a Tableau Prep Returning the First and Second Purchase Dates(Il collegamento viene aperto in una nuova finestra), che sono stati fonte di ispirazione per questa esercitazione. Facendo clic su questi link, uscirai dal sito Web di Tableau. Tableau non si assume alcuna responsabilità per l’accuratezza o l’aggiornamento delle pagine gestite da fornitori esterni. Contatta i proprietari se hai domande sul loro contenuto.

Grazie per il tuo feedback.Il tuo feedback è stato inviato. Grazie!