JEC.
Terugkerende gebruiker
- Lid geworden
- 27 feb 2019
- Berichten
- 4.660
- Office versie
- 365
Voor geïnteresseerde lezers, die niet bang zijn om zich ergens in vast te bijten, heb ik een uitdagend onderwerp.
Ik kwam laatst een techniek tegen waarbij gebruik werd gemaakt van uncalled lambda's, ook wel thunks genoemd. Dit zijn functies zonder parameters, welke je later aanroept.
Het gebruik hiervan kan in bepaalde situaties efficiënter zijn dan 'reguliere' formules. Bijvoorbeeld in accumulerende formules, waarbij tussentijds een waarde wordt opgeslagen, ga je verschil merken. Los van snelheid, levert het je ook mogelijkheden op om bepaalde kwesties in één dynamische array op te lossen.
Ik zal een poging doen om het uit te leggen adhv een voorbeeld;
Als voorbeeld neem ik de MAP functie. Deze functie geeft in basis het formaat van de array terug die je opgeeft. Geef je 1-dimensionaal, krijg je 1-dimensionaal. In de bijlage staat een situatie waarbij je via de MAP functie, in combinatie met deze "thunks", een 2-dimensionale array terugkrijgt, terwijl ik een 1 dimensionale invoer in de MAP functie.
In de "arr" regel roep je de lege choose functie aan en plaats je een verticale vector én een horizontale vector. De choose geeft hierdoor een 2-dimensionaal bereik terug voor iedere regel. De BYCOL functie fungeert zelf ook als een 'uncalled lambda', omdat deze geen parameter meekrijgt. In de laatste regel MAP je door de 2-d arrays, bestaande uit functies (en dus geen waarde!). Wat opvalt, is dat col() wordt geaccepteerd in de SUMIFS, omdat het een range is. Je hebt nu dus één dynamische array formule, waar je normaal voor iedere cel een eigen formule nodig zou hebben.
Ik durf te wedden dat meerdere mensen hier enthousiast van worden!
Ik kwam laatst een techniek tegen waarbij gebruik werd gemaakt van uncalled lambda's, ook wel thunks genoemd. Dit zijn functies zonder parameters, welke je later aanroept.
Het gebruik hiervan kan in bepaalde situaties efficiënter zijn dan 'reguliere' formules. Bijvoorbeeld in accumulerende formules, waarbij tussentijds een waarde wordt opgeslagen, ga je verschil merken. Los van snelheid, levert het je ook mogelijkheden op om bepaalde kwesties in één dynamische array op te lossen.
Ik zal een poging doen om het uit te leggen adhv een voorbeeld;
Als voorbeeld neem ik de MAP functie. Deze functie geeft in basis het formaat van de array terug die je opgeeft. Geef je 1-dimensionaal, krijg je 1-dimensionaal. In de bijlage staat een situatie waarbij je via de MAP functie, in combinatie met deze "thunks", een 2-dimensionale array terugkrijgt, terwijl ik een 1 dimensionale invoer in de MAP functie.
Code:
=LET(
THUNK; LAMBDA(a;b;LAMBDA(x;CHOOSE(x;a;b)));
arr; THUNK(MAP(TAKE(H2#;;1);TAKE(H2#;;-1);THUNK); BYCOL(D2:F28;LAMBDA(x;LAMBDA(x))));
MAP(arr({1}); arr({2}); LAMBDA(rep;col; SUMIFS(col(); A2:A28; rep(1); B2:B28; rep(2); C2:C28; ">="&DATE(H1;1;1); C2:C28; "<="&DATE(H1;12;31))))
)
In de "arr" regel roep je de lege choose functie aan en plaats je een verticale vector én een horizontale vector. De choose geeft hierdoor een 2-dimensionaal bereik terug voor iedere regel. De BYCOL functie fungeert zelf ook als een 'uncalled lambda', omdat deze geen parameter meekrijgt. In de laatste regel MAP je door de 2-d arrays, bestaande uit functies (en dus geen waarde!). Wat opvalt, is dat col() wordt geaccepteerd in de SUMIFS, omdat het een range is. Je hebt nu dus één dynamische array formule, waar je normaal voor iedere cel een eigen formule nodig zou hebben.
Ik durf te wedden dat meerdere mensen hier enthousiast van worden!