Kale veldreferenties
Een veld geldt als kaal, als het niet in een aggregatiefunctie is opgenomen.
Een kale veldreferentie is een reeks die mogelijk verschillende waarden bevat. Als Qlik Sense niet weet welke waarde u nodig hebt, worden de waarden geëvalueerd als NULL.
Gebruik altijd een aggregatiefunctie in uw uitdrukking
Als uw uitdrukking niet correct wordt geëvalueerd, is er een grote kans dat deze niet over de juiste aggregatiefunctie beschikt.
Bij een veldreferentie in een uitdrukking is er sprake van een reeks waarden. Bijvoorbeeld:
U moet het veld Factuurgegevens in een aggregatiefunctie insluiten zodat deze tot een enkele waarde kan worden samengevoegd.
Als u geen aggregatiefunctie in uw uitdrukking gebruikt, gebruikt Qlik Sense standaard de functie Only(). Als de veldreferentie meerdere waarden retourneert, interpreteert Qlik Sense dit als NULL.
Factuurdatums opsplitsen met behulp van de If()-functie
De If()-functie wordt vaak gebruikt voor voorwaardelijke aggregaties. Hij retourneert een waarde afhankelijk van het feit of de opgegeven voorwaarde wordt geëvalueerd als True of False.
In de app, op het werkblad Naked field references vindt u een tabel met de naam Using If() on Invoice dates.
Doe het volgende:
- Selecteer de beschikbare tabel met de naam Using If() on Invoice dates.
Het eigenschappenvenster wordt geopend. - Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Klik op Toepassen.
Deze uitdrukking test of de Invoice Date voor de referentiedatum 18-02-2013 ligt en retourneert 'Before' als dit zo is. Als de datum later of gelijk aan de referentiedatum 18-02-2013 is, wordt 'After' geretourneerd. De referentiedatum wordt uitgedrukt als het gehele getal 41323.
Ga voor meer informatie naar if - script- en diagramfunctie
Kale veldreferenties voorkomen
In eerste instantie lijkt het of deze uitdrukking correct is:
If([Invoice Date]>= Date(41323) 'After', 'Before')
Deze moet de factuurdatums na de referentiedatum evalueren, 'After' retourneren of anders 'Before' retourneren. Invoice Date is echter een kale veldreferentie, deze heeft geen aggregatiefunctie, en vormt daarmee een reeks die meerdere waarden bevat en zal daardoor NULL evalueren. In het vorige voorbeeld hadden we het geluk dat onze tabel maar één Invoice Date per Date-waarde bevat, waardoor de uitdrukking correct werd berekend.
Laten we eens kijken hoe een vergelijkbare uitdrukking onder een andere dimensiewaarde uitpakt en hoe we de problemen met kale veldreferenties oplossen:
Kale veldreferenties voorkomen in een If()-functie
We gebruiken een zelfde uitdrukking als zonet:
If([Invoice Date]>= Date(41323), Sum(Sales))
Deze keer telt de functie de verkoop na de referentiedatum op.
In de app, op het werkblad Naked field references vindt u een tabel met de naam Sum(Amount).
Doe het volgende:
- Selecteer de beschikbare Sum(Amount)-tabel.
Het eigenschappenvenster wordt geopend. - Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: If( [Invoice Date]>= 41323, Sum(Sales) )
- Klik op Toepassen.
Bij elk jaar staat een reeks factuurdatums vermeld die na de referentiedatum komen. Aangezien onze uitdrukking geen aggregatiefunctie heeft, wordt deze geëvalueerd tot NULL. Een correcte uitdrukking moet een aggregatiefunctie gebruiken, zoals Min() of Max() in de eerste parameter van de If()-functie:
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Doe het volgende:
- Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Klik op Toepassen.
Als alternatief kan de If()-functie binnen de Sum()-functie worden gezet:
Sum(If([Invoice Date]>= Date(41323), Sales) )
Doe het volgende:
- Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Klik op Toepassen.
In de tweede tot en met de laatste uitdrukking werd de If()-functie eens per dimensiewaarde geëvalueerd. In de laatste uitdrukking werd de functie eens per rij in de onbewerkte gegevens geëvalueerd. Doordat de functie verschillend wordt geëvalueerd, zijn de resultaten verschillend, maar ze retourneren beiden een antwoord. De eerste uitdrukking wordt simpelweg geëvalueerd als NULL. De bovenstaande afbeelding toont het verschil tussen de uitdrukkingen, waarbij 18-02-2013 als referentiedatum is genomen.