Peek - スクリプト関数
Peek() は、すでにロードされている行または内部メモリに存在する行に対してテーブルの項目値を算出します。行番号は、テーブルと同様に指定できます。
構文:
Peek(field_name[, row_no[, table_name ] ] )
戻り値データ型: デュアル
引数:
引数 | 説明 |
---|---|
field_name | 戻り値が必要な項目名。入力値は文字列として指定する必要があります (たとえば、引用符で囲まれた文字列)。 |
row_no |
テーブルの行。必要な項目がある行を指定します。数式の場合を指定することもできますが、結果が整数になる必要があります。0 は最初のレコード、1 は 2 番目のレコードを示し、以下同様に表されます。負の数は、テーブルの最後から見た順序を表します。-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;
Peek(EmployeeCode,0) が、EmployeeDates テーブルの EmployeeCode の最初の値を返すため、EmpCode = 101 になります。
引数 row_no の値を置き換えた場合、以下のように、テーブルの他の行の値を返します。
Peek('EmployeeCode',2) は、テーブル の 3 番目の値を返します。103.
ただし、3 番目の引数 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' を指定すると、この関数は EmployeeDates テーブルの EmployeeCode の最後から 2 番目の値である次の値を返します: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') は、現在のテーブル T2 の現在の行の 1 行前の ID 項目を参照します。
Peek('List') は、テーブル T2 の現在の行の 1 行前の List 項目を参照しており、評価対象の数式として構築されています。
ステートメントは次のように評価されます。
ID の現在の値が ID の 1 行前の値と同じ場合、Peek('List') の値を Value の現在の値と連結して書き込みます。それ以外の場合は、Value の現在の値のみ書き込みます。
Peek('List') に連結された結果がすでに含まれている場合、Peek('List)' の新しい結果がその結果に連結されます。