Nella cartella di lavoro di Tableau Prep "duplicati da union.tfl", "Ordini gennaio" è il primo report degli ordini effettuati a gennaio. La tabella "Ordini di gennaio (correzioni)" è un rapporto pubblicato successivamente con alcuni nuovi ordini, ma anche correzioni su ordini già esistenti in "Ordini di gennaio". Quando le due tabelle sono unificate, tutte le righe di entrambe le tabelle vengono mantenute, creando misure duplicate.
Il primo flusso in "duplicati da union.tfl" dimostra questo problema.
Opzione 1: Conserva tutti i dati di una tabella e i dati non corrispondenti dell'altra tabella.
Per questo esempio, desideriamo ottenere tutti i dati da "Ordini gennaio (correzioni)" e, da "Ordini gennaio", solo quelli non presenti in "Ordini gennaio (correzioni)".
- Crea un nuovo join tra "Ordini gennaio" e "Ordini gennaio (correzioni)"
- Nel 1 passaggio Join, esegui le seguenti operazioni:
- Per Clausole join applicate, crea una clausola join in [ID Ordine] = [ID Ordine]
- Per Tipo di join, fai clic sulle selezioni del diagramma di Venn in modo da riempire solo il segmento più a sinistra. In Tableau Prep questa opzione è denominata join "Solo a sinistra senza corrispondenza".
- Trascina "Ordini gennaio (correzioni)" su Join 1 e rilascia la tabella su Nuova unione
Opzione 2: Conserva i record con la data più recente
Ad esempio, la Sig.ra. Mouse ha cambiato il suo ordine per aggiungere un altro cappotto, ma questo cambiamento è stato accidentalmente registrato in "Ordini di gennaio". L'ordine corretto è quello con la data più recente.
- Crea un join FULL OUTER tra "Ordini gennaio" e "Ordini gennaio (correzioni)" su [ID Ordine] = [ID Ordine]
- Aggiungi un passaggio dal join 2
- Unisci tutti i campi corrispondenti, a eccezione dei campi data e dei valori di misura:
- Fai clic sul campo i cui valori devono sostituire gli altri nel riquadro di profilo
- Premi CTRL+clic sul campo corrispondente
- Fai clic con il pulsante destro del mouse su uno dei due campi e seleziona Unisci campi
- Quando i campi sono uniti, Tableau Prep non mantiene entrambi i valori (se ci sono due valori diversi), ma piuttosto mantiene il valore del campo selezionato per primo se ce n'è uno.
- Ad esempio, il nome della Sig.ra Horse è stato accidentalmente registrato come Sig.ra House nella tabella "Ordini gennaio" e il suo nome corretto appare in "Ordini gennaio (correzioni). Quando si uniscono [Cliente] e [Cliente-1] voglio prima selezionare [Cliente-1].
- È possibile verificare quale campo sostituirà l'altro dal nome del campo unito. Il nome deve essere formattato come [nome del primo campo e nome del secondo campo]. Il nome del campo elencato per primo sarà il campo che sostituirà l'altro.
- Se hai unito i campi nell'ordine sbagliato, puoi annullare l'unione facendo clic con il pulsante destro del mouse sull'icona dell'unione (situata sopra al nome del campo unito nel riquadro di profilo) e selezionando Rimuovi.
- Fai clic sul pulsante Crea campo calcolato...
- Nella finestra di dialogo Campo calcolato che si apre, esegui le seguenti operazioni, quindi fai clic su OK:
- Attribuisci un nome al campo calcolato. In questo esempio, il campo calcolato si chiama "Data più recente".
- Nel campo Formula, crea un calcolo simile a quello riportato di seguito:
IF [Date] > [Date-1]
THEN [Date]
ELSE IFNULL( [Date-1], [Date] )
END
- Il calcolo precedente restituirà [Data] se è "più grande" o, nel caso di date più recenti, [Data-1]. Altrimenti il calcolo restituirà [Data-1].
- Se uno dei campi è NULL, la prima condizione sarà sempre falsa. La funzione IFNULL() sostituisce [Data-1] con [Data] quando [Data-1] è NULL. Ciò significa che il calcolo restituirà sempre un valore non NULL se esiste.
- Rimuovi [Date] e [Date-1]
- Crea un campo calcolato con un nome simile a "Nuovo costo" con un calcolo simile al seguente:
IF [Date] > [Date-1]
THEN [Cost]
ELSE IFNULL( [Cost-1], [Cost] )
END
- Rimuovi [Costo] and [Costo-1]
- Ripeti i passaggi 6-7 per ogni misura
Opzione 3: tratta ogni duplicato in modo diverso
- Crea un join FULL OUTER tra "Ordini gennaio" e "Ordini gennaio (correzioni)" su [ID Ordine] = [ID Ordine]
- Aggiungi un passaggio dal join 3
- Unisci tutti i campi che a) hanno gli stessi valori in entrambe le tabelle, oppure b) i valori di una tabella dovrebbero sempre sostituire i valori di una tabella.
- Fai clic sul pulsante Crea campo calcolato...
- Nella finestra di dialogo Campo calcolato che si apre, esegui le seguenti operazioni, quindi fai clic su OK:
- Attribuisci un nome al campo calcolato. In questo esempio, il campo calcolato è denominato "Nuovo costo"
- Nel campo Formula, crea un calcolo simile a quello riportato di seguito:
CASE [Order ID-1 & Order ID]
WHEN 5 THEN [Date]
WHEN 9 THEN [Date]
ELSE IFNULL([Date-1],[Date])
END
- Il calcolo precedente leggerà ogni valore di [ID ordine-1 e ID ordine] e restituirà il campo data specificato. Per semplificare la procedura, ho solo specificato quali ID devono restituire [Data] e poi tutto il resto restituirà [Data-1], o [Data] se [Data-1] è NULL, a causa della dichiarazione ELSE.
- Il valore [ID ordine-1 e ID ordine] è usato nella dichiarazione CASE perché questo campo avrà un valore unico per ogni riga di dati.
- In questo modo, ogni nuovo ID aggiunto restituirà [Data-1] quando questo flusso verrà ripetuto in futuro.
- Rimuovi [Date] e [Date-1]
- Ripeti i passaggi 4-6 per tutti i campi in cui i duplicati devono essere gestiti su base individuale.