FileMaker Tip 312
![]()
De Let-functie en laat ons hopen dat de prijs van de velden stabiel blijft
Er is sinds het uitkomen van FileMaker 7 al heel wat te doen geweest over de Let-functie, en voor één keer is de online help niet zo duidelijk bij het illustreren van het praktische nut van die functie. We kunnen proberen ons er van af te maken door te stellen dat de Let-functie erg nuttig is wanneer door een of andere inflatie de prijs van de FileMaker-velden in Define Fields spectaculair de hoogte in schiet en we dus echt moeten bezuinigen: een tabel met bijvoorbeeld 200 velden wordt dan onbetaalbaar. We moeten het dus met minder velden doen. Maar we willen wel even goed kunnen werken. Het is dan dat de Let-functie van pas komt: het is een echte spaarlamp.
Laat ons een praktisch voorbeeld nemen als beginsituatie: ik wil een (boze) brief schrijven - automatisch natuurlijk - naar elke klant die zijn factuur niet betaalt. Maar al spoedig blijkt dat sommige klanten meer dan één factuur onbetaald hebben staan. In dat geval moet mijn brief een andere toon (en dus andere tekst) gebruiken en moet die liefst ook het aantal onbetaalde facturen vermelden.
Dat aantal onbetaalde facturen kan ik gemakkelijk uitrekenen: ik maak een selfjoin-relatie op de klantcode en zorg er via een tweede key matching voor dat die enkel werkt als er minstens één factuur openstaat. Op die selfjoin-relatie kan ik een Count doen, zodat ik het aantal onbetaalde facturen ken. Die Count stoppen we in een calculatieveld dat we Aantal onbetaalde facturen noemen. Da's dus een veldje meer in mijn tabel (en ze zijn al zo duur).
De calculatie-formule ziet er zo uit
Count(SelfJoinOnbetaaldeFacturen::Factuurnummer)Ik tel dus het aantal factuurnummers van de onbetaalde facturen. Maar voor sommige klanten willen we iets milder zijn en hebben we een veldje dat Max toegelaten open facturen heet. Meestal staat daar 1 in, maar soms 2 en heel zelden zelfs 3.
Dan heb ik nog een tekstcalculatie nodig die bepaalt welke tekst ik ga gebruiken in elk apart geval. Hiertoe gebruiken we een gewone Case. Voor de tekst overdrijven we een beetje, om de zaak duidelijker te doen overkomen.
Hier gaan we:
Case(Count(SelfJoinOnbetaaldeFacturen::Factuurnummer) - Max toegelaten open facturen = 1;"Geachte Heer";
Count(SelfJoinOnbetaaldeFacturen::Factuurnummer) - Max toegelaten open facturen = 2;"Mijnheer";
Count(SelfJoinOnbetaaldeFacturen::Factuurnummer) - Max toegelaten open facturen = 3;"Gij lelijke dief";
Count(SelfJoinOnbetaaldeFacturen::Factuurnummer) - Max toegelaten open facturen > 3;"Gij grote lelijken dief";"")
In deze formule schrijven we dus vier keer hetzelfde lange verhaal neer. Dat moet korter en leesbaarder kunnen. En we zouden graag besparen op een veld (die Count van hierboven). Hop met de geit dus, de aap uit de mouw, tromgeroffel en... daar komt de Let-functie (applaus).
We kunnen die Let-functie het beste vertalen door "Stel nu eens dat..." waarbij we onze lange calculatie vervangen door één naam (dat mag ook een variabele zijn, zodat we die meteen ook elders kunnen gebruiken). Onze formule wordt dan heel wat korter en leesbaarder. Als naam voor de variabele kiezen we het tamelijk korte $Criterium. In mooi Nederlands wordt dat dan als volgt.
Stel nu eens dat we het gevonden aantal onbetaalde facturen verminderen met hetgeen we acceptabel vinden en dat we dat getal Criterium noemen, dan spreken we onze meneer aan met "Geachte Heer" als het criterium gelijk is aan één; als het criterium gelijk is aan twee zijn we niet zo vriendelijk, en schrijven we "Mijnheer". Bij criterium 3 maken we ons kwaad tot "Gij lelijke dief", en bij criterium groter dan 3 krijgen we zin erop te kloppen: "Gij grote lelijken dief".Ik kan mijn secretaresse zo'n opdracht geven. Als ik die opdracht aan FileMaker wil geven, dan moet ik een iets ander taaltje hanteren:
Let($Criterium = Count(SelfJoinOnbetaaldeFacturen::Factuurnummer) - Max toegelaten open facturen;Case(
$Criterium = 1;"Geachte Heer";
$Criterium = 2;"Mijnheer";
$Criterium = 3;"Gij lelijke dief";
$Criterium > 3;"Gij grote lelijken dief";""))Nog iemand een aspirientje?
PS Er is nog een toepassing van de Let-functie te vinden in tip 318 en in 341.
Terug naar het selectiemenu voor de tips.