Riferimenti di campo naked
Un campo viene considerato naked quando non è racchiuso in una funzione di aggregazione.
Un riferimento di campo naked è una matrice, che può contenere svariati valori. Dato che Qlik Sense non conosce quali di questi valori si desidera ottenere, li valuterà come NULL.
Utilizzare sempre una funzione di aggregazione nella propria espressione
Se si ritiene che la propria espressione non valuti correttamente, c'è un'alta probabilità che non abbia una funzione di aggregazione.
Un riferimento di campo in un'espressione corrisponde a una matrice di valori. Ad esempio:
È necessario racchiudere il campo Data fattura in una funzione di aggregazione per comprimerlo in un valore singolo.
Se non si utilizza una funzione di aggregazione sulla propria espressione, Qlik Sense utilizzerà la funzione Only() per impostazione predefinita. Se il riferimento di campo restituisce svariati valori, Qlik Sense lo interpreterà come NULL.
Suddivisione delle date delle fatture usando la funzione If()
La funzione If() viene spesso utilizzata per le aggregazioni condizionali. Restituisce un valore a seconda che la condizione fornita all'interno della funzione esegua la valutazione come True o come False.
All'interno dell'app, sul foglio Naked field references è presente una tabella dal titolo Using If() on Invoice dates.
Procedere come indicato di seguito:
- Selezionare la tabella disponibile, dal titolo Using If() on Invoice dates.
Si apre il pannello delle proprietà. - Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Fare clic su Applica.
Questa espressione verifica se Invoice Date sia anteriore alla data di riferimento 18/2/2013 e restituisce 'Before' in caso affermativo. Se la data è posteriore o uguale alla data di riferimento 18/2/2013, viene restituito 'After. La data di riferimento viene espressa come il numero intero 41323.
Per ulteriori informazioni vedere if - funzione per script e grafici
Come evitare i riferimenti di campo naked
A prima vista, questa espressione sembra corretta:
If([Invoice Date]>= Date(41323) 'After', 'Before')
Deve valutare le date delle fatture dopo la data di riferimento, quindi restituire 'After' o 'Before'. Tuttavia, Invoice Date è un riferimento di campo naked, non presenta una funzione di aggregazione e come tale rappresenta una matrice con svariati valori, pertanto valuterà come NULL. Nell'esempio precedente era presente un solo valore Invoice Date per Date , pertanto l'espressione veniva calcolata correttamente.
Vediamo in che modo un'espressione simile viene calcolata sotto un valore dimensionale diverso e come risolvere il problema di riferimento di campo naked:
Come evitare i riferimenti di campo naked in una funzione If()
Utilizzeremo un'espressione simile a quella usata in precedenza:
If([Invoice Date]>= Date(41323), Sum(Sales))
Questa volta la funzione somma le vendite dopo la data di riferimento.
All'interno dell'app, sul foglio Naked field references è presente una tabella dal titolo Sum(Amount).
Procedere come indicato di seguito:
- Selezionare la tabella Sum(Amount) disponibile.
Si apre il pannello delle proprietà. - Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: If( [Invoice Date]>= 41323, Sum(Sales) )
- Fare clic su Applica.
Per ciascun anno c'è una gamma di date per le fatture che seguono la data di riferimento. Dato che la nostra espressione è priva di una funzione di aggregazione, valuta su NULL. Un'espressione corretta dovrebbe utilizzare una funzione di aggregazione come Min() o Max() nel primo parametro della funzione If():
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Procedere come indicato di seguito:
- Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Fare clic su Applica.
In alternativa, la funzione If() può essere inserita all'interno della funzione Sum():
Sum(If([Invoice Date]>= Date(41323), Sales) )
Procedere come indicato di seguito:
- Fare clic su Aggiungi colonna e selezionare Misura.
- Fare clic sul simbolo .
Si apre l'editor delle espressioni. - Inserire quanto segue: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Fare clic su Applica.
Nella penultima espressione, la funzione If() è stata valutata una volta per valore dimensionale. Nell'ultima espressione viene valutata una volta per riga nei dati raw. La differenza nel modo in cui la funzione viene valutata fa sì che i risultati siano diversi, ma entrambi restituiscono una risposta. La prima espressione viene valutata semplicemente come NULL. L'immagine sopra mostra la differenza tra le espressioni, utilizzando 18/2/2013 come data di riferimento.