Non temere i calcoli nelle relazioni
I calcoli possono intimidire. I calcoli in un’origine dati che utilizza relazioni possono intimidire ancora di più. Ma non c’è motivo di temere i calcoli nelle relazioni.
Nota: se non hai ancora familiarità con i principi di base delle origini dati che utilizzano relazioni, potrebbe essere utile leggere Non temere le relazioni prima di consultare questo argomento.
Tipi di calcoli
Un calcolo a livello di riga è un elemento che viene calcolato per ogni record nei dati. Ad esempio, ogni transazione di vendita ha un importo di vendita, il prezzo, potenzialmente rettificato in base alla percentuale di sconto: Price * (1- ZN([Discount]))
. Questo viene calcolato riga per riga per ogni transazione: i risultati sono equivalenti all’aggiunta di una nuova colonna nell’origine dati per Importo vendite.
Esistono anche calcoli aggregati. I calcoli aggregati vengono calcolati al livello di dettaglio della visualizzazione e il relativo valore dipende dalla struttura della vista. I conteggi sono un esempio di calcolo aggregato. Il valore di Count([Title])
dipende dal modo in cui esaminiamo il conteggio: per formato, autore o giorno di vendita.
Per ulteriori informazioni sui tipi di calcoli, consulta il nostro blog(Il collegamento viene aperto in una nuova finestra).
Livello di dettaglio delle tabelle
Poiché ogni tabella nell’origine dati Tableau può avere un proprio livello di dettaglio, la tabella a cui è associato un calcolo ha un impatto significativo. Ad esempio, tradizionalmente in Tableau (nelle versioni precedenti alla 2020.2, prima delle relazioni) era possibile conteggiare il numero di record nell’origine dati creando un calcolo con il valore costante 1
e sommandolo. 1
veniva assegnato a ogni riga nell’origine dati in modo che la somma fosse uguale al numero di righe.
Ora, invece, tale calcolo avrebbe un valore pari a 1
. Non esiste un livello di dettaglio globale per l’intera origine dati e un calcolo costante si trova nell’area non assegnata nella parte inferiore del riquadro Dati. Ha un proprio livello di dettaglio. La somma di 1
è semplicemente 1
.
Come accennato in precedenza, i calcoli che hanno lo stesso livello di dettaglio di una tabella (in genere perché contengono un campo della tabella) appartengono a tale tabella nel riquadro Dati. Ad esempio, la concatenazione di Nome e Cognome per ottenere il nome completo di ogni autore (ovvero, [First Name] + " " + [Last Name]
) viene inserita nella tabella Autore.
Se tuttavia si utilizzassero campi di più tabelle in un unico calcolo, il calcolo verrebbe spostato nell’area non assegnata nella parte inferiore del riquadro Dati. Questo è chiamato un calcolo a livello di riga tra tabelle: richiede un join a livello di riga delle tabelle coinvolte, che può influire sulle prestazioni. Verifica che sia impostata la cardinalità corretta nella sezione Opzioni per le prestazioni della relazione.
Assegnazione del livello di dettaglio
Poiché il livello di dettaglio di una tabella determina ciò che rappresentano i risultati di un calcolo, è importante disporre di calcoli nelle tabelle appropriate. Un’espressione Level of Detail FIXED può essere utilizzata per inserire un calcolo in una tabella specifica. Il campo a cui è fissata l’espressione (la dichiarazione di dimensione(Il collegamento viene aperto in una nuova finestra)) determina il livello di dettaglio dei risultati.
Esempio: presentazioni di libri degli autori
D: A quanti eventi di presentazione di libri partecipa ogni autore?
R: Questo numero deve "appartenere" a ogni autore, quindi dovrebbe far parte della tabella degli autori.
- Eventi presentazione libri autore =
{FIXED [Author Name] : SUM([Book Tour Events])}
- Nel linguaggio comune, questo equivale a: "per ogni autore, somma il numero di eventi di presentazione di libri ad esso associati".
D: Quanti autori non fanno presentazioni di libri?
R: Si potrebbe essere tentati di provare con un calcolo come
COUNTD(IF ISNULL([Book Tour Events]) THEN ([Author Name]) END)
.- Nel linguaggio comune, questo equivale a: "se Book Tour Events è Null, restituisci il nome dell’autore; conteggia ogni nome di autore univoco".
Tuttavia, si tratta di un calcolo a livello di riga tra tabelle perché Book Tour Events proviene dalla tabella Series e Author Name proviene dalla tabella Author. I calcoli tra tabelle di questo tipo quello utilizzano join interni, ovvero quando non è presente alcun valore corrispondente in entrambe le tabelle, la riga viene eliminata dai risultati del join. Questo significa che stiamo chiedendo a Tableau di conteggiare qualcosa che non esiste. Se i due campi si trovassero nella stessa tabella, questo sarebbe un ottimo modo per farlo. Non c’è niente di sbagliato nel calcolo così com’è, se non il fatto che non si adatta alla struttura dell’origine dati.
Dobbiamo invece indicare la presenza o l’assenza di eventi di presentazione di libri per ogni autore e mantenere tali risultati nella tabella Author. Dopo aver contrassegnato ogni autore come "partecipante a una presentazione di libri" o meno, possiamo conteggiare il numero di quelli che non stanno facendo presentazioni di libri.
- Partecipante a presentazioni di libri? =
IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN "No" ELSE "Yes" END
- Nel linguaggio comune, questo equivale a: "per ogni autore, conteggia il numero di eventi di presentazione di libri; se tale conteggio è zero, etichetta l’autore come No, altrimenti etichettalo come Sì". Denominando il campo "Partecipante a presentazioni di libri?" i valori No e Sì verranno allineati.
Ora possiamo conteggiare il numero di No e rispondere alla domanda originale.
Se il nostro calcolo è Autori senza presentazioni libri = IF [Book tour participant?]= "No" THEN ([Author Name]) END
, otterremo un elenco degli autori che non stanno facendo presentazioni di libri. Questo calcolo equivale a: "per ogni autore in cui Partecipante a presentazioni di libri? è No, elenca il nome dell’autore").
Se il calcolo è COUNTD(IF [Book tour participant?]= "No" THEN ([Author Name]) END)
, si otterrà una risposta numerica che verrà posizionata nell’area non assegnata nella parte inferiore del riquadro Dati. Perché? Perché questo calcolo è aggregato.
Domanda aggiuntiva:
È anche possibile utilizzare direttamente la struttura del calcolo Partecipante a presentazioni di libri? per restituire l’elenco dei nomi degli autori. IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN ([Author Name]) END
. Dove verrebbe posizionato questo calcolo nel riquadro Dati? Perché? Provalo nella tua copia di Tableau Desktop o scarica questa cartella di lavoro per scoprirlo. Richiede Tableau Desktop 2020.2 o versione successiva. Una volta nelle cartelle di lavoro, fai clic con il pulsante destro del mouse sul calcolo nel riquadro Dati e seleziona Modifica per aprire l’editor di calcolo e visualizzare una spiegazione nei commenti del calcolo.)
Risorse correlate
Ti senti un po' sopraffatto e vuoi fare un passo indietro? Consulta Non temere le relazioni.
Sei pronto a continuare a scoprire come eseguire analisi complesse con le relazioni? Consulta Non temere le relazioni più approfondite.
Per ulteriori informazioni sugli aspetti tecnici delle relazioni direttamente dal team di gestione del prodotto, consulta la serie sulle relazioni sul blog di Tableau.
- Relationships, part 1: Introducing new data modeling in Tableau(Il collegamento viene aperto in una nuova finestra)
- Relationships, part 2: Tips and tricks(Il collegamento viene aperto in una nuova finestra)
- Relationships, part 3: Asking questions across multiple related tables(Il collegamento viene aperto in una nuova finestra)
Guarda anche i podcast video sulle relazioni di Action Analytics(Il collegamento viene aperto in una nuova finestra), ad esempio Why did Tableau Invent Relationships?(Il collegamento viene aperto in una nuova finestra) Fai clic su "Video Podcast" nella sezione Library(Il collegamento viene aperto in una nuova finestra) per vederne altri.