3 maart 2019 | 6 minuten leestijd
Wil je meer weten over Klipfolio? Lees dan onze blog over onze top 5 veel voorkomende ontwerp fouten hier!
Een van de functies die we het vaakst gebruiken in Klipfolio is de LOOKUP. Dit is helaas niet de meest eenvoudige functie. Veel klanten komen met vragen over deze functie omdat het niet precies werkt zoals verwacht. Zeker in het begin moest ik ook even goed wennen.
Graag probeer ik je de structuur hiervan duidelijk uit te leggen. Maar voordat ik dat doe, moet ik eerst een aantal andere concepten uitleggen: GROUP, GROUPBY, SELECT & IF. Vooral het verschil tussen IF en SELECT is interessant.
GROUP
De groepeer functie zorgt er eigenlijk voor dat je van een hele serie waardes unieke waardes maakt.
Dus stel, je hebt in kolom A:A de waardes appel, appel, banaan, citroen, citroen, citroen, peer, peer en je wilt graag de unieke waardes weten, dan gebruik je GROUP(A:A) of soms GROUP(SLICE(A:A)) als je kolom nog een kop heeft.
GROUPBY
Stel, je wilt graag een bepaalde waarde (measure) berekenen per groep (dimension). Dan kun je groupby gebruiken. Stel dat de waardes behorend bij het fruit in kolom B:B de waardes 1,2,3,4,5,6,7 en 8 hebben. En die willen we sommeren. Dan gebruiken we GROUPBY in de vorm van GROUPBY(dimensie, measure, aggregatiefunctie). Als je de laatste waarde niet invult, dan zal GROUPBY automatisch sommeren.
Dus GROUPBY(A:A,B:B) levert de waardes 3 (1+2), 3 (3), 15 (4+5+6) en 15 (7+8) op. De waardes komen terug in de sorteervolgorde van de GROUP, die vervolgens automatisch alfabetisch gesorteerd wordt.
SELECT
Een select gebruik je op het moment dat je alleen bepaalde waardes wil meenemen. Dus stel dat we in bovengenoemd voorbeeld alleen de citroenen willen, dan willen we eigenlijk programmeren: selecteer de waarde uit kolom B als wordt voldaan aan de voorwaarde dat kolom A een bepaalde waarde heeft. Oftewel: SELECT(B:B, A:A = “citroen”).
Een select statement zal records weggooien. We begonnen met 8 records, maar door het select statement blijven er maar 3 over. Dit kun je ook zien als je de formule evalueert met de bliksemschicht: als je op kolom B:B staat krijg je 8 waardes te zien, ook als je het stukje A:A = “citroen” selecteert krijg je 8 waardes te zien (true of false) maar als je de gehele formule evalueert, dan krijg je 3 waardes, namelijk 4,5 en 6.
Belangrijk is te realiseren dat beide kolommen van de select formule hetzelfde aantal records moeten hebben. Als dit niet gebeurt, dan kunnen de resultaten van deze formule onverwachte resultaten opleveren. Het gaat bijvoorbeeld nogal eens fout bij lege cellen of NULL-waardes, vooral onderaan in een datasource.
IF
Bij een IF functie test je of een bepaalde waarde voldoet aan een criteria. Doet het dat wel, dan doe je “zus” en doet het dat niet, dan doe je “zo”. Uiteraard bepaal je zelf wat je doet. In de praktijk is “zus” of “zo” vaak het getal 0. Met andere woorden zoiets (in woorden): IF(de waarde in kolom A:A = “citroen”, B:B, 0) oftewel: als in kolom A citroen staat, pak dan de waarde uit kolom B en neem anders de waarde 0. Het resultaat is dan 0,0,0,4,5,6,0,0
Belangrijk is te realiseren dat de 3 stukken van deze formule hetzelfde aantal records moet hebben. *) Ook het eindresultaat heeft precies dit aantal resultaten. Als dit niet zo is, dan kunnen ook hier de resultaten van deze formule onverwachte resultaten opleveren.
LOOKUP
Een LOOKUP functie heeft 3 componenten: LOOKUP(bepaalde items, waar zoeken?, geef waarde terug).
Als we dit ontleden:
In het eerste argument staan de waardes die we willen gaan opzoeken. Dat kunnen bijvoorbeeld maanden zijn, zoals “2018-07”, “2018-08”, “2018-09”, 2018-10” enz. Laten we in dit voorbeeld uitgaan van deze 4 maanden die willen zien en de rest niet. In de praktijk zijn dit vaak de waardes in de X-as van een grafiek.
In het tweede argument staat de volledige bak met waardes waarbinnen de waardes uit het eerste component kunnen staan. Dit mag in een ander format zijn, dan gaan we ze in een formule omvormen.
Het kan zijn dat er veel meer maanden in de brondata staan. Deze waardes komen dan uiteindelijk niet terug in de formule. Dat is ook wat je wil, want je hebt juist in het eerste component aangegeven wat je graag wil opzoeken.
Het kan ook zijn dat er veel minder waardes in de brondata staan. Je hebt bijvoorbeeld wel waardes van juli en augustus 2018, maar (nog) niet van september en oktober. Toch wil je wel deze maanden laten zien in je grafiek. In dat geval zal het eerste component van de lookup functie niet terugkomen in het tweede deel en daar zal de lookup formule de waarde een lege regel teruggeven.
In het derde argument leg je uit wat je precies gaat berekenen. Dus bijvoorbeeld: we zochten die 4 maanden op in een bak met data (1e component), we vonden maanden terug (2e component, in bijvoorbeeld kolom A:A), en nu willen we graag de waarde teruggeven die voorkomt in een andere kolom, bijvoorbeeld B:B.
Het aantal waardes uit argument 1 is in de meeste gevallen anders dan het aantal waardes uit argument 2. Maar het aantal waardes uit component 2 moet gelijk zijn aan het aantal waardes uit argument 3. Als dit laatste niet zo is, dan gaat er ergens wat mis.
In dit voorbeeld ga ik ervan uit dat we een grafiek willen, met op de X-as maanden en op de Y-as het aantal sessies naar een website. De X-as heet ‘Maanden’.
Er zijn nu deze mogelijkheden:
Wanneer gebruik je nu IF en wanneer SELECT?
Elke situatie is uniek, dus het flauwe antwoord is ‘hangt’ ervan af. Wel een paar stelregels:
Ben je met de LOOKUP functie bezig, maar kom je er niet helemaal uit? Neem vrijblijvend contact met ons op. We kunnen altijd even meekijken!
Tamara