# Peek — функция скрипта

Функция Peek() находит значение поля в таблице для строки, которая уже загружена или существует во встроенной памяти. Можно указать номер строки или таблицу.

Синтаксис:

Peek(field\_name[, row\_no[, table\_name ] ] )

Возвращаемые типы данных: двойное значение

Аргументы:

аргументы Peek

| Аргумент | Описание |
| --- | --- |
| field\_name | Имя поля, для которого требуется возвращаемое значение.Вводимое значение необходимо задать в виде строки (например литералы ссылочного типа). |
| row\_no | Необходима строка в таблице, которая указывает поле. Может быть выражением, но оно должно определяться по целому числу. 0 обозначает первую запись, 1 обозначает вторую и т. д. Отрицательные числа указывают порядок с конца таблицы. -1 обозначает последнюю прочитанную запись.<br><br>Если элемент 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) ` будет множество значений:

Результаты примера 1

| 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 в качестве измерений.

Результаты примера 3

| 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)' будет объединен с ним.

Примечание к информацииОбратите внимание на предложение Order by. Оно указывает порядок организации таблицы (по ID по возрастанию). Без этого функция Peek() будет использовать тот обязательный порядок, который указан во внутренней таблице, что может привести к непредсказуемым результатам.

## Подробнее

* [Метки таблицы](https://help.qlik.com/ru-RU/qlikview/May2024/Subsystems/Client/Content/QV_QlikView/Scripting/table-labels.htm)
* [Previous — функция скрипта](https://help.qlik.com/ru-RU/qlikview/May2024/Subsystems/Client/Content/QV_QlikView/Scripting/InterRecordFunctions/Previous.htm)