The importance of Only()
Only() restituisce un valore se è presente un solo valore possibile nel gruppo. Questo valore sarà il risultato dell'aggregazione. Il valore predefinito di Qlik Sense è Only() se non viene specificata alcuna funzione di aggregazione.
In presenza di una relazione uno-a-uno tra la dimensione del grafico e il parametro, la funzione Only() restituisce l'unico valore possibile. In presenza di più valori restituisce NULL. Ad esempio, la ricerca dell'unico prodotto con prezzo unitario = 12 restituirà NULL se più di un prodotto ha un prezzo unitario di 12.
Le immagini seguenti mostrano la differenza tra le relazioni uno-a-uno e uno-a-molti:
La funzione Only() è una funzione di aggregazione. Utilizza molti record come input e restituisce un unico valore, in modo simile a Sum() o Count(). Qlik Sense utilizza le aggregazioni per praticamente ogni calcolo. L'espressione in un grafico, in un'espressione di ordinamento, in una casella di testo, in una ricerca avanzata e in un'etichetta calcolata sono tutte aggregazioni e, pertanto, non possono essere calcolate senza coinvolgere una funzione di aggregazione.
Ma cosa accade se l'utente inserisce un'espressione priva di una funzione di aggregazione esplicita? Ad esempio, se l'espressione di ordinamento è impostata su Date? Oppure se esiste una ricerca avanzata per i clienti che hanno comprato birra e vino usando l'espressione =[Product Type]='Birra e vino'?
Qui, la funzione Only() influisce sul calcolo. In assenza di una funzione di aggregazione esplicita nell'espressione, Qlik Sense utilizza implicitamente la funzione Only(). Nei casi sopra, viene usato Only(Date) come espressione di ordinamento e Only([Product Type])='Birra e vino' come criterio di ricerca.
A volte la nuova espressione restituisce un risultato che l'utente non si aspetta. Entrambi gli esempi di cui sopra funzioneranno nei casi in cui c'è un solo valore possibile di Date o Product Type, ma nessuno dei due funzionerà per i casi in cui è presente più di un valore.
Espressioni diverse che utilizzano Only()
Creeremo quattro KPI con espressioni simili. In questo modo, è possibile confrontare come disporre di riferimenti di campo naked o di Only() in una posizione diversa nell'espressione può avere un grande impatto sui risultati della selezione.
All'interno dell'app, sul foglio Importance of Only() è possibile trovare una casella di filtro con Invoice Date come dimensione.
Procedere come indicato di seguito:
- Creare un KPI.
- Fare clic su Aggiungi misura. Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: Month([Invoice Date])
- Creare tre ulteriori KPIs con le misure: Month(Only([Invoice Date])), Month(Max([Invoice Date])) e Only(Month([Invoice Date])).
- Fare clic su Applica.
In presenza di un riferimento di campo naked, la funzione Only() viene inserita al livello più basso. Ciò significa che i primi due KPI, Month([Invoice Date]) e Month(Only([Invoice Date])) verranno interpretati allo stesso modo e forniranno sempre lo stesso risultato.
Come si può vedere, tre dei quattro KPI restituiscono NULL. Il terzo KPI, Month(Max([Invoice Date])), restituisce già un valore, anche se non è stata effettuata alcuna selezione.
Quando si scrivono delle espressioni ci si deve sempre chiedere quale aggregazione si desidera usare, o quale valore si desidera usare in presenza di più valori. Se si desidera utilizzare NULL per rappresentare svariati valori, allora è possibile lasciare l'espressione così com'è. Per i numeri, è probabile che si desideri utilizzare Sum(), Avg(), Min() o Max(). Per le stringhe si potrebbe decidere di utilizzare Only() o MinString().
Procedere come indicato di seguito:
- Interrompere la modifica del foglio.
- Nella casella di filtro, selezionare la data nel mese di gennaio.
- Confermare la selezione facendo clic su .
Quando viene effettuata una selezione singola, tutti i KPI restituiscono la risposta corretta. Anche se l'espressione contiene un riferimento di campo naked, come l'espressione in Month([Invoice Date]), il fatto di aver effettuato una selezione univoca consente di restituire il valore corretto.
Procedere come indicato di seguito:
- Nella casella di filtro, selezionare una data aggiuntiva nel mese di gennaio.
- Confermare la selezione facendo clic su .
I primi due KPI restituiscono NULL, mentre gli altri due KPI restituiscono il valore corretto di gennaio. In modo specifico, il quarto KPI restituisce una risposta corretta, perché entrambe le selezioni di date effettuate si riferiscono a date in gennaio.
Procedere come indicato di seguito:
- Nella casella di filtro, selezionare una data aggiuntiva in un mese diverso da gennaio.
- Confermare la selezione facendo clic su .
Quando vengono effettuate più selezioni, usando date in mesi diversi, solo il terzo KPI restituisce un valore. Restituisce il valore del mese più grande dalla selezione effettuata, in base all'espressione Month(Max([Invoice Date])). Dato che Only() viene inserito automaticamente nelle espressioni con riferimenti di campo naked, non è sempre possibile fare affidamento sul fatto che il livello più basso sarà appropriato per la propria espressione. Il posizionamento di Only() è importante.
Per ulteriori informazioni vedere Only - funzione per grafici