1. Örnek
Örnek kodu uygulamanıza ekleyin ve çalıştırın. Sonucu görmek için, sonuçlar sütununda listelenen alanları uygulamanızda bir sayfaya ekleyin.
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 '|');
First_last_Employee:
Load
EmployeeCode,
Peek('EmployeeCode',0,'EmployeeDates') As FirstCode,
Peek('EmployeeCode',-1,'EmployeeDates') As LastCode
Resident EmployeeDates;
Sonuç tablosuÇalışan kodu | StartDate | EndDate | FirstCode | LastCode |
---|
101 | 02/11/2010 | 23/06/2012 | 101 | 106 |
102 | 01/11/2011 | 30/11/2013 | 101 | 106 |
103 | 02/01/2012 | | 101 | 106 |
104 | 02/01/2012 | 31/03/2012 | 101 | 106 |
105 | 01/04/2012 | 31/01/2013 | 101 | 106 |
106 | 02/11/2013 | | 101 | 106 |
FirstCode = 101; çünkü Peek('EmployeeCode',0, 'EmployeeDates') öğesi EmployeeDates tablosundaki ilk EmployeeCode değerini döndürür.
LastCode = 106 çünkü Peek('EmployeeCode',-1, 'EmployeeDates'), EmployeeDates tablosundaki son EmployeeCode değerini döndürür.
row_no bağımsız değişkeninin değeri değiştirildiğinde tablodaki diğer satırların değerleri döndürülür. Şöyle ki:
Peek('EmployeeCode',2, 'EmployeeDates'), FirstCode olarak tablodaki 103 olan üçüncü değeri döndürür.
Ancak bu örneklerde tablonun üçüncü bağımsız değişken; table_name olarak belirtilmemesi durumunda fonksiyonun mevcut (bu örnekte dahili) tabloya başvurduğuna dikkat edin.
2. Örnek
Bir tabloda daha alttaki verilere erişmek istiyorsanız, bunu iki adımda yapmanız gerekir: Önce tüm tabloyu geçici bir tabloya yükleyin ve ardından Peek() kullanarak yeniden sıralayın.
Örnek kodu uygulamanıza ekleyin ve çalıştırın. Sonucu görmek için, sonuçlar sütununda listelenen alanları uygulamanızda bir sayfaya ekleyin.
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;
Create a table in a sheet in your app with ID, List, and Value as the dimensions.
Sonuç tablosuKimlik | Liste | Değer |
---|
1 | 3,4 | 4 |
1 | 3,4,6 | 6 |
1 | 3 | 3 |
2 | 1,11 | 11 |
2 | 1 | 1 |
3 | 7,8 | 8 |
3 | 7 | 7 |
5 | 2,78 | 78 |
5 | 2,78,13 | 13 |
5 | 2 | 2 |
IF() deyimi T1 geçici tablosundan oluşturulur.
Peek('ID'), geçerli tablo T2 içinde bir önceki satırda bulunan ID alanına referansta bulunur.
Peek('List'), ifade değerlendirildiği sırada oluşturulmakta olan T2 tablosunda bir önceki satırda bulunan List alanına referansta bulunur.
Deyim şöyle değerlendirilir:
Mevcut ID değeri, önceki ID değeriyle aynıysa, Peek('List') değerini mevcut Value değeri ile birleştirilmiş olarak yazın. Aksi takdirde sadece mevcut Value değerini yaz.
Peek('List') zaten birleştirilmiş bir sonuç içeriyorsa, yeni Peek('List') sonucu buna birleştirilir.
Bilgi notuOrder by cümlesine dikkat edin. Bu cümle tablonun nasıl sıralandığını belirtir (ID alanına göre artan sırada). Bu olmadan, Peek() fonksiyonu dahili tablonun rastgele düzenlemesini kullanır ve bu da öngörülemez sonuçlara yol açabilir.
Örnek 3
Örnek kodu uygulamanıza ekleyin ve çalıştırın. Sonucu görmek için, sonuçlar sütununda listelenen alanları uygulamanızda bir sayfaya ekleyin.
Amounts:
Load
Date#(Month,'YYYY-MM') as Month,
Amount,
Peek(Amount) as AmountMonthBefore
Inline
[Month,Amount
2022-01,2
2022-02,3
2022-03,7
2022-04,9
2022-05,4
2022-06,1];
Sonuç tablosuAmount | AmountMonthBefore | Ay |
---|
1 | 4 | 2022-06 |
2 | - | 2022-01 |
3 | 2 | 2022-02 |
4 | 9 | 2022-05 |
7 | 3 | 2022-03 |
9 | 7 | 2022-04 |
AmountMonthBefore alanı, önceki ayın tutarını içerir.
Burada, row_no ve table_name parametreleri çıkarıldığından varsayılan değerler kullanılmaktadır. Bu örnekte, aşağıdaki üç fonksiyon çağrısı eşdeğerdir:
- Peek(Amount)
- Peek(Amount,-1)
- Peek(Amount,-1,'Amounts')
row_no değeri olarak -1 kullanılması, önceki satırdaki değerin kullanılacağı anlamına gelir. Bu değer değiştirilerek tablodaki başka satırların değerleri getirilebilir:
Peek(Amount,2) tablodaki 7 olan üçüncü değeri döndürür.
Örnek 4
Doğru sonucun alınması için verilerin doğru sıralanması gerekir ancak maalesef durum her zaman böyle değildir. Dahası, Peek() fonksiyonu henüz yüklenmemiş verilere başvurmak için kullanılamaz. Geçici tablolar kullanarak ve verinin üzerinden birden çok kez geçerek bu tür sorunlardan kaçınılabilir.
Örnek kodu uygulamanıza ekleyin ve çalıştırın. Sonucu görmek için, sonuçlar sütununda listelenen alanları uygulamanızda bir sayfaya ekleyin.
tmp1Amounts:
Load * Inline
[Month,Product,Amount
2022-01,B,3
2022-01,A,8
2022-02,B,4
2022-02,A,6
2022-03,B,1
2022-03,A,6
2022-04,A,5
2022-04,B,5
2022-05,B,6
2022-05,A,7
2022-06,A,4
2022-06,B,8];
tmp2Amounts:
Load *,
If(Product=Peek(Product),Peek(Amount)) as AmountMonthBefore
Resident tmp1Amounts
Order By Product, Month Asc;
Drop Table tmp1Amounts;
Amounts:
Load *,
If(Product=Peek(Product),Peek(Amount)) as AmountMonthAfter
Resident tmp2Amounts
Order By Product, Month Desc;
Drop Table tmp2Amounts;
Açıklama
İlk tablo aya göre sıralandığından peek() fonksiyonu çoğu durumda yanlış ürünün tutarını döndürecektir. Bu nedenle tablonun yeniden sıralanması gerekir. Bu, verinin üzerinden ikinci bir kez daha geçip tmp2Amounts adlı yeni bir tablo oluşturularak yapılır. Order By cümlesine dikkat edin. Ürünleri önce ürüne göre, sonra ayar göre artan düzende sıralar.
If() fonksiyonu gereklidir çünkü AmountMonthBefore yalnızca önceki satır aynı ürünün önceki ay için verisini içeriyorsa hesaplanmalıdır. Geçerli satırdaki ürün önceki satırdaki ürünle karşılaştırılarak bu koşul doğrulanabilir.
İkinci tablo oluşturulduğunda, birinci tablo tmp1Amounts bir Drop Table cümlesi kullanılarak bırakılır.
Son olarak, verilerin üzerinden üçüncü bir kez daha, ancak bu kez aylar ters düzende sıralanmış olarak geçilir. Bu şekilde, AmountMonthAfter da hesaplanabilir.
Bilgi notuOrder By cümleleri tablonun nasıl sıralanacağını belirtir; bunlar olmadan Peek() fonksiyonu dahili tabloda hangi rasgele sıralama varsa onu kullanır ve bu beklenmedik sonuçlar ortaya çıkarabilir.
Sonuç
Sonuç tablosuAy | Product | Amount | AmountMonthBefore | AmountMonthAfter |
---|
2022-01 | A | 8 | - | 6 |
2022-02 | B | 3 | - | 4 |
2022-03 | A | 6 | 8 | 6 |
2022-04 | B | 4 | 3 | 1 |
2022-05 | A | 6 | 6 | 5 |
2022-06 | B | 1 | 4 | 5 |
2022-01 | A | 5 | 6 | 7 |
2022-02 | B | 5 | 1 | 6 |
2022-03 | A | 7 | 5 | 4 |
2022-04 | B | 6 | 5 | 8 |
2022-05 | A | 4 | 7 | - |
2022-06 | B | 8 | 6 | - |
Örnek 5
Örnek kodu uygulamanıza ekleyin ve çalıştırın. Sonucu görmek için, sonuçlar sütununda listelenen alanları uygulamanızda bir sayfaya ekleyin.
T1:
Load * inline [
Quarter, Value
2003q1, 10000
2003q1, 25000
2003q1, 30000
2003q2, 1250
2003q2, 55000
2003q2, 76200
2003q3, 9240
2003q3, 33150
2003q3, 89450
2003q4, 1000
2003q4, 3000
2003q4, 5000
2004q1, 1000
2004q1, 1250
2004q1, 3000
2004q2, 5000
2004q2, 9240
2004q2, 10000
2004q3, 25000
2004q3, 30000
2004q3, 33150
2004q4, 55000
2004q4, 76200
2004q4, 89450 ];
T2:
Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal;
Load Quarter, sum(Value) as SumVal resident T1 group by Quarter;
Sonuç
Sonuç tablosuÇeyrek | SumVal | AccSumVal |
---|
2003q1 | 65000 | 65000 |
2003q2 | 132450 | 197450 |
2003q3 | 131840 | 329290 |
2003q4 | 9000 | 338290 |
2004q1 | 5250 | 343540 |
2004q2 | 24240 | 367780 |
2004q3 | 88150 | 455930 |
2004q4 | 220650 | 676580 |
Açıklama
Yükleme ifadesi Load *, rangesum(SumVal,peek('AccSumVal')) as AccSumVal, önceki değerlerin geçerli değere eklendiği yinelemeli bir çağrı içerir. Bu işlem, komut dosyasındaki bir değer toplamını hesaplamak için kullanılır.