Vai al contenuto principale
The importance of Only()

IN QUESTA PAGINA

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 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:

Una tabella che mostra una relazione uno-a-uno tra Manager Number e Manager

Una tabella che mostra una relazione uno-a-molti di Sales Rep Name e Manager.

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, possiamo confrontare in che modo avere riferimenti di campo naked o avere Only() in una posizione diversa nella nostra espressione possa avere un grande impatto sui risultati della propria selezione.

All'interno dell'app, sul foglio Importance of Only() si troverà una casella di filtro con Invoice Date come dimensione.

Procedere come indicato di seguito:

  1. Creare un KPI.
  2. Fare clic su Aggiungi misura. Fare clic sul simbolo 3.
    Si apre l'editor delle espressioni.
  3. Inserire quanto segue: Month([Invoice Date])
  4. Creare tre ulteriori KPIs con le misure: Month(Only([Invoice Date])), Month(Max([Invoice Date])) e Only(Month([Invoice Date])).
  5. Fare clic su Applica.

Quattro KPIs e una casella di filtro mostrano tre espressioni diverse ma simili.

Nota di suggerimentoIn ogni KPI la Formattazione numero è stata impostata su Misura espressione.

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:

  1. Interrompere la modifica del foglio.
  2. Nella casella di filtro, selezionare la data nel mese di gennaio.
  3. Confermare la selezione facendo clic su m.

I risultati di KPI variano qualora venga effettuata una selezione singola.

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:

  1. Nella casella di filtro, selezionare una data aggiuntiva nel mese di gennaio.
  2. Confermare la selezione facendo clic su m.

I risultati di KPI cambiano quando vengono effettuate due selezioni che presentano entrambe date nel mese di gennaio.

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:

  1. Nella casella di filtro, selezionare una data aggiuntiva in un mese diverso da gennaio.
  2. Confermare la selezione facendo clic su m.

I risultati di KPI cambiano quando vengono effettuate più selezioni con date in mesi diversi.

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