Peek - kod fonksiyonu
Peek(), bir tablodaki bir alanın zaten yüklenmiş bir satırının değerini döndürür. Satır numarası belirtilebilir (tabloda olduğu gibi). Satır numarası belirtilmezse, daha önce yüklenmiş son kayıt kullanılır.
peek() fonksiyonu çoğu ez daha önce yüklenmiş bir tablonun ilgili sınırlarını; yani belirli bir alanın ilk ve son değerlerini bulmak için kullanılır. Çoğu durumda bu değer daha sonra örneğin bir do-while döngüsünde kullanılmak üzere bir değişkende saklanır.
Söz Dizimi:
Peek(
field_name
[, row_no[, table_name ] ])
Dönüş verileri türü: dual
Bağımsız Değişkenler:
Bağımsız Değişken | Açıklama |
---|---|
field_name | Döndürülen değerin gerekli olduğu alanın adı.Giriş değeri bir dize (örneğin, tırnak içine alınmış bir değişmez değer) olarak verilmelidir. |
row_no |
Tabloda alanın zorunlu olduğunu belirten satır. Bir ifade olabilir, ancak tamsayıya çözümlenmelidir. 0 ilk kaydı ve 1 ikinci kaydı gösterir ve bu böyle devam eder. Negatif sayılar tablonun sonundan itibaren sırayı belirtir. -1 değeri, okunan son kaydı gösterir. row_no belirtilmezse -1 olduğu varsayılır. |
table_name | Sonunda iki nokta üst üste olmayan tablo etiketi. table_name belirtilmezse geçerli tablo olduğu varsayılır. LOAD deyimi dışında kullanılırsa veya başka bir tabloya referansta bulunursa, table_name dahil edilmelidir. |
Sınırlamalar:
Fonksiyon yalnızca zaten yüklenmiş olan kayıtlardan değerler döndürebilir. Bu; bir tablonun ilk satırında row_no olarak -1 kullanan bir çağrı NULL döndürür.
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.
Ç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.
Create a table in a sheet in your app with ID, List, and Value as the dimensions.
Kimlik | 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.
Ö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.
Amount | 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.
Sonuç
Ay | 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.
Sonuç
Ç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.