Zu Hauptinhalt springen

Nackte Feldreferenzen

Ein Feld gilt als nackt, wenn es nicht in eine Aggregierungsfunktion eingeschlossen ist.

Eine nackte Feldreferenz ist ein Array, das mehrere Werte enthalten kann. In diesem Fall wertet Qlik Sense den Wert als NULL aus, da nicht bekannt ist, welcher der Werte der von Ihnen gewünschte ist.

Verwenden Sie immer eine Aggregierungsfunktion in Ihrer Formel

Wenn Sie feststellen, das Ihre Formel nicht korrekt ausgewertet wird, liegt dies wahrscheinlich daran, dass sie keine Aggregierungsfunktion enthält.

Eine Feldreferenz in einer Formel ist ein Array von Werten. Hier ein Beispiel:

Eine von zwei Tabellen zeigt, dass Max(Invoice Date) ein einzelner Wert ist, die andere zeigt, dass Invoice Date ein Array von Werten ist.

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

Sie müssen das Feld Rechnungsdatum in eine Aggregierungsfunktion einschließen, um es auf einen einzelnen Wert zu reduzieren.

Wenn Sie keine Aggregierungsfunktion in Ihrer Formel verwenden, nutzt Qlik Sense standardmäßig die Funktion Only(). Wenn die Feldreferenz mehrere Werte zurückgibt, interpretiert Qlik Sense dies als NULL.

Aufteilen von Rechnungsdatumsangaben mit der Funktion If()

Die Funktion If() wird oft für bedingte Aggregierungen verwendet. Es wird ein Wert abhängig davon geliefert, ob die innerhalb der Funktion bereitgestellte Bedingung „True“ oder „False“ ergibt.

In der App finden Sie auf dem Arbeitsblatt Naked field references eine Tabelle mit dem Titel Using If() on Invoice dates.

Gehen Sie folgendermaßen vor:

  1. Wählen Sie die verfügbare Tabelle mit dem Titel Using If() on Invoice dates aus.
    Das Eigenschaftsfenster öffnet sich.
  2. Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
  3. Klicken Sie auf das Symbol Expression .
    Der Formel-Editor wird geöffnet.
  4. Geben Sie Folgendes ein: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Klicken Sie auf Übernehmen.

Tabelle mit Rechnungsdatumsangaben, aufgeteilt nach einem Referenzdatum.

 Table showing invoice dates being split by a reference date.

Diese Formel prüft, ob das Invoice Date vor dem Referenzdatum 18.2.2013 liegt, und gibt bei Zutreffen 'Before' zurück. Wenn das Datum nach dem oder am Referenzdatum 18.2.2013 liegt, wird 'After' zurückgegeben. Das Referenzdatum wird als die ganze Zahl 41323 ausgedrückt.

Weitere Informationen finden Sie unter if - Skript- und Diagrammfunktion

Vermeiden von nackten Feldreferenzen

Auf den ersten Blick sieht diese Formel korrekt aus:

If([Invoice Date]>= Date(41323) 'After', 'Before')

Falls ein Rechnungsdatum nach dem Referenzdatum liegt, sollte sie 'After' zurückgeben, andernfalls 'Before'. Invoice Date ist jedoch eine nackte Feldreferenz, sie enthält keine Aggregierungsfunktion und ist daher ein Array mit mehreren Werten, das als NULL ausgewertet wird. Im obigen Beispiel war nur ein Wert für Invoice Date pro Date in der Tabelle vorhanden. Daher wurde die Formel richtig berechnet.

Prüfen wir jetzt, wie eine ähnliche Formel mit einem anderen Dimensionswert berechnet wird und wie das Problem mit der nackten Feldreferenz gelöst werden kann:

Vermeiden von nackten Feldreferenzen in einer Funktion If()

Wir verwenden eine ähnliche Formel wie oben:

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

Dieses Mal summiert die Funktion die Umsätze nach dem Referenzdatum.

In der App finden Sie auf dem Arbeitsblatt Naked field references eine Tabelle mit dem Titel Sum(Amount).

Gehen Sie folgendermaßen vor:

  1. Wählen Sie die verfügbare Tabelle Sum(Amount) aus.
    Das Eigenschaftsfenster öffnet sich.
  2. Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
  3. Klicken Sie auf das Symbol Expression .
    Der Formel-Editor wird geöffnet.
  4. Geben Sie Folgendes ein: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Klicken Sie auf Übernehmen.

Die Tabelle zeigt das Jahr, die Summe der Umsätze für jedes Jahr und die Ergebnisse der Formel unter Verwendung der Funktion If().

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

Tipp: Behalten Sie die Bezeichnung der Kennzahlen bei, um die Unterschiede zwischen den einzelnen Formeln zu zeigen. In Spalten mit Geldwerten ändern Sie die Zahlenformatierung zu Währung und das Zahlenformat zu $ #,##0;-$ #,##0.

Für jedes Jahr ist ein Array von Rechnungsdatumswerten vorhanden, die nach dem Referenzdatum liegen. Da unsere Formel keine Aggregierungsfunktion enthält, wird sie als NULL ausgewertet. Eine korrekte Formel sollte eine Aggregierungsfunktion wie Min() oder Max() im ersten Parameter der Funktion If() verwenden:

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

Gehen Sie folgendermaßen vor:

  1. Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
  2. Klicken Sie auf das Symbol Expression .
    Der Formel-Editor wird geöffnet.
  3. Geben Sie Folgendes ein: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Klicken Sie auf Übernehmen.

Die Tabelle zeigt das Jahr, die Summe der Umsätze für jedes Jahr und die Ergebnisse der unterschiedlichen Formeln unter Verwendung der Funktion If().

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

Alternativ kann die Funktion If() innerhalb der Funktion Sum() platziert werden:

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

Gehen Sie folgendermaßen vor:

  1. Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
  2. Klicken Sie auf das Symbol Expression .
    Der Formel-Editor wird geöffnet.
  3. Geben Sie Folgendes ein: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Klicken Sie auf Übernehmen.

Die Tabelle zeigt das Jahr, die Summe der Umsätze für jedes Jahr und die Ergebnisse der unterschiedlichen Formeln unter Verwendung der Funktion If().

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

In der vorletzten Formel wurde die Funktion If() einmal pro Dimensionswert ausgewertet. In der letzten Formel wird sie einmal pro Zeile in den Rohdaten ausgewertet. Der Unterschied bei der Auswertung der Funktion führt zu unterschiedlichen Ergebnissen, aber beide geben eine Antwort zurück. Die erste Formel gibt einfach NULL zurück. Die Abbildung oben zeigt den Unterschied zwischen den Formeln, wobei 2/18/2013 als Referenzdatum verwendet wird.