Peek — функция скрипта
Функция Peek() находит значение поля в таблице для строки, которая уже загружена или существует во встроенной памяти. Можно указать номер строки или таблицу.
Синтаксис:
Peek(field_name[, row_no[, table_name ] ] )
Возвращаемые типы данных: двойное значение
Аргументы:
Аргумент | Описание |
---|---|
field_name | Имя поля, для которого требуется возвращаемое значение.Вводимое значение необходимо задать в виде строки (например литералы ссылочного типа). |
row_no |
Необходима строка в таблице, которая указывает поле. Может быть выражением, но оно должно определяться по целому числу. 0 обозначает первую запись, 1 обозначает вторую и т. д. Отрицательные числа указывают порядок с конца таблицы. -1 обозначает последнюю прочитанную запись. Если элемент row не задан, используется -1. |
table_name | Метка таблицы без двоеточия на конце. Если элемент table_name не указан, принимается текущая таблица. При использовании вне оператора LOAD или относительно другой таблицы должен быть включен элемент table_name. |
Ограничения:
В первой записи внутренней таблицы функция возвращает значение NULL.
Пример 1:
Добавьте образец скрипта в свой документ и запустите. Затем добавьте на лист документа как минимум поля, указанные в столбце с результатами, чтобы увидеть результаты.
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, поскольку Peek(EmployeeCode,0) возвращает первое значение элемента EmployeeCode в таблице EmployeeDates.
Замена значения аргумента row_no возвращает значения других строк в таблице следующим образом:
Peek('EmployeeCode',2) возвращает третье значение в таблице: 103.
Тем не менее, обратите внимание, что без указания таблицы в качестве третьего аргумента table_no функция ссылается на текущую (в данном случае внутреннюю) таблицу. Результатом Peek(EmployeeCode,-2) будет множество значений:
EmployeeCode | EmpCode |
---|---|
101 | - |
102 | - |
103 | 101 |
104 | 102 |
105 | 103 |
106 | 104 |
Пример 2:
FirstEmployee:
Load EmployeeCode, Peek('EmployeeCode',-2,'EmployeeDates') As EmpCode
Resident EmployeeDates;
При указании аргумента table_no как 'EmployeeDates' функция возвращает предпоследнее значение элемента EmployeeCode в таблице EmployeeDates: 105.
Пример 3:
Функцию Peek() можно использовать для ссылки на данные, которые еще не загружены.
Добавьте образец скрипта в свой документ и запустите. Затем добавьте на лист документа как минимум поля, указанные в столбце с результатами, чтобы увидеть результаты.
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;
Создайте таблицу на листе в вашем документе с элементами ID, List и Value в качестве измерений.
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 |
Оператор IF() строится на основе временной таблицы T1.
Peek('ID') ссылается на поле ID в предыдущей строке в текущей таблице T2.
Peek('List') ссылается на поле List в предыдущей строке в таблице T2, которая строится в настоящее время как оценивающееся выражение.
Оператор оценивается следующим образом.
Если текущее значение элемента ID такое же, как предыдущее значение элемента ID, то значение элемента Peek('List') записывается как объединенное с текущим значением элемента Value. В противном случае записывается только текущее значение элемента Value.
Если функция Peek('List') уже содержит объединенный результат, новый результат элемента Peek('List)' будет объединен с ним.