Peek - função de script
Peek() encontra o valor de um campo em uma tabela para uma linha que já tenha sido carregada ou que existe na memória interna. O número da linha pode ser especificado, assim como a tabela.
Sintaxe:
Peek(field_name[, row_no[, table_name ] ] )
Tipo de dados de retorno: dual
Argumentos:
Argumento | Descrição |
---|---|
field_name | Nome do campo para o qual o valor de retorno é exigido.O valor de entrada deve ser fornecido como uma string (por exemplo, literais entre aspas). |
row_no |
A linha na tabela que especifica o campo obrigatório. Pode ser uma expressão, mas deve solucionar-se em um número inteiro. 0 indica o primeiro registro; 1, o segundo; e assim por diante. Números negativos indicam a ordem no final da tabela. -1 representa o último registro lido. Se nenhuma row for definida, assume-se -1. |
table_name | Um rótulo de tabela sem os dois-pontos finais. Se nenhum table_namefor definido, a tabela atual será assumida. Se usado fora do comando LOAD ou em referência a outra tabela, o table_name deve ser incluído. |
Limitações:
No primeiro registro de uma tabela interna, a função retorna NULL.
Exemplo 1:
Adicione o script de exemplo ao seu documento e execute-o. Em seguida, adicione pelo menos os campos listados na coluna de resultados a um documento para ver o resultado.
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, pois Peek(EmployeeCode,0) retorna o primeiro valor de EmployeeCode na tabela EmployeeDates.
Substituindo o valor do argumento, row_no retorna os valores de outras linhas na tabela, conforme a seguir:
Peek('EmployeeCode',2) retorna o terceiro valor na tabela: 103.
No entanto, observe que sem especificar a tabela como table_no do terceiro argumento, a função referencia a tabela atual (neste caso, interna). O resultado de Peek(EmployeeCode,-2) são valores múltiplos:
EmployeeCode | EmpCode |
---|---|
101 | - |
102 | - |
103 | 101 |
104 | 102 |
105 | 103 |
106 | 104 |
Exemplo 2:
FirstEmployee:
Load EmployeeCode, Peek('EmployeeCode',-2,'EmployeeDates') As EmpCode
Resident EmployeeDates;
Ao especificar table_no do argumento como 'EmployeeDates', a função retorna o segundo ao último valor de EmployeeCode na tabela EmployeeDates: 105.
Exemplo 3:
A função Peek() pode ser usada para fazer referência a dados que ainda não foram carregados.
Adicione o script de exemplo ao seu documento e execute-o. Em seguida, adicione pelo menos os campos listados na coluna de resultados a um documento para ver o resultado.
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;
Crie uma tabela em uma pasta no seu documento com ID, List e Valor como dimensões.
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 |
O comando IF() é formado a partir da tabela temporária T1.
Peek('ID') faz referência ao campo ID na linha anterior da tabela atual T2.
Peek('List') faz referência ao campo List na linha anterior da tabela T2, que está sendo construída à medida que a expressão é avaliada.
O comando é avaliado conforme a seguir
Se o valor atual de ID for o mesmo que o valor anterior de ID, escreva o valor de Peek('List') concatenado com o valor atual de Value. Caso contrário, escreva somente o valor atual de Value.
Se Peek('List') já contém um resultado relacionado, o novo resultado de Peek('List)' será relacionado a ele.