Peek - fonction de script
Peek() recherche la valeur d'un champ dans une table pour une ligne qui a déjà été chargée ou qui existe dans la mémoire interne. Il est possible de spécifier le numéro de ligne et la table.
Peek(field_name[, row_no[, table_name ] ] )
double
Argument | Description |
---|---|
field_name | Nom du champ pour lequel la valeur de renvoi est requise.La valeur saisie doit être une chaîne (par exemple, un littéral placé entre guillemets). |
row_no |
Ligne de la table indiquant le champ requis. Il peut s'agir d'une expression, mais le résultat doit correspondre à un entier. 0 renvoie au premier enregistrement, 1 au deuxième et ainsi de suite. Les nombres négatifs indiquent l'ordre des enregistrements à partir de la fin de la table. -1 renvoie ainsi au dernier enregistrement lu. Si aucun argument row n'est spécifié, -1 est utilisé. |
table_name | Étiquette de table sans les deux-points finaux. Si aucun argument table_name n'est spécifié, la table active est utilisée. En cas d'utilisation à l'extérieur de l'instruction LOAD ou pour faire référence à une autre table, l'argument table_name doit être inclus. |
Dans le premier enregistrement d'une table interne, la fonction renvoie NULL.
Ajoutez l'exemple de script à votre document et exécutez-le. Ensuite, ajoutez au moins les champs répertoriés dans la colonne des résultats à une feuille de votre document afin de visualiser le résultat.
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 '|');
FirstEmployee:
Load EmployeeCode, Peek('EmployeeCode',0) As EmpCode
Resident EmployeeDates;
EmpCode = 101, car Peek(EmployeeCode,0) renvoie la premiè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) renvoie la troisième valeur de la table : 103.
Notez cependant que si vous ne spécifiez pas la table comme troisième argument table_no, la fonction fait référence à la table active (dans ce cas, la table interne). Le résultat de Peek(EmployeeCode,-2) correspond à plusieurs valeurs :
EmployeeCode | EmpCode |
---|---|
101 | - |
102 | - |
103 | 101 |
104 | 102 |
105 | 103 |
106 | 104 |
FirstEmployee:
Load EmployeeCode, Peek('EmployeeCode',-2,'EmployeeDates') As EmpCode
Resident EmployeeDates;
En spécifiant l'argument table_no comme 'EmployeeDates', la fonction renvoie l'avant-dernière valeur de EmployeeCode figurant dans la table EmployeeDates : 105.
La fonction Peek() peut être utilisée pour référencer des données qui n'ont pas encore été chargées.
Ajoutez l'exemple de script à votre document et exécutez-le. Ensuite, ajoutez au moins les champs répertoriés dans la colonne des résultats à une feuille de votre document afin de visualiser le résultat.
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;
Créez une table sur une feuille de votre document en définissant ID, List et Value comme dimensions.
ID | List | Value |
---|---|---|
1 | 6 | 6 |
1 | 6,3 | 3 |
1 | 6,3,4 | 4 |
2 | 11 | 11 |
2 | 11,10 | 10 |
2 | 11,10,1 | 1 |
3 | 8 | 8 |
3 | 8,7 | 7 |
5 | 13 | 13 |
5 | 13,2 | 2 |
5 | 13,2,78 | 78 |
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.