RANKX
Ürün Sırası = RANKX(ALL(Urunler[Urun]), [Net Satış])
RANKX(tablo, ifade) tablodaki her satır için ifadeyi hesaplar, sonra geçerli bağlamdaki değerin bu listede kaçıncı olduğunu bulur. ALL burada şarttır: görselin satır filtresi kalırsa tabloda tek ürün kalır ve her ürün 1. olur.
İsteğe bağlı bağımsız değişkenler: RANKX(tablo, ifade, , ASC) küçükten büyüğe; son bağımsız değişken DENSE olursa eşitliklerden sonra numara atlanmaz: iki ürün 1. ise sıradaki 3. değil 2. olur.
IF(HASONEVALUE(Urunler[Urun]), RANKX(...)) ya da ISINSCOPE ile yalnızca ürün düzeyinde göster.TOPN
İlk 5 Ürün Satışı = CALCULATE([Net Satış], TOPN(5, ALL(Urunler[Urun]), [Net Satış]))
TOPN(n, tablo, sıralamaİfadesi) en yüksek n satırı tablo olarak döndürür. CALCULATE içinde filtre olarak kullanılınca “yalnızca bu ürünler” anlamına gelir.
Görselde ilk N
Kod yazmadan da yapılabilir: Filtreler bölmesinde ürün alanını seç → Filtre türü: İlk N → 5 → Değere göre: Net Satış. Ama ölçüyle yapılan ilk N, kart ve KPI gibi her görselde kullanılabilir.
Eşitlikler ve sıralama türleri
| Net satış | RANKX (varsayılan, SKIP) | RANKX(..., DENSE) |
|---|---|---|
| 900 | 1 | 1 |
| 700 | 2 | 2 |
| 700 | 2 | 2 |
| 500 | 4 | 3 |
Yarışma sıralaması için SKIP, “kaçıncı fiyat düzeyi” gibi sorular için DENSE kullanılır. Yeni RANK fonksiyonu (pencere fonksiyonları ailesi) eşitliği ikinci bir sıralama sütunuyla bozabilir: RANK(ALL(Urunler[Urun]), ORDERBY([Net Satış], DESC, Urunler[Urun], ASC)).
Seçime göre sıra: ALLSELECTED
Seçimdeki Sıra =
IF(
HASONEVALUE(Urunler[Urun]),
RANKX(ALLSELECTED(Urunler[Urun]), [Net Satış])
)
ALL tüm ürünler arasındaki sırayı verir; dilimleyicide yalnızca Elektronik seçiliyse bile “Kulaklık 7. sırada” der. ALLSELECTED ise yalnızca seçili ürünler arasında sıralar: Elektronik içinde 2. Hangisinin doğru olduğu soruya bağlıdır; başlıkta hangisini gösterdiğini yaz.
Kategori içinde sıra
Kategori İçi Sıra =
IF(
HASONEVALUE(Urunler[Urun]),
RANKX(ALLEXCEPT(Urunler, Urunler[Kategori]), [Net Satış])
)
ALLEXCEPT ürün filtresini kaldırır ama kategori filtresini korur: her ürün kendi kategorisindeki diğer ürünlerle yarışır.
Bağlar: kim beşinci?
Satış ekibi “sipariş sayısına göre ilk 5 ürün” listesini prim hesabında kullanacak. Liste beşinci sırada bir bağla karşılaşıyor:
| Ürün | [Sipariş Sayısı] | RANKX (varsayılan, SKIP) | RANKX (DENSE) | Bağ bozmalı |
|---|---|---|---|---|
| Nemlendirici Krem | 55 | 5 | 5 | 5 |
| Dudak Balmı | 55 | 5 | 5 | 6 |
| Yün Atkı | 54 | 7 | 6 | 7 |
| İstatistiğe Giriş | 53 | 8 | 7 | 8 |
| Basic Tişört | 53 | 8 | 7 | 9 |
| Suç ve Ceza | 53 | 8 | 7 | 10 |
“İlk 5” filtresi SKIP sıralamasıyla 6 ürün döndürür (iki tane 5.), DENSE ile ise 9 ürün (7. sıraya kadar 6 sıra numarası var). İş kuralı bir bağ bozucu ister: “Eşitlikte cirosu yüksek olan önde.” RANKX’te bunun en sade yolu, ikinci ölçüyü ilk ölçüye küçük bir ağırlıkla eklemektir:
Bağ Bozmalı Sıra =
IF(
HASONEVALUE(Urunler[Urun]),
RANKX(ALL(Urunler[Urun]), [Sipariş Sayısı] * 1000000 + [Net Satış])
)
Çarpan, ikinci ölçünün alabileceği en büyük değerden büyük olmalı. Bu modelde bir ürünün net satışı 102.000 ₺’yi geçmiyor, 1.000.000 güvenli. Çarpan küçük kalırsa ciro sipariş farkını ezer ve sıra bozulur. Okunurluk istiyorsan Pencere fonksiyonları dersindeki RANK + ORDERBY kalıbı aynı işi açıkça yapar.
Satışı olmayanlar da sıralanır
40 üründen 2’si (Koşu Bandı ve Gurme Lokum Kutusu) hiç satmamış. RANKX ikisine de 39 verir; tabloda “39. sırada” iki ürün görünür. Çoğu raporda bu satırlar gizlenmeli:
Satışlı Ürün Sırası = IF(NOT ISBLANK([Net Satış]), RANKX(ALL(Urunler[Urun]), [Net Satış]))
TOPN dış bağlamda değerlendirilir
Temel bölümdeki İlk 5 Ürün Satışı ölçüsü tüm şirkette 315.381 ₺ verir. Aynı ölçüyü kategori satırlarına koyunca ne olur? TOPN’in içindeki [Net Satış], kategori filtresi altında hesaplanır. Başka kategorilerin ürünleri o hücrede BLANK değer alır. Sonuçta TOPN o kategorinin ilk 5 ürününü seçer. Elektronik satırında “Elektronik’in ilk 5’i” görürsün, “şirketin ilk 5’inden Elektronik’e düşenler” değil.
İlk 5 Dışı Satış = [Net Satış] - CALCULATE([Net Satış], TOPN(5, ALL(Urunler[Urun]), [Net Satış]))
Bu ölçü Elektronik’te 68.487 ₺ verir, Hediye, Kozmetik ve Spor’da 0. Bu üç kategoride satışı olan ürün sayısı zaten 5 ya da daha az. Hangisini istediğini bil: kategori içi ilk N ise bu davranış doğru; şirketin ilk N’i ise listeyi kategori filtresi kaldırılmış bir bağlamda hesaplamalısın.
Top N + Diğer
Yönetim kurulu sunumunda 40 çubuklu grafik yerine “ilk 5 ürün + Diğer” isteniyor. Sorun: Diğer bir ürün değil, ürün ekseninde böyle bir değer yok. Çözümün iki parçası var:
- Eksen tablosu:
UrunlerVeDiger, 40 ürün adına bir “Diğer” satırı eklenmiş 41 satırlık bağlantısız bir tablo. Grafiğin eksenine bu tablonunUrunsütunu konur. - Ölçü: hazır
[Satış (Top N + Diğer)]ölçüsü her eksen değeri için karar verir. Değer ilk N’deyse o ürünün satışını, “Diğer” ise genel toplam eksi ilk N toplamını döndürür, kalan ürünler için BLANK döndürür ve çubuk görünmez.
N = 5 iken grafik şöyle görünür: 27" Monitör 101.986 ₺, Akıllı Saat 61.757 ₺, Türk Kahvesi Makinesi 53.963 ₺, Robot Süpürge 49.494 ₺, Kamp Çadırı 48.181 ₺ ve Diğer 935.391 ₺. Sağlama: ilk 5’in toplamı 315.381 ₺ + Diğer 935.391 ₺ = 1.250.772 ₺, yani [Net Satış]’ın tamamı. Grafik hiçbir satışı kaybetmez.
Dinamik N
TopNSecim tablosu 3’ten 15’e kadar N değerlerini tutar. Bu tabloyu bir dilimleyiciye koyarsın, ölçü SELECTEDVALUE(TopNSecim[N], 5) ile seçimi okur; seçim yoksa 5 kullanır. Kullanıcı 10 seçerse Diğer 727.113 ₺’ye iner.
ALLSELECTED, ya da yalnızca satışı olanlar), sıra numarasını görselde değil yalnızca gereken sayfada kullan ve süreyi Performans Analizi (Performance analyzer) ile ölç.