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:
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 Naked field referencesArbeitsblatt eine Tabelle mit dem Titel Using If() on Invoice dates.
Gehen Sie folgendermaßen vor:
- Wählen Sie die verfügbare Tabelle mit dem Titel Using If() on Invoice dates aus.
Das Eigenschaftsfenster öffnet sich. - Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Klicken Sie auf Übernehmen.
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:
- Wählen Sie die verfügbare Tabelle Sum(Amount) aus.
Das Eigenschaftsfenster öffnet sich. - Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: If( [Invoice Date]>= 41323, Sum(Sales) )
- Klicken Sie auf Übernehmen.
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:
- Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Klicken Sie auf Übernehmen.
Alternativ kann die Funktion If() innerhalb der Funktion Sum() platziert werden:
Sum(If([Invoice Date]>= Date(41323), Sales) )
Gehen Sie folgendermaßen vor:
- Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Klicken Sie auf Übernehmen.
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.