Gå till huvudinnehåll Gå till ytterligare innehå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.

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

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.

  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å symbolen Uttryck.
    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.

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

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).

  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å symbolen Uttryck.
    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.

Tabell som visar år, total försäljning för varje år och resultat av uttrycket.

Anteckning om 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))

  1. Klicka på Lägg till kolumn och välj Mått.
  2. Klicka på symbolen Uttryck.
    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.

Tabell som visar år, total försäljning för varje år och resultat av de olika uttrycken.

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

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

  1. Klicka på Lägg till kolumn och välj Mått.
  2. Klicka på symbolen Uttryck.
    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.

Tabell som visar år, total försäljning för varje år och resultat av de olika uttrycken.

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.

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!