Gå till huvudinnehåll

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:

Två tabeller, en som visar att Max(Invoice Date) är ett enda värde och en som visar att Invoice Date är en matris med värden.

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

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å arket Naked field references, finns en tabell med namnet Using If() on Invoice dates.

Gör följande:

  1. Välj tabellen med namnet Using If() on Invoice dates.
    Egenskapspanelen öppnas.
  2. Klicka på Lägg till kolumn och välj Mått.
  3. Klicka på Expression -symbolen.
    Uttrycksredigeraren öppnas.
  4. Ange följande: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Klicka på Tillämpa.

Tabell som visar fakturadatum som har delats upp efter ett referensdatum.

 Table showing invoice dates being split by a reference date.

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:

  1. Välj den tillgängliga tabellen Sum(Amount).
    Egenskapspanelen öppnas.
  2. Klicka på Lägg till kolumn och välj Mått.
  3. Klicka på Expression -symbolen.
    Uttrycksredigeraren öppnas.
  4. Ange följande: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Klicka på Tillämpa.

Tabell som visar år, total försäljning för varje år och resultatet av uttrycket som använder If()-funktionen.

 Table showing year, sum of sales for each year, and the results of the expression

Tips: Ändra inte Etikett för måtten, så att du kan se hur uttrycken skiljer sig åt. I kolumnerna som innehåller ekonomiska värden ändrar du Talformat till Valuta och Formatmönster till $ #,##0;-$ #,##0.

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:

  1. Klicka på Lägg till kolumn och välj Mått.
  2. Klicka på Expression -symbolen.
    Uttrycksredigeraren öppnas.
  3. Ange följande: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Klicka på Tillämpa.

Tabell som visar år, total försäljning för varje år och resultaten av de olika uttrycken med hjälp av If()-funktionen.

Table showing year, sum of sales for each year, and the results of the different expressions

Alternativt kan If()-funktionen placeras inuti Sum()-funktionen:

Sum(If([Invoice Date]>= Date(41323), Sales) )

Gör följande:

  1. Klicka på Lägg till kolumn och välj Mått.
  2. Klicka på Expression -symbolen.
    Uttrycksredigeraren öppnas.
  3. Ange följande: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Klicka på Tillämpa.

Tabell som visar år, total försäljning för varje år och resultaten av de olika uttrycken med hjälp av If()-funktionen.

Table showing year, sum of sales for each year, and the results of the different expressions

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.