Voorbeeld 1
Voeg het voorbeeldscript toe aan uw app en voer het uit. Voeg vervolgens de velden die in de resultatenkolom staan toe aan een werkblad in uw app om het resultaat te bekijken.
EmployeeDates:
Load * Inline [
EmployeeCode|StartDate|EndDate
101|02/11/2010|23/06/2012
102|01/11/2011|30/11/2013
103|02/01/2012|
104|02/01/2012|31/03/2012
105|01/04/2012|31/01/2013
106|02/11/2013|
] (delimiter is '|');
First_last_Employee:
Load
EmployeeCode,
Peek('EmployeeCode',0,'EmployeeDates') As FirstCode,
Peek('EmployeeCode',-1,'EmployeeDates') As LastCode
Resident EmployeeDates;
ResultaattabelEmployee code | StartDate | EndDate | FirstCode | LastCode |
---|
101 | 02/11/2010 | 23/06/2012 | 101 | 106 |
102 | 01/11/2011 | 30/11/2013 | 101 | 106 |
103 | 02/01/2012 | | 101 | 106 |
104 | 02/01/2012 | 31/03/2012 | 101 | 106 |
105 | 01/04/2012 | 31/01/2013 | 101 | 106 |
106 | 02/11/2013 | | 101 | 106 |
FirstCode = 101 omdat Peek('EmployeeCode',0, 'EmployeeDates') de eerste waarde retourneert van EmployeeCode in de tabel EmployeeDates.
LastCode = 106 omdat Peek('EmployeeCode',-1, 'EmployeeDates') de laatste waarde retourneert van EmployeeCode in de tabel EmployeeDates.
Als de waarde van het argument row_no wordt vervangen, worden de waarden van de andere rijen in de tabel als volgt geretourneerd:
Peek('EmployeeCode',2, 'EmployeeDates') retourneert de derde waarde, 103, in de tabel als de FirstCode.
Houd er echter rekening mee dat als in deze voorbeelden de tabel niet wordt opgegeven als het derde argument table_name, de functie verwijst naar de huidige (in dit geval interne) tabel.
Voorbeeld 2
Als u gegevens wilt bekijken die zich lager in een tabel bevinden, moet u dit in twee stappen doen: eerst laadt u de volledige tabel als een tijdelijke tabel en vervolgens sorteert u deze opnieuw met behulp van Peek().
Voeg het voorbeeldscript toe aan uw app en voer het uit. Voeg vervolgens de velden die in de resultatenkolom staan toe aan een werkblad in uw app om het resultaat te bekijken.
T1:
LOAD * inline [
ID|Value
1|3
1|4
1|6
3|7
3|8
2|1
2|11
5|2
5|78
5|13
] (delimiter is '|');
T2:
LOAD *,
IF(ID=Peek('ID'), Peek('List')&','&Value,Value) AS List
RESIDENT T1
ORDER BY ID ASC;
DROP TABLE T1;
Create a table in a sheet in your app with ID, List, and Value as the dimensions.
ResultaattabelID | Lijst | Value |
---|
1 | 3,4 | 4 |
1 | 3,4,6 | 6 |
1 | 3 | 3 |
2 | 1,11 | 11 |
2 | 1 | 1 |
3 | 7,8 | 8 |
3 | 7 | 7 |
5 | 2,78 | 78 |
5 | 2,78,13 | 13 |
5 | 2 | 2 |
De opdracht IF() is samengesteld op basis van de tijdelijke tabel T1.
Peek('ID') verwijst naar het veld ID in de vorige rij in de huidige tabel T2.
Peek('List') verwijst naar het veld List in de vorige rij in de tabel T2, die momenteel wordt samengesteld terwijl de uitdrukking wordt geëvalueerd.
De opdracht wordt als volgt geëvalueerd:
Als de huidige waarde van ID gelijk is aan de vorige waarde van ID, wordt de waarde van Peek('List') aaneengeschakeld met de huidige waarde van Value weggeschreven. Anders wordt alleen de huidige waarde van Value weggeschreven.
Als Peek('List') al een aaneengeschakeld resultaat bevat, wordt het nieuwe resultaat van Peek('List') hier eveneens mee aaneengeschakeld.
InformatieLet op de Order by-clausule. Deze geeft aan hoe de tabel wordt geordend (op ID in oplopende volgorde). Zonder deze clausule, wordt bij de functie Peek() gebruikgemaakt van de willekeurige volgorde van de interne tabel, hetgeen tot onvoorspelbare resultaten kan leiden.
Voorbeeld 3
Voeg het voorbeeldscript toe aan uw app en voer het uit. Voeg vervolgens de velden die in de resultatenkolom staan toe aan een werkblad in uw app om het resultaat te bekijken.
Amounts:
Load
Date#(Month,'YYYY-MM') as Month,
Amount,
Peek(Amount) as AmountMonthBefore
Inline
[Month,Amount
2022-01,2
2022-02,3
2022-03,7
2022-04,9
2022-05,4
2022-06,1];
ResultaattabelAmount | AmountMonthBefore | Month |
---|
1 | 4 | 2022-06 |
2 | - | 2022-01 |
3 | 2 | 2022-02 |
4 | 9 | 2022-05 |
7 | 3 | 2022-03 |
9 | 7 | 2022-04 |
Het veld AmountMonthBefore bevat het aantal van de vorige maand.
Hier worden de parameters voor row_no en table_name weggelaten en worden de standaardwaarden gebruikt. In dit voorbeeld zijn de volgende functieaanroepen gelijk:
- Peek(Amount)
- Peek(Amount,-1)
- Peek(Amount,-1,'Amounts')
Als u -1 gebruikt als row_no, wordt de waarde van de vorige rij gebruikt. Door deze waarde te vervangen, kunnen waarden van andere rijen in de tabel worden opgehaald:
Peek(Amount,2) retourneert de derde waarde in de tabel: 7.
Voorbeeld 4
Gegevens moeten correct worden gesorteerd om de correcte resultaten te krijgen, maar helaas is dit niet altijd het geval. Bovendien kan de functie Peek() niet worden gebruikt om te verwijzen naar gegevens die nog niet zijn geladen. Door tijdelijke tabellen te gebruiken en gegevens door meerdere lagen te leiden, kunt u dergelijke problemen vermijden.
Voeg het voorbeeldscript toe aan uw app en voer het uit. Voeg vervolgens de velden die in de resultatenkolom staan toe aan een werkblad in uw app om het resultaat te bekijken.
tmp1Amounts:
Load * Inline
[Month,Product,Amount
2022-01,B,3
2022-01,A,8
2022-02,B,4
2022-02,A,6
2022-03,B,1
2022-03,A,6
2022-04,A,5
2022-04,B,5
2022-05,B,6
2022-05,A,7
2022-06,A,4
2022-06,B,8];
tmp2Amounts:
Load *,
If(Product=Peek(Product),Peek(Amount)) as AmountMonthBefore
Resident tmp1Amounts
Order By Product, Month Asc;
Drop Table tmp1Amounts;
Amounts:
Load *,
If(Product=Peek(Product),Peek(Amount)) as AmountMonthAfter
Resident tmp2Amounts
Order By Product, Month Desc;
Drop Table tmp2Amounts;
Uitleg
De initiële tabel wordt gesorteerd op maand, wat betekent dat de functie peek() in de meeste gevallen het aantal voor het verkeerde product retourneert. Daarom moet deze tabel opnieuw worden gestorteerd. Dit doet u door de gegevens door een tweede laag te leiden en een nieuwe tabel tmp2Amounts te maken. Let op de Order by-clausule. De records worden eerst gesorteerd op product, vervolgens op maand in oplopende volgorde.
De functie If() is vereist omdat AmountMonthBefore alleen moet worden berekend als de vorige rij de gegevens bevat voor hetzelfde product, maar dan van de vorige maand. Door het product van de huidige rij te vergelijken met het product van de vorige rij, kan deze voorwaarde worden gevalideerd.
Wanneer de tweede tabel wordt gemaakt, wordt de eerste tabel tmp1Amounts verwijderd met de opdracht Drop Table.
Tot slot gaan de gegevens door een derde laag, maar nu worden de maanden in omgekeerde volgorde gesorteerd. Op deze manier kan AmountMonthAfter ook worden berekend.
InformatieDe clausule Order by geeft aan wat de volgorde van de tabel is; zonder deze clausule, wordt bij de functie Peek() gebruikgemaakt van de willekeurige volgorde van de interne tabel, hetgeen tot onvoorspelbare resultaten kan leiden.
Resultaat
ResultaattabelMonth | Product | Amount | AmountMonthBefore | AmountMonthAfter |
---|
2022-01 | A | 8 | - | 6 |
2022-02 | B | 3 | - | 4 |
2022-03 | A | 6 | 8 | 6 |
2022-04 | B | 4 | 3 | 1 |
2022-05 | A | 6 | 6 | 5 |
2022-06 | B | 1 | 4 | 5 |
2022-01 | A | 5 | 6 | 7 |
2022-02 | B | 5 | 1 | 6 |
2022-03 | A | 7 | 5 | 4 |
2022-04 | B | 6 | 5 | 8 |
2022-05 | A | 4 | 7 | - |
2022-06 | B | 8 | 6 | - |
Voorbeeld 5
Voeg het voorbeeldscript toe aan uw app en voer het uit. Voeg vervolgens de velden die in de resultatenkolom staan toe aan een werkblad in uw app om het resultaat te bekijken.
T1:
Load * inline [
Quarter, Value
2003q1, 10000
2003q1, 25000
2003q1, 30000
2003q2, 1250
2003q2, 55000
2003q2, 76200
2003q3, 9240
2003q3, 33150
2003q3, 89450
2003q4, 1000
2003q4, 3000
2003q4, 5000
2004q1, 1000
2004q1, 1250
2004q1, 3000
2004q2, 5000
2004q2, 9240
2004q2, 10000
2004q3, 25000
2004q3, 30000
2004q3, 33150
2004q4, 55000
2004q4, 76200
2004q4, 89450 ];
T2:
Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal;
Load Quarter, sum(Value) as SumVal resident T1 group by Quarter;
Resultaat
ResultaattabelKwartaal | SumVal | AccSumVal |
---|
2003q1 | 65000 | 65000 |
2003q2 | 132450 | 197450 |
2003q3 | 131840 | 329290 |
2003q4 | 9000 | 338290 |
2004q1 | 5250 | 343540 |
2004q2 | 24240 | 367780 |
2004q3 | 88150 | 455930 |
2004q4 | 220650 | 676580 |
Uitleg
De LOAD-instructie Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal bevat een recursieve aanroep waarbij de vorige waarden worden toegevoegd aan de huidige waarde. Deze bewerking wordt gebruikt om een samenvoeging van waarden in het script te berekenen.