The importance of Only()
Only() retourneert een waarde als er slechts één mogelijke waarde in de groep aanwezig is. Deze waarde is het resultaat van de aggregatie. Qlik Sense is standaard ingesteld op Only() als er geen aggregatiefunctie is opgegeven.
Als er een een-op-een-relatie is tussen de dimensie van het diagram en de parameter, retourneert de functie Only() de enige mogelijke waarde. Als er meerdere waarden zijn, retourneert de functie NULL. Als u bijvoorbeeld zoekt naar het enige product waarvan de prijs per eenheid =12 en er zijn meerdere producten met een prijs per eenheid van 12, dan wordt het resultaat NULL geretourneerd.
De volgende afbeeldingen tonen het verschil tussen een-op-een-relaties en een-op-veel-relaties:
De functie Only() is een aggregatiefunctie. Deze gebruikt veel records voor de invoer en retourneert één waarde, vergelijkbaar met Sum() of Count(). Qlik Sense gebruikt aggregaties bij vrijwel alle berekeningen. Uitdrukkingen in een diagram of grafiek, in een sorteeruitdrukking, in een tekstvak, in een geavanceerde zoekopdracht of in een berekend label, zijn allemaal aggregaties en kunnen niet worden berekend zonder gebruik te maken van een aggregatiefunctie.
Maar wat als de gebruiker een uitdrukking invoert waarbij een expliciete aggregatiefunctie ontbreekt? Bijvoorbeeld als de sorteeruitdrukking op Date is ingesteld? Of als er een geavanceerde zoekopdracht is voor klanten die bier- en wijnproducten gekocht hebben met behulp van de uitdrukking =[Product Type]='Beer and Wine'?
In dit geval beïnvloedt de functie Only() de berekening. Als de uitdrukking geen uitdrukkelijke aggregatiefunctie bevat, gebruikt Qlik Sense de Only()-functie impliciet. In bovenstaande gevallen, wordt Only(Date) als sorteeruitdrukking gebruikt en Only(([Product Type])='Beer and Wine' als zoekcriterium.
Soms retourneert de nieuwe uitdrukking een resultaat dat de gebruiker niet verwacht. Allebei de bovenstaande voorbeelden werken prima als er één mogelijke waarde van Date of Product Type is, maar geen van beiden werkt goed in gevallen waarbij er meer dan één waarde is.
Verschillende uitdrukkingen die gebruik maken van Only()
We maken vier KPI's met vergelijkbare uitdrukkingen. Op deze manier kunnen we vergelijken hoe kale veldreferenties of de optie Only() in een andere positie in onze uitdrukking een grote impact kunnen hebben op uw selectieresultaten.
In de app, op het werkblad Importance of Only() vindt u een filtervak met Invoice Date als de dimensie.
Doe het volgende:
- Maak een KPI.
- Klik op Meting toevoegen. Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: Month([Invoice Date])
- Maak nog eens drie KPIs met metingen: Month(Only([Invoice Date])), Month(Max([Invoice Date])) en Only(Month([Invoice Date])).
- Klik op Toepassen.
Als u een kale veldreferentie heeft, wordt de Only()-functie op het laagste niveau ingevoegd. Dit betekent dat de eerste twee KPI , Month([Invoice Date]) en Month(Only([Invoice Date])), hetzelfde geïnterpreteerd zullen worden en altijd hetzelfde resultaat zullen opleveren.
Zoals u kunt zien, retourneren drie van de vier KPI's NULL. De derde KPI, Month(Max([Invoice Date])), retourneert al een waarde, ook al is er geen selectie gemaakt.
Als u uitdrukkingen schrijft, moet u zich altijd afvragen welke aggregatie u wilt gebruiken, of welke waarde, mochten er meerdere waarden zijn. Als u NULL meerdere waarden wilt laten vertegenwoordigen, kunt u de uitdrukking zo laten. Voor getallen wilt u in plaats daarvan waarschijnlijk Sum(), Avg(), Min() of Max() gebruiken. Voor tekenreeksen wilt u waarschijnlijk Only() of MinString() gebruiken.
Doe het volgende:
- Stop met de bewerking van het werkblad.
- Selecteer in het filtervak een datum in de maand januari.
- Bevestig de selectie door op te klikken.
Als er een enkele selectie is gemaakt, retourneren alle KPI's het correcte antwoord. Zelfs als de uitdrukking een kale veldreferentie bevat, zoals de uitdrukking in Month([Invoice Date]), wordt nog steeds de juiste waarde geretourneerd, dankzij het feit dat we slechts één enkele selectie hebben gemaakt.
Doe het volgende:
- Selecteer in het filtervak nog een tweede datum in de maand januari.
- Bevestig de selectie door op te klikken.
De eerste twee KPI's retourneren NULL en de andere twee KPI's retourneren de juiste waarde, januari. Met name de vierde KPI retourneert een correct antwoord, omdat beide gemaakte datumselecties datums in januari betreffen.
Doe het volgende:
- Selecteer in het filtervak nog een extra datum, deze keer in een andere maand dan januari.
- Bevestig de selectie door op te klikken.
Als er meerdere selecties zijn gemaakt met datums in verschillende maanden, retourneert alleen de derde, KPI, een waarde. Het retourneert de waarde van de grootste maand binnen de gemaakte selectie, volgens de uitdrukking Month(Max([Invoice Date])). Aangezien Only() automatisch in uitdrukkingen met kale veldreferenties wordt toegevoegd, kunt u er niet altijd vanuit gaan dat het laagste niveau geschikt is voor uw uitdrukking. De plaatsing van Only() is belangrijk.
Ga voor meer informatie naar Only - diagramfunctie