Перейти к основному содержимому Skip to complementary content

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

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

Синтаксис:  

Peek(field_name[, row_no[, table_name ] ] )

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

Аргументы:  

аргументы Peek
Аргумент Описание
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) будет множество значений:

Результаты примера 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() будет использовать тот обязательный порядок, который указан во внутренней таблице, что может привести к непредсказуемым результатам.

Присоединяйтесь к программе модернизации аналитики

Remove banner from view

Модернизируйте ваши важные приложения QlikView без ущерба с помощью программы модернизации аналитики. Щелкните здесь для получения дополнительной информации или свяжитесь с нами: ampquestions@qlik.com