Exempel 1
Lägg till exempelskriptet i appen och kör det. När du vill se resultatet lägger du till de fält som anges i resultatkolumnen i ett ark i din app.
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;
ResultattabellEmployee 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, eftersom Peek('EmployeeCode',0, 'EmployeeDates') returnerar det första värdet för EmployeeCode i tabellen EmployeeDates.
LastCode = 106, eftersom Peek('EmployeeCode',-1, 'EmployeeDates') returnerar det sista värdet för EmployeeCode i tabellen EmployeeDates.
Att ersätta värdet på argumentet row_no returnerar värdena för andra rader i tabellen, enligt följande:
Peek('EmployeeCode',2, 'EmployeeDates') returnerar det tredje värdet, 103, i tabellen som FirstCode.
Observera dock att om inte tabellen specificeras som det tredje argumentet table_name i dessa exempel, refererar funktionen till den aktuella tabellen (i detta fall, internt).
Exempel 2
Om du vill komma åt data längre ned i en tabell kan du göra det i två steg: först laddar du hela tabellen i en temporär tabell och sedan sorterar du om den med användning av Peek().
Lägg till exempelskriptet i appen och kör det. När du vill se resultatet lägger du till de fält som anges i resultatkolumnen i ett ark i din app.
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.
ResultattabellID | Lista | Värde |
---|
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 |
Satsen IF() byggs från den tillfälliga tabellen T1.
Peek('ID') hänvisar till fältet ID i föregående rad i aktuell tabell T2.
Peek('List') hänvisar till fältet List i föregående rad i tabellen T2, som byggs då uttrycket utvärderas.
Satsen utvärderas enligt följande:
Om det aktuella värdet för ID är samma som det tidigare värdet för ID, då ska värdet för Peek('List') skrivas sammanlänkat med det aktuella värdet för Value. Annars skriver du det aktuella värdet av Value endast.
Om Peek('List') redan innehåller ett sammanlänkat resultat, kommer det nya resultatet Peek('List') sammanlänkas till det.
Anteckning om informationObservera satsen Order by. Detta anger hur tabellen ordnas (genom ID i stigande ordning). Utan detta använder funktionen Peek() godtycklig ordning som den interna tabellen har, vilket kan leda till oförutsägbara resultat.
Exempel 3
Lägg till exempelskriptet i appen och kör det. När du vill se resultatet lägger du till de fält som anges i resultatkolumnen i ett ark i din app.
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];
ResultattabellAmount | AmountMonthBefore | Månad |
---|
1 | 4 | 2022-06 |
2 | - | 2022-01 |
3 | 2 | 2022-02 |
4 | 9 | 2022-05 |
7 | 3 | 2022-03 |
9 | 7 | 2022-04 |
Fältet AmountMonthBefore kommer att innehålla mängden från föregående månad.
Eftersom parametrarna row_no och table_name är utelämnade, används standardvärdena. I det här exemplet är följande tre funktionsanrop likvärdiga:
- Peek(Amount)
- Peek(Amount,-1)
- Peek(Amount,-1,'Amounts')
När -1 används som row_no kommer värdet från föregående rad att användas. Genom att ersätta det här värdet går det att hämta värden för de andra raderna i tabellen:
Peek(Amount,2) returnerar det tredje värdet i tabellen: 7.
Exempel 4
Data måste vara korrekt sorterade för att få rätt resultat men det är tyvärr inte alltid fallet. Funktionen Peek() kan inte användas för att hänvisa till data som inte har laddats än. Du kan undvika sådana problem genom att använda temporära tabeller och köra flera pass för dina data.
Lägg till exempelskriptet i appen och kör det. När du vill se resultatet lägger du till de fält som anges i resultatkolumnen i ett ark i din app.
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;
Förklaring
Den inledande tabellen är sorterad på månad. Det betyder att peek()-funktionen i många fall skulle returnera mängden för fel produkt. Det innebär att tabellen måste sorteras om. Detta utförs genom att köra ett andra pass för dina data och skapa den nya tabellen tmp2Amounts. Observera satsen Order By. Först ordnar den posterna efter produkt och därefter efter månad i stigande ordning.
If()-funktionen behövs eftersom AmountMonthBefore endast ska beräknas om den föregående raden innehåller data för samma produkt men bara för den föregående månaden. Genom att jämföra produkten på den aktuella raden med produkten på föregående rad kan det här villkoret valideras.
När den andra tabellen har skapats skippas den första tabellen tmp1Amounts med en Drop Table-sats.
Slutligen körs ett tredje pass för data, men nu med månaderna sorterade i omvänd ordning. Det betyder att även AmountMonthAfter kan beräknas.
Anteckning om informationOrder By-satser anger hur tabellen ska ordnas. Utan detta använder funktionen Peek() en godtycklig ordning som den interna tabellen har, vilket kan leda till oförutsägbara resultat.
Resultat
ResultattabellMånad | Produkt | Amount | AmountMonthBefore | AmountMonthAfter |
---|
2022-01 | En | 8 | - | 6 |
2022-02 | B | 3 | - | 4 |
2022-03 | En | 6 | 8 | 6 |
2022-04 | B | 4 | 3 | 1 |
2022-05 | En | 6 | 6 | 5 |
2022-06 | B | 1 | 4 | 5 |
2022-01 | En | 5 | 6 | 7 |
2022-02 | B | 5 | 1 | 6 |
2022-03 | En | 7 | 5 | 4 |
2022-04 | B | 6 | 5 | 8 |
2022-05 | En | 4 | 7 | - |
2022-06 | B | 8 | 6 | - |
Exempel 5
Lägg till exempelskriptet i appen och kör det. När du vill se resultatet lägger du till de fält som anges i resultatkolumnen i ett ark i din app.
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;
Resultat
ResultattabellKvartal | 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 |
Förklaring
Load-satsen Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal har ett rekursivt anrop där de tidigare värdena läggs till i det aktuella värdet. Den här åtgärden används till att beräkna en ackumulering av värden i skriptet.