Nakna fältreferenser
Ett fält betraktas som naket när det inte omsluts av en aggregeringsfunktion.
En naken fältreferens är en matris som kan innehålla flera värden. Då utvärderar Qlik Sense den som NULL, utan att veta vilket av värdena du vill ha.
Använd alltid en aggregeringsfunktion i ditt uttryck
Om inte ditt uttryck utvärderas korrekt är sannolikheten stor att det saknar aggregeringsfunktion.
En fältreferens i ett uttryck är en matris med värden. Exempel:
Du måste omsluta fältet Invoice Date i en aggregeringsfunktion så att det visas som ett enda värde.
Om du inte använder någon aggregeringsfunktion i ditt uttryck använder Qlik Sense funktionen Only() som standard. Om fältreferensen returnerar flera värden tolkas den som NULL av Qlik Sense.
Dela upp fakturadatum med funktionen If()
Funktionen If() används ofta för villkorsstyrda aggregeringar. Den returnerar ett värde beroende på om villkoret inne i funktionen utvärderas som True eller False.
Inne i appen, på Naked field references-arket, finns en tabell med namnet Using If() on Invoice dates.
Gör följande:
- Välj tabellen med namnet Using If() on Invoice dates.
Egenskapspanelen öppnas. - Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Klicka på Tillämpa.
Uttrycket testar om Invoice Date infaller före referensdatumet 2/18/2013 och returnerar 'Before' om det gör det. Om datumet infaller efter eller är lika med referensdatumet 2/18/2013 returneras 'After'. Referensdatumet uttrycks som heltalet 41323.
Mer information finns i if – skript- och diagramfunktion.
Undvika nakna fältreferenser
Det här uttrycket ser korrekt ut vid första anblicken:
If([Invoice Date]>= Date(41323) 'After', 'Before')
Det ska utvärdera fakturadatum efter referensdatumet, och returnera 'After' eller 'Before'. Invoice Date är dock en naken fältreferens. Den har inte någon aggregeringsfunktion och är därmed en matris med flera värden som kommer att utvärderas till NULL. I förra exemplet fanns det bara ett Invoice Date-värde per Date-värde i vår tabell, så uttrycket beräknades korrekt.
Låt oss titta på hur ett liknande uttryck beräknas med ett annat dimensionsvärde, och hur vi kan lösa problemet med den nakna fältreferensen:
Undvika nakna fältreferenser i en If()-funktion
Uttrycket vi ska använda liknar det vi använde tidigare:
If([Invoice Date]>= Date(41323), Sum(Sales))
Den här gången summerar funktionen försäljningen efter referensdatumet.
Inne i appen, på arket Naked field references, finns en tabell med namnet Sum(Amount).
Gör följande:
- Välj den tillgängliga tabellen Sum(Amount).
Egenskapspanelen öppnas. - Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: If( [Invoice Date]>= 41323, Sum(Sales) )
- Klicka på Tillämpa.
För varje år finns det flera fakturadatum som infaller efter referensdatumet. Eftersom vårt uttryck inte har någon aggregeringsfunktion utvärderas den till NULL. Ett korrekt uttryck ska innehålla en aggregeringsfunktion som Min() eller Max() i den första parametern i If()-funktionen:
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Gör följande:
- Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Klicka på Tillämpa.
Alternativt kan If()-funktionen placeras inuti Sum()-funktionen:
Sum(If([Invoice Date]>= Date(41323), Sales) )
Gör följande:
- Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Klicka på Tillämpa.
I det näst sista uttrycket utvärderades If()-funktionen en gång för varje dimensionsvärde. I det sista uttrycket utvärderas den en gång per rad i rådata. Eftersom funktionen utvärderas på olika sätt blir resultaten olika, men båda returnerar ett svar. Det första uttrycket utvärderas till NULL. Bilden ovan visar skillnaden mellan uttrycken, med referensdatumet 2/18/2013.