The importance of Only()
Only() gibt einen Wert zurück, wenn nur ein möglicher Wert in der Gruppe vorhanden ist. Dieser Wert ist das Ergebnis der Aggregierung. Qlik Sense verwendet standardmäßig Only(), wenn keine Aggregierungsfunktion angegeben ist.
Wenn eine Eins-zu-Eins-Beziehung zwischen der Diagrammdimension und dem Parameter vorliegt, gibt die Funktion Only() den einzigen möglichen Wert zurück. Wenn mehrere Werte vorliegen, gibt sie NULL zurück. Wenn Sie beispielsweise nach dem einzigen Produkt suchen, bei dem der Stückpreis 12 beträgt, wird NULL zurückgegeben, wenn mehr als ein Produkt einen Stückpreis von 12 aufweist.
Die folgenden Abbildungen zeigen den Unterschied zwischen Eins-zu-Eins- und Eins-zu-Viele-Beziehungen:
Die Funktion Only() ist eine Aggregierungsfunktion. Sie verwendet zahlreiche Datensätze als Eingabe und gibt nur einen Wert zurück, ähnlich wie Sum() oder Count(). Qlik Sense verwendet Aggregierungen in praktisch allen Berechnungen. Die Formeln in einem Diagramm, einer Sortierformel, einem Textfeld, einer erweiterten Suche und einer berechneten Bezeichnung sind alle Aggregierungen und können ohne eine Aggregierungsfunktion nicht berechnet werden.
Aber was geschieht, wenn ein Benutzer eine Formel eingibt, die keine explizite Aggregierungsfunktion enthält? Was geschieht beispielsweise, wenn die Sortierformel auf Date festgelegt ist? Oder wenn eine erweiterte Suche für Kunden, die Bier und Wein gekauft haben, mit der Formel =[Product Type]='Beer and Wine' vorhanden ist?
An dieser Stelle wirkt sich die Funktion Only() auf die Berechnung aus. Wenn keine explizite Aggregierungsfunktion in der Formel vorhanden ist, verwendet Qlik Sense die Funktion Only() implizit. In den obigen Fällen werden Only(Date) als Sortierformel und Only([Product Type]))='Beer and Wine' als Suchkriterium verwendet.
Manchmal gibt die neue Formel ein Ergebnis zurück, das vom Benutzer nicht erwartet wurde. Die beiden obigen Beispiele funktionieren, wenn nur ein möglicher Wert für Date oder Product Type vorhanden ist, aber beide funktionieren nicht, wenn mehr als ein Wert vorhanden ist.
Verschiedene Formeln, die Only() verwenden
Wir erstellen vier KPIs mit ähnlichen Formeln. So können wir vergleichen, wie das Vorliegen von nackten Feldreferenzen oder von Only() an verschiedenen Stellen in der Formel eine starke Auswirkung auf Ihre Auswahlergebnisse haben kann.
In der App finden Sie auf dem Arbeitsblatt Importance of Only() ein Filterfenster mit Invoice Date als Dimension.
Gehen Sie folgendermaßen vor:
- Erstellen Sie einen KPI.
- Klicken Sie auf Kennzahl hinzufügen. Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: Month([Invoice Date])
- Erstellen Sie drei weitere KPIs mit Kennzahlen: Month(Only([Invoice Date])), Month(Max([Invoice Date])) und Only(Month([Invoice Date])).
- Klicken Sie auf Übernehmen.
Wenn Sie eine nackte Feldreferenz haben, wird die Funktion Only() auf der untersten Ebene eingefügt. Das bedeutet, dass die ersten beiden KPIs, Month([Invoice Date]) und Month(Only([Invoice Date])), gleich interpretiert werden und immer dasselbe Ergebnis zurückgeben.
Wie Sie sehen, geben drei der vier KPIs NULL zurück. Der vierte KPI, Month(Max([Invoice Date])), gibt bereits einen Wert zurück, obwohl noch keine Auswahl getroffen wurde.
Wenn Sie Formeln schreiben, sollten Sie sich immer fragen, welche Aggregierung Sie verwenden möchten, oder welchen Wert Sie verwenden möchten, wenn mehrere Werte vorhanden sind. Wenn Sie NULL zur Darstellung mehrerer Werte verwenden möchten, können Sie die Formel unverändert lassen. Für Zahlen würden Sie wahrscheinlich stattdessen Sum(), Avg(), Min() oder Max() verwenden. Für Strings bieten sich Only() oder MinString() an.
Gehen Sie folgendermaßen vor:
- Beenden Sie die Bearbeitung des Arbeitsblatts.
- Wählen Sie im Filterfenster das Datum im Monat Januar aus.
- Bestätigen Sie die Auswahl, indem Sie auf klicken.
Wenn eine einzelne Auswahl getroffen wird, geben alle KPIs die richtige Antwort zurück. Auch wenn die Formel eine nackte Feldreferenz enthält, wie die Formel in Month([Invoice Date]), kann dank des Umstands, dass wir eine eindeutige Auswahl getroffen haben, immer der richtige Wert zurückgeben werden.
Gehen Sie folgendermaßen vor:
- Wählen Sie im Filterfenster ein weiteres Datum im Monat Januar aus.
- Bestätigen Sie die Auswahl, indem Sie auf klicken.
Die ersten beiden KPIs geben NULL zurück, die beiden anderenKPIs den richtigen Wert für Januar. Konkret gibt der vierte KPI eine richtige Antwort zurück, weil beide Datumsauswahlen für Tage im Januar getroffen wurden.
Gehen Sie folgendermaßen vor:
- Wählen Sie im Filterfenster ein weiteres Datum in einem anderen Monat als Januar aus.
- Bestätigen Sie die Auswahl, indem Sie auf klicken.
Wenn mehrere Auswahlen mit Tagen in verschiedenen Monaten getroffen werden, gibt nur der dritte KPI einen Wert zurück. Er gibt den Wert des größten Monats ab der Auswahl zurück, im Einklang mit der Formel Month(Max([Invoice Date])). Da Only() automatisch in Formeln mit nackten Feldreferenzen eingefügt wird, können Sie nicht immer davon ausgehen, dass die unterste Ebene für Ihre Formel geeignet ist. Die Platzierung von Only() ist wichtig.
Weitere Informationen finden Sie unter Only – Diagrammfunktion