Window - komut dosyası fonksiyonu
Window(), birden fazla satırdan hesaplamalar yaparak her bir satır için ayrı bir değer üretir.
Aşağıdakiler gibi işlemleri yapmak için Window fonksiyonlarını kullanabilirsiniz:
-
Bir satırdaki tek bir sayı değerini sütundaki ortalama, maksimum veya minimum değerle karşılaştırma.
-
Tek bir değerin sütun içinde veya tablonun tamamında sıralamasını hesaplama.
Window fonksiyonu, tablodaki kayıt sayısını değiştirmez, ancak yine de toplama, ilişkisel ve aralık fonksiyonları gibi benzer görevleri gerçekleştirebilir.
Window fonksiyonu, tabloya eklemek için çalıştığınız tablonun LOAD deyiminde bir arabelleğe sahip olmalıdır. Örneğin:
Pencere, yuvarlama veya temel sayısal işlemler gibi genel fonksiyonları destekler. Örneğin:
Window fonksiyonu için bir kayar pencere tanımlayabilirsiniz. Bu, Window fonksiyonunu geçerli satıra uygularken kullanılacak satır sayısını ayarlar. Örneğin, pencereyi önceki 3 satır ve sonraki 3 satır olacak şekilde ayarlayabilirsiniz.
Söz Dizimi:
Dönüş veri türü: LOAD deyimi tarafından oluşturulan tabloya eklenen yeni bir alan.
Bağımsız Değişkenler:
Bağımsız Değişken | Açıklama |
---|---|
input_expr |
Giriş ifadesi, fonksiyon tarafından hesaplanır ve döndürülür. Bu, Median(Salary) gibi bir toplamaya dayanan herhangi bir ifade olmalıdır. Örneğin: Window(Median(Salary)) as MedianSalary
Giriş, toplama uygulanmamış bir alan adı da olabilir. Böyle bir durumda Window, bunu, Only() fonksiyonu o alana uygulanmış gibi işler. Örneğin: Window(Salary,Department) as WSalary
İsteğe bağlı olarak, bölmelere ayırmayı giriş ifadesiyle tanımlayabilirsiniz. Bölmelere ayırma, group by cümlesiyle elde edilen gruplama ile aynıdır; tek fark, sonucun girdi tablosuna yeni bir sütun olarak eklenmesidir. Bölmelere ayırma, girdi tablosunun kayıt sayısını azaltmaz. Birden fazla bölme alanı tanımlanabilir. Örnek:
LOAD
Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-6) as MAX_Sales_City_Last_6_Mos, Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland') + AddMonths(OrderDate,-6) as Avg_Sales_Portland_Last_6_Mos, Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300) + AddMonths(OrderDate,-12) as MAX_Sales_City_Last_12_Mos; LOAD City, Sales, OrderDate FROM [lib://:DataFiles/Sales Data.xlsx]FROM [lib://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
input_expr sonrasında herhangi bir sayıda bölme tanımlayabilirsiniz. Bölmeler, toplamalarla birlikte uygulanacak kombinasyonları tanımlayan alanlardır. Toplama, her bir bölmeyle ayrı olarak uygulanır. Örneğin: Window(Avg(Salary), Unit, Department, Country) as AvgSalary
Yukarıdaki bölmeler: Unit, Department ve Country. Bölmeler zorunlu değildir, ancak alanların uygun şekilde pencerelere ayrılması için gereklidir. |
sort_type, [sort_expr]] |
İsteğe bağlı olarak sıralama türünü ve sıralama ifadesini belirtin. sort_type iki değerden birine sahip olabilir:
sort_type tanımlarsanız bir sıralama ifadesi tanımlamanız gerekir. Bu, bir bölmedeki satırların sırasına karar veren ifadedir. Örneğin: Window(RecNo(), Department, 'ASC', Year)
Yukarıdaki örnekte, Year alanına göre artan şekilde sıralanan bölme içinde sonuçlar bulunmaktadır. Bilgi notuSıralama türü ve sıralama ifadesi öncelikle yalnızca RecNo ve WRank fonksiyonları ile gereklidir.
|
filter_expr |
İsteğe bağlı olarak bir filtre ifadesi ekleyin. Bu, kaydın hesaplamaya dahil edilmesinin gerekip gerekmediğine karar veren bir Boolean ifadesidir. Bu parametre tamamen atlanabilir ve sonuç, filtre bulunmaması olmalıdır. Örneğin: Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
İsteğe bağlı olarak, kayar pencere işlevi için bağımsız değişkeni ayarlayın. Kayar pencere için iki bağımsız değişken gereklidir:
Örneğin, önceki 3 satırı, geçerli satırı ve sonraki satırı dahil etmek istediyseniz: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) Tüm önceki satırları veya sonraki satırları belirtmek için Unbounded() fonksiyonunu kullanabilirsiniz. Örneğin, tüm önceki satırları, geçerli satırı ve sonraki satırı dahil etmek için: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Örneğin, geçerli satırdan üçüncü satırı ve tüm sonraki satırları dahil etmek için: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
Örnek - Toplama içeren bir alan ekleme
Örnek - Belirli değerler için filtrelenen bir toplama içeren bir alan ekleme
Örnek - Kayar pencere içeren bir alan ekleme
Sınırlamalar
Window aşağıdaki sınırlamalara sahiptir:
-
Window özellikle bellek kullanımı açısından kaynakları yoğun kullanan bir fonksiyondur.
-
Grafik ifadeleri Window öğesini desteklemez.
-
Window fonksiyonlarını diğer Window fonksiyonlarıyla iç içe geçiremezsiniz.
-
Window bir toplama işlevi içinde kullanılamaz.
-
Window öğesinin tablonun tamamını tarayabilmesi gerekir.
-
Kayar pencere işlevi kullanılırken WRank(), RecNo() ve RowNo(), Window ile birlikte kullanılamaz.