Beispiel 1
Fügen Sie Ihrer App ein Beispielskript hinzu und führen Sie dieses aus. Fügen Sie einem Arbeitsblatt in Ihrer App dann die Felder hinzu, die in der Ergebnisspalte aufgeführt sind, um das Ergebnis anzuzeigen.
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;
ErgebnistabelleMitarbeitercode | 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, weil Peek('EmployeeCode',0, 'EmployeeDates') den ersten Wert von EmployeeCode in der Tabelle EmployeeDates liefert.
LastCode = 106, weil Peek('EmployeeCode',-1, 'EmployeeDates') den letzten Wert von EmployeeCode in der Tabelle EmployeeDates liefert.
Durch den Ersatz des Werts des Arguments row_no werden die Werte von anderen Zeilen in der Tabelle wie nachfolgend beschrieben ausgegeben:
Peek('EmployeeCode',2, 'EmployeeDates') liefert den dritten Wert (103) in der Tabelle als den FirstCode.
Beachten Sie jedoch, dass sich die Funktion ohne Festlegen der Tabelle als drittes Argument table_name in diesen Beispielen auf die aktuelle (in diesem Fall die interne) Tabelle bezieht.
Beispiel 2
Wenn Sie auf Daten weiter unten in einer Tabelle zugreifen möchten, müssen Sie zwei Schritte durchführen: Laden Sie zuerst die ganze Tabelle in eine temporäre Tabelle und sortieren Sie diese dann anhand von Peek() neu.
Fügen Sie Ihrer App ein Beispielskript hinzu und führen Sie dieses aus. Fügen Sie einem Arbeitsblatt in Ihrer App dann die Felder hinzu, die in der Ergebnisspalte aufgeführt sind, um das Ergebnis anzuzeigen.
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.
ErgebnistabelleID | Liste | Wert |
---|
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 |
Der Befehl IF() wird über die temporäre Tabelle T1 ausgeführt.
Peek('ID') bezieht sich auf das Feld ID in der vorhergehenden Zeile in der aktuellen Tabelle T2.
Peek('List') bezieht sich auf das Feld List in der vorhergehenden Zeile in der Tabelle T2, die derzeit erstellt wird, während die Formel überprüft wird.
Der Befehl liefert folgendes Ergebnis:
Wenn der aktuelle Wert von ID mit dem vorhergehenden Wert von ID übereinstimmt, wird der Wert von Peek('List') mit dem aktuellen Wert von Value zusammengefasst. Ansonsten wird nur der aktuelle Wert von Value geschrieben.
Enthält Peek('List') bereits ein zusammengefasstes Ergebnis, wird das neue Ergebnis von Peek('List') damit zusammengefasst.
InformationshinweisBeachten Sie die Bedingung Order by. Diese gibt an, wie die Tabelle sortiert wird (nach ID in aufsteigender Reihenfolge). Ohne diese Bedingung nutzt die Funktion Peek() die beliebige Sortierung der internen Tabelle, was zu unvorhersehbaren Ergebnissen führen kann.
Beispiel 3
Fügen Sie Ihrer App ein Beispielskript hinzu und führen Sie dieses aus. Fügen Sie einem Arbeitsblatt in Ihrer App dann die Felder hinzu, die in der Ergebnisspalte aufgeführt sind, um das Ergebnis anzuzeigen.
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];
ErgebnistabelleAmount | AmountMonthBefore | Monat |
---|
1 | 4 | 2022-06 |
2 | - | 2022-01 |
3 | 2 | 2022-02 |
4 | 9 | 2022-05 |
7 | 3 | 2022-03 |
9 | 7 | 2022-04 |
Das Feld AmountMonthBefore enthält den Betrag aus dem Vormonat.
Hier werden die Parameter row_no und table_name ausgelassen, sodass die Standardwerte verwendet werden. In diesem Beispiel sind die folgenden drei Funktionsaufrufe äquivalent.
- Peek(Amount)
- Peek(Amount,-1)
- Peek(Amount,-1,'Amounts')
Wenn -1 als row_no verwendet wird, bedeutet dies, dass der Wert aus der vorigen Zeile verwendet wird. Durch Ersetzen dieses Werts können Werte aus anderen Zeilen in der Tabelle abgerufen werden:
Peek(Amount,2) gibt den dritten Wert in der Tabelle zurück: 7.
Beispiel 4
Die Daten müssen korrekt sortiert sein, um das korrekte Ergebnis zu erhalten. Leider ist dies nicht immer der Fall. Zudem kann die Funktion Peek() nicht zum Verweisen auf noch nicht geladene Daten verwendet werden. Mit temporären Tabellen und der Ausführung mehrerer Durchläufe durch die Daten lassen sich derartige Probleme vermeiden.
Fügen Sie Ihrer App ein Beispielskript hinzu und führen Sie dieses aus. Fügen Sie einem Arbeitsblatt in Ihrer App dann die Felder hinzu, die in der Ergebnisspalte aufgeführt sind, um das Ergebnis anzuzeigen.
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;
Erläuterung
Die anfängliche Tabelle ist nach Monat sortiert, was bedeutet, dass die Funktion peek() in vielen Fällen den Betrag für das falsche Produkt zurückgeben würde. Daher muss diese Tabelle neu sortiert werden. Das geschieht durch einen zweiten Durchlauf durch die Daten, mit dem eine neue Tabelle namens „tmp2Amounts“ erstellt wird. Beachten Sie die Bedingung „Order by“. Damit werden die Datensätze zuerst nach Produkt und dann nach Monat in aufsteigender Reihenfolge sortiert.
Die Funktion If() wird benötigt, da AmountMonthBefore nur berechnet werden sollte, wenn die vorherige Zeile die Daten für das gleiche Produkt, aber den Vormonat enthält. Durch Vergleichen des Produkts in der aktuellen Zeile mit dem Produkt in der vorherigen Zeile kann diese Bedingung validiert werden.
Wenn die zweite Tabelle erstellt wird, wird die erste Tabelle tmp1Amounts mit einem „Drop Table“-Befehl gelöscht.
Abschließend erfolgt ein dritter Durchlauf der Daten, aber jetzt werden die Monate in umgekehrter Reihenfolge sortiert. So kann auch AmountMonthAfter berechnet werden.
Informationshinweis„Order by“-Bedingungen geben an, wie die Tabelle sortiert wird. Ohne diese Bedingungen nutzt die Funktion Peek() eine beliebige Sortierung der internen Tabelle, was zu unvorhersehbaren Ergebnissen führen kann.
Ergebnis
ErgebnistabelleMonat | Produkt | 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 | - |
Beispiel 5
Fügen Sie Ihrer App ein Beispielskript hinzu und führen Sie dieses aus. Fügen Sie einem Arbeitsblatt in Ihrer App dann die Felder hinzu, die in der Ergebnisspalte aufgeführt sind, um das Ergebnis anzuzeigen.
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;
Ergebnis
ErgebnistabelleQuartal | 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 |
Erläuterung
Die load-Anweisung Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal umfasst einen rekursiven Aufruf, in dem vorherige Werte zum aktuellen Wert hinzugefügt werden. Dieser Vorgang wird verwendet, um eine Kumulierung von Werten im Skript zu berechnen.