Exemple 1
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
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;
Tableau des résultatsCode d'employé | 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, car Peek('EmployeeCode',0, 'EmployeeDates') renvoie la première valeur de EmployeeCode de la table EmployeeDates.
LastCode = 106, car Peek('EmployeeCode',-1, 'EmployeeDates') renvoie la dernière valeur de EmployeeCode de la table EmployeeDates.
La substitution de la valeur de l'argument row_no renvoie les valeurs des autres lignes de la table, comme suit :
Peek('EmployeeCode',2, 'EmployeeDates') renvoie la troisième valeur, 103, de la table comme FirstCode.
Notez cependant que si vous ne spécifiez pas la table comme troisième argument table_name dans ces exemples, la fonction fait référence à la table active (dans ce cas, la table interne).
Exemple 2
Si vous souhaitez accéder aux données qui se trouvent plus bas dans un tableau, vous devez le faire en deux étapes : tout d'abord, vous devez charger le tableau complet dans un tableau temporaire, puis le retrier à l'aide de Peek().
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
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.
Tableau des résultatsID | Liste | Valeur |
---|
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 |
L'instruction IF() est créée à partir de la table temporaire T1.
Peek('ID') référence le champ ID de la ligne précédente dans la table active T2.
Peek('List') référence le champ List de la ligne précédente dans la table T2, en cours de création pendant l'évaluation de l'expression.
L'instruction est évaluée de la manière suivante :
Si la valeur active d'ID est identique à la valeur précédente d'ID, alors indiquez la valeur de Peek('List') concaténée avec la valeur active de Value. Sinon, indiquez uniquement la valeur active de Value.
Si Peek('List') contient déjà un résultat concaténé, le nouveau résultat de Peek('List') sera concaténé avec lui.
Note InformationsNotez la clause Order by. Elle spécifie le mode de tri de la table (par ID et selon un ordre croissant). Sans cela, la fonction Peek() utilise n'importe quel ordre arbitraire inclus dans la table interne, ce qui peut aboutir à des résultats imprévisibles.
Exemple 3
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
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];
Tableau des résultatsMontant | 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 |
Le champ AmountMonthBefore contiendra le montant du mois précédent.
Ici, les paramètres row_no et table_name sont omis, c'est pourquoi les valeurs par défaut sont utilisées. Dans cet exemple, les trois appels de fonction suivants sont équivalents :
- Peek(Amount)
- Peek(Amount,-1)
- Peek(Amount,-1,'Amounts')
L'utilisation de -1 comme row_no signifie que la valeur de la ligne précédente sera utilisée. En substituant cette valeur, il est possible de récupérer les valeurs des autres lignes du tableau :
Peek(Amount,2) renvoie la troisième valeur du tableau : 7.
Exemple 4
Pour obtenir les résultats corrects, il convient de trier correctement les données, mais, malheureusement, cela n'est pas toujours le cas. De plus, la fonction Peek() ne peut pas être utilisée pour référencer des données qui n'ont pas encore été chargées. Si vous utilisez des tables temporaires et si vous passez plusieurs fois en revue les données, vous éviterez de tels problèmes.
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
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;
Explication
Le tableau initial est trié en fonction du mois, ce qui signifie que la fonction peek(), dans de nombreux cas, renverra le montant pour le mauvais produit. C'est pourquoi il convient de retrier ce tableau. Pour ce faire, repassez en revue les données une deuxième fois en créant un nouveau tableau intitulé tmp2Amounts. Notez la clause Order by. Elle commence par trier les enregistrements par produit, puis par mois dans l'ordre croissant.
La fonction If() est nécessaire, car AmountMonthBefore doit être calculé uniquement si la ligne précédente contient les données du même produit, mais pour le mois précédent. Si le produit de la ligne en cours est comparé au produit de la ligne précédente, il est possible de valider cette condition.
Lors de la création du deuxième tableau, le premier tableau tmp1Amounts est abandonné via une instruction Drop Table.
Pour finir, les données sont passées en revue une troisième fois, mais, cette fois-ci, avec les mois triés dans l'ordre inverse. Cela permet de calculer également AmountMonthAfter.
Note InformationsLes clauses Order by spécifient le mode de tri du tableau ; sans elles, la fonction Peek() utilise n'importe quel ordre arbitraire inclus dans le tableau interne, ce qui peut aboutir à des résultats imprévisibles.
Résultat
Tableau des résultatsMonth | Product | Montant | 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 | - |
Exemple 5
Ajoutez l'exemple de script à votre application et exécutez-le. Pour afficher le résultat, ajoutez les champs répertoriés dans la colonne de résultats à une feuille de votre application.
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;
Résultat
Tableau des résultatsTrimestre | 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 |
Explication
L'instruction LOAD Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal inclut un appel récursif dans lequel les valeurs précédentes sont ajoutées à la valeur actuelle. Cette opération est utilisée pour calculer une accumulation de valeurs dans le script.