Window - Komut dosyası fonksiyonu
Window(), tam bir tablonun bir bölümünün (veya "penceresinin") birden fazla satırından hesaplamalar yapar ve her satır için tek bir değer üretir.
Aşağıdaki gibi işlemleri gerçekleştirmek için Window işlevlerini kullanabilirsiniz:
-
Bir satırdaki tek bir sayı değerini tablonun bir penceresindeki ortalama, maksimum veya minimum değerle karşılaştırma.
-
Pencere içinde veya tüm tablo içinde tek bir değerin sıralamasını hesaplama.
Window fonksiyonu tablodaki kayıt sayısını değiştirmez ancak yine de toplama, ilişkisel ve aralık işlevleriyle benzer görevleri yerine getirebilir.
Window işlevi, üzerinde çalıştığınız tablonun LOAD deyimine dahil edilmeli veya bir Yerleşik LOAD gibi tabloya referans vermelidir. Örneğin, bkz. Örnek - Toplama içeren bir alan ekleme.
Ad atlanabilir, ancak bu, alan adının Window işlev ifadesinin tamamına ayarlanmasıyla sonuçlanır. Örneğin, aşağıdaki örnekte AvgDepSalary:
Window fonksiyonuna bir alan adı verilmesi tavsiye edilir.
Window, yuvarlama veya temel sayısal işlemler gibi genel fonksiyonları destekler. Örneğin:
Window fonksiyonu tablonun tamamını tarar. Bellek tüketimi açısından, bu taramanın maliyeti tablodaki alan sayısı ile orantılıdır. Window fonksiyonunun üzerinde çalıştığı alanların yanı sıra az sayıda alana sahip bir tablo, her zaman çok sayıda alana sahip bir tabloya tercih edilir.
Tipik olarak, bir Window fonksiyonu, aynı toplama, bir Where cümlesi (filtre), bir Group by cümlesi (bölümleme) ve bir Order by cümlesi (sıralama) içeren benzer bir kod işlemine kıyasla 2-4 kat daha fazla bellek tüketir ve yeniden yükleme süresi 2-4 kat daha uzun sürer.
Söz Dizimi:
Veri türünü döndürür: Satır başına bir değer; bu değer başka bir ifadeyle birleştirilebilir veya başka bir ifadede kullanılabilir ya da doğrudan LOAD deyimi tarafından oluşturulan sonuç tablosuna eklenebilir.
Bağımsız Değişkenler:
Bağımsız Değişken | Açıklama |
---|---|
main_expr | Fonksiyon tarafından hesaplanan ve döndürülen ana giriş ifadesi. Bu, Median(Salary) gibi bir toplamaya dayalı herhangi bir ifade olmalıdır. Örneğin: Window(Median(Salary)) as MedianSalary İfade, toplama uygulanmamış bir alan adı da olabilir. Bu durumda Window, Only() işlevi o alana uygulanmış gibi davranır. Örneğin: Window(Salary) as WSalary Window(Sum(Avg(Salary))) veya Window(Sum(Window(Salary))) gibi iç içe toplamalar ya da iç içe pencere fonksiyonları içeren ifadelere izin verilmez. |
partition1, partition2 | main_expr sonrasında istediğiniz sayıda bölüm tanımlayabilirsiniz. Bölümler, toplamaların hangi kombinasyonlarla uygulanacağını tanımlayan alanlardır. Örneğin: Window(Avg(Salary), Department) as AvgDepSalary Bu, her departman için ortalama maaşı hesaplar. Birden fazla bölümleme parametresi sağlandığında, toplama işlemi her satıra benzersiz bir bölümleme alanı kombinasyonu ile uygulanır. Örneğin: Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry Bu, her bir ülkede her departman için ortalama maaşı hesaplar. İsveç'teki Pazarlama ve Kanada'daki Pazarlama gibi farklı ülkelerdeki yinelenen departmanlar farklı bölümler olarak ele alınacaktır. Bölümleme, group by cümlesiyle elde edilen gruplamaya benzer. Ancak bölümleme, giriş tablosuna kıyasla kayıt sayısını azaltmaz. |
sort_type, [sort_expr] | İsteğe bağlı olarak, sıralama türünü ve sıralama ifadesini belirtin. Bu, toplamanın gerçekleştirildiği sırayı tanımlar. sort_type sabit bir dizedir ve üç değerden birine sahip olabilir:
sort_type ASC veya DESC tanımlarsanız bir sıralama ifadesi tanımlamanız gerekir. sort_type NONE ile hiçbir sıralama ifadesi sağlanmamalıdır. Sıralama ifadesi, bir bölüm içindeki satırların sırasını belirler. Örneğin: Window(RecNo(), Department, 'ASC', Year) Yukarıdaki örnekte bölüm içindeki toplama, Yıl alanına göre artan şekilde sıralanır. Sıralama parametreleri, kayan pencerenin bir tabloyu işleme sırasını da etkiler. Örnek - Sıralanmış kayan pencereli bir alan ekleme |
filter_expr | İsteğe bağlı olarak, bir filtre ifadesi ekleyin. Bu, kaydın hesaplamaya dahil edilip edilmeyeceğine karar veren Boolean ifadesidir. filter_expr sağlanmışsa bir sıralama türü dahil edilmelidir. Herhangi bir sıralama türü tanımlanmamışsa bağımsız değişken bir filtre ifadesi yerine bir bölüm parametresi olarak yorumlanabilir. filter_expr parametresi tamamen atlanabilir veya doğru bir değer dahil edilebilir. Bunların her ikisi de hiçbir filtrenin kullanılmamasına neden olur, böylece hiçbir satır hariç tutulmaz. Örneğin: Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada Yukarıdaki Window ifadesi, Ülke alanının ABD veya Kanada olmadığı tüm satırları filtreleyerek bu satırları toplamadan hariç tutacaktır. Filtrelenen satırlar için hala çıktı değerleri olacaktır, ancak diğer tüm çıktı satırları gibi bunlar da yalnızca filtre tarafından hariç tutulmayan satırların toplu sonuçlarını içerecektir. |
start_expr,end_expr | İsteğe bağlı olarak, kayan pencere işlevselliği için bağımsız değişkenleri ayarlayın. Bu, birlikte toplanacak satır sayısını daha da sınırlar. Her çıktı satırı, yalnızca geçerli satırdan önceki ve sonraki bir dizi satırın (toplanmış) sonuçlarını içerecektir. Kayan pencere iki bağımsız değişken gerektirir (start_expr,end_expr). Bu bağımsız değişkenler sağlanmışsa sıralama türü atlanmamalıdır. Aksi takdirde, bağımsız değişkenler kayan pencere yerine bir bölüm parametresi olarak yorumlanabilir. start_expr,end_expr parametresi şunları içerir:
Örneğin, önceki 3 satırı, geçerli satırı ve sonraki satırı dahil etmek istiyorsanız: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment Önceki tüm satırları veya sonraki tüm satırları belirtmek için Unbounded() işlevini kullanabilirsiniz. Örneğin, önceki tüm satırları, geçerli satırı ve sonraki satırı dahil etmek için: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment Örneğin, geçerli satırdan sonraki üçüncü satırı ve sonraki tüm satırları dahil etmek için: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment Yukarıdaki örneklerde NONE sıralama türü, kodun bölüm argümanları ile sıralama türünden sonra gelen parametreler arasında ayrım yapabilmesi için sağlanmıştır. |
Örnek - Toplama içeren bir alan ekleme
Örnek - Belirli değerler için filtrelenmiş toplama içeren bir alan ekleme
Örnek - Kayan pencereli bir alan ekleme
Sınırlamalar
Window şu sınırlamalara sahiptir:
Window, özellikle bellek tüketimi açısından yoğun kaynak kullanan bir işlevdir.
Window, Qlik Sense Mobile uygulamasında desteklenmiyor.
Grafik ifadeleri Window öğesini desteklemez.
Window işlevlerini diğer Window işlevlerinin içine yerleştiremezsiniz.
Window bir toplama işlevinin içinde kullanılamaz.
Window, gruplama kriteri cümlesi içeren bir load deyiminde kullanılamaz.
Window öğesinin tüm tabloyu tarayabilmesi gerekir.
WRank(), RecNo() ve RowNo() kayan pencere işlevi kullanılırken Window ile birlikte kullanılamaz.
Kayan pencere fonksiyonu kullanıldığında, hesaplama süresi pencerenin boyutuyla birlikte artar. Büyük pencere boyutlarıyla birleştirilmiş büyük tablolardan genellikle kaçınılmalıdır.