Tableau LOD Master Class
Level of Detail (LOD) ifadeleri, görünümün granularitesinden bağımsız hesaplama yapmamızı sağlar. Bu sayfada gerçek Türk şirket isimleriyle (Trendyol, Migros, Garanti BBVA, Yemeksepeti, Akbank, Turkcell vb.) hayali ama somut iş senaryolarına dayalı toplam 18 örnek bulacaksın. Her örnek; iş bağlamı, veri büyüklüğü, formül, çalışma mantığı, tuzaklar ve performans notlarıyla birlikte.
1. Önce Temeli Sağlamlaştıralım
LOD ifadelerini doğru kullanmak için önce granularite kavramını oturtmamız gerekir. Bu bölümde adım adım gideceğiz: granularite nedir, LOD niçin doğdu, sözdizimini nasıl okuruz, üç türün arasındaki gerçek fark nedir ve aynı veride üç LOD’un nasıl farklı sonuç ürettiğini.
1.1 Granularite Nedir?
Granularite, “veriye hangi seviyede bakıyorum?” sorusunun cevabıdır. En ince granularite veritabanındaki satır seviyesidir (örn. “Sipariş + Ürün” satırı). Tableau’da bir görünüm (view) açtığında, raflara koyduğun boyutlar view’un granularitesini belirler. Ölçüler (Sales, Quantity vb.) o seviyeye göre toplanır.
| Sipariş | Müşteri | Ürün | Tutar |
|---|---|---|---|
| S-1 | Ali | Telefon | 15.000 |
| S-1 | Ali | Kılıf | 500 |
| S-2 | Ali | Mouse | 800 |
| S-3 | Veli | Klavye | 1.200 |
| Müşteri | Toplam Tutar |
|---|---|
| Ali | 16.300 |
| Veli | 1.200 |
Burada Tableau ham veriyi (sol tablo) Müşteri boyutuna göre toplayarak sağdaki agregat tabloyu üretti. “Granularite kalınlaştı” diyebiliriz: 4 satır → 2 satır. Buradaki 16.300 sayısı view granularitesinde anlamlıdır, ham veri seviyesinde böyle bir satır yoktur. LOD ifadeleri tam da bu noktada devreye girer: view’un granularitesini override etmek için.
1.2 Bir LOD İfadesinin Anatomisi
Tableau LOD ifadeleri her zaman süslü parantez içinde, beş parçadan oluşur. Bu kalıbı bir kez ezberlersen her LOD ifadesini aynı yapıyla okuyabilirsin:
{ FIXED : ... } de yazılır.1.3 LOD Niçin Var? Hangi Sorunu Çözer?
Tableau’nun varsayılan davranışı şudur: raflardaki boyutlar = view granularitesi. Bu çoğu zaman yeterlidir, ama belirli analiz tipleri bunu yetersiz bırakır. LOD’un çözdüğü 4 tipik problem:
Farklı Seviyelerin Karşılaştırılması
“Sipariş başına ortalama tutar” gibi metrikler — önce sipariş seviyesinde toplama, sonra üst seviyede ortalama almak gerekir. Tek seviyeli toplama bunu yapamaz.
Filtre Bağımsız Hesaplama
Cohort analizinde müşterinin “ilk sipariş tarihi”, view’a hangi yıl/ay filtresi konursa konsun değişmemeli. FIXED bu sabitliği sağlar.
Yüzde / Pay Hesaplamaları
“Şehrin bölge içindeki yüzde payı” — payda görünümdeki şehir granularitesinden bağımsız, bölge seviyesinde hesaplanmalı. EXCLUDE bunu zarif çözer.
Sıralama / Top-N Analizleri
“Top 10 müşteri” listesini sabitleyip yüzde, kategori, segment hesaplamaları yapmak. Tablo hesaplarıyla mümkün ama LOD daha kararlı sonuç verir.
1.4 Üç LOD Türü ve Mental Modelleri
Aynı SUM([Satış]) hesabını üç farklı LOD ile yazmak çok farklı sonuçlar üretir.
Her birinin kendine özgü “dünya görüşü” vardır — onları görsel bir mental modelle ezberlemek en kolay yol:
FIXED
{ FIXED [Müşteri] : SUM([Satış]) }- Cohort etiketi (ilk sipariş tarihi)
- CLV — yaşam boyu değer
- % of grand total / region
- Top-N listesi sabitleme
- Dimension filtreleri etkilemez (Context dışı)
- Yüksek kardinaliteli boyutta yavaşlar
EXCLUDE
{ EXCLUDE [Ay] : SUM([Satış]) }- % of category, % of region
- Aydan yıla, şehirden ülkeye sapma
- Aynı kıdem benchmark (ücret eşitliği)
- Çıkardığın boyut view’da yoksa etkisizdir
- Filtrelerden etkilenir (FIXED’ın aksine)
INCLUDE
{ INCLUDE [Sipariş] : SUM([Tutar]) }- Avg of avg (avg per customer per region)
- Sipariş başı sepet boyutu
- Çalışan başı iş yükü
- Şube günlük tekil müşteri
- Dış aggregate (AVG/MEDIAN/SUM) sonucu değiştirir
- Simpson Paradoksu — eşit ağırlık tehlikesi
1.5 Aynı Veri — Üç Farklı Cevap
Soyut tanımları somut görelim. Aşağıdaki mini veri kümesinde, view Bölge bazında. Aynı satışı dört farklı yolla hesaplayınca nasıl bambaşka sonuçlar ürettiğini incele:
| Bölge | Müşteri | Sipariş | Tutar |
|---|---|---|---|
| Marmara | Ali | S1 | ₺ 1.000 |
| Marmara | Ali | S2 | ₺ 500 |
| Marmara | Veli | S3 | ₺ 200 |
| Ege | Ayşe | S4 | ₺ 300 |
| Bölge | SUM(Tutar) default |
FIXED [Müşteri] : SUM |
EXCLUDE [Bölge] : SUM |
AVG(INCLUDE [Sipariş] : SUM) |
|---|---|---|---|---|
| Marmara | 1.700 | 1.500 / 200 | 2.000 | 567 |
| Ege | 300 | 300 | 2.000 | 300 |
- SUM(Tutar) — Tableau default; bölge bazında basit toplam.
- FIXED [Müşteri] — her müşteri için kendi tüm-zaman toplamı; Marmara’da Ali = 1.500, Veli = 200 (bölge etkilemiyor).
- EXCLUDE [Bölge] — bölgeyi çıkar = grand total (2.000) her satıra basılır. % of total hesabının paydası.
- AVG(INCLUDE [Sipariş]) — sipariş başı ortalama tutar; Marmara’da (1.000+500+200)/3 = 567; Ege’de tek sipariş 300.
Kritik çıkarım: “Hangi LOD’u kullanmalıyım?” sorusunun cevabı, “hangi seviyede toplama yapmasını istiyorum?” sorusuyla başlar. Bu üç türün arasındaki seçim, dashboard’unun matematiksel doğruluğunu doğrudan belirler.
2. İşlem Sırası (Order of Operations)
Tableau bir grafik/tablo üretirken sorguyu belirli bir boru hattında çalıştırır. Filtreler, LOD’lar ve table calculations bu hatta sıraya girer. Bu sırayı bilmek “FIXED’ım niye filtremden etkilenmiyor?” gibi soruların doğrudan cevabıdır ve dashboard’taki çoğu görünmez hatanın kaynağıdır.
2.1 11 Adımlı Tam Pipeline
Aşağıdaki dikey timeline en üstten en alta veri akışını gösterir. Mor halkalı (kritik) adımlar LOD davranışını doğrudan belirler.
Extract Filters
Hyper extract (.hyper) oluşturulurken row’ları elemek için uygulanan filtre. Veri fiziksel olarak extract dosyasına dahil edilmez. Hangi sorguyu çalıştırırsan çalıştır, bu filtre zaten uygulanmıştır — başka hiçbir filtre bunu geri getiremez.
Data Source Filters
“Data Source” sekmesinde tanımlanır. Live connection’da SQL WHERE clause’una eklenir.
Workbook içindeki tüm worksheet ve dashboard’larda aynı şekilde uygulanır;
worksheet bazında override edilemez.
Context Filters KRİTİK
“Add to Context” ile bir dimension filter’ı bir üst seviyeye yükseltirsin. Tableau bu noktada geçici (TEMP) tablo oluşturur ve FIXED LOD’lar bu temp tablo üzerinden çalışır. Yani Context, FIXED’ı etkileyebilen tek “view” filtresidir.
FIXED LOD KRİTİK
FIXED ifadeleri burada hesaplanır. Yalnızca üstündeki üç adımı (extract / source / context) görür; altındaki dimension/measure/table calc filtrelerini görmez. Cohort, CLV, peak month gibi “tarihsel sabit” hesaplar için doğru araçtır.
{ FIXED [Customer] : MIN([Order Date]) } —
yıl filtresi seçilse bile müşterinin gerçek ilk siparişi sabit kalır.Dimension Filters
Boyut alanlardan yapılan klasik filtreler (Region = “Marmara”, Date BETWEEN …). Quick Filter olarak shelf’e bıraktığında varsayılan olarak buraya düşer. Top N filtreleri ve Sets de bu adımdadır (içlerinde RANK çalışsa da bu seviyede uygulanırlar).
INCLUDE / EXCLUDE LOD KRİTİK
Dimension filter’lardan SONRA çalışır → bu LOD’lar filtre seçimlerini görür. FIXED’ın aksine, ay filtrelendiğinde INCLUDE/EXCLUDE de o aya göre yeniden hesaplanır. Çoğu zaman bu istediğimiz davranıştır; “filtre uygulanmış evren içinde yüzde / sapma” gibi.
Measure Filters
Ölçüler aggregate edildikten sonra uygulanan filtreler. SUM([Sales]) > 100000,
AVG([Discount]) <= 0.2 gibi. Tüm LOD'lar bu adımdan ÖNCE hesaplanmıştır;
dolayısıyla measure filter LOD sonuçlarını geriye dönük etkileyemez,
ama LOD üzerinden de filter yapılabilir.
Forecasts
Tableau'nun dahili exponential smoothing forecast motoru, var olan veri noktaları üzerine geleceğe yönelik tahminler ekler. LOD'lar bu adımdan önce yapıldığı için forecast LOD sonuçlarını da kullanabilir.
Table Calculations
RANK, INDEX, WINDOW_SUM, RUNNING_SUM, LOOKUP, FIRST, LAST gibi fonksiyonlar. Sorgu sonucu (yani üstteki tüm filtre/LOD adımlarının sonucu) hazır olduktan sonra çalışır. Sıralama ve görünüm bağlamına duyarlıdır — view'da sıralamayı değiştirmek table calc sonucunu değiştirir.
RUNNING_SUM(SUM([Sales])) / TOTAL(SUM([Sales])).
FIXED ile müşteri toplamını sabitle, RUNNING_SUM kümülatif yüzdeyi hesaplasın.Table Calc Filters
Bir table calc'ın sonucuna göre uygulanan filtre (örn. RANK ≤ 10 → ilk 10 göster). Tableau toplamı önce hesaplar, sonra istemediğin satırları gizler — bu yüzden grand total'lar, % of total gibi hesaplamalar gizlenen satırları da hâlâ görmüş olur. Subtle bir tuzak!
SUM([Sales]) toplamı 11+ müşteriyi de bilir.
Doğru % için payda olarak { FIXED : SUM([Sales]) } kullan.Trend Lines / Reference Lines / Totals
Tüm filtre ve hesaplamalardan sonra grafiğin üzerine eklenen kompozisyon öğeleri. Tableau'nun render motoru için son adım — analitik panelden eklenen ortalama çizgisi, polynomial trend, std deviation band'leri burada konumlanır.
2.2 Filtre × LOD Etki Matrisi
Hangi filtre türü hangi hesaplamayı etkiler? Bu matriste bir bakışta görebilirsin. ✓ = etkiler · ✗ = etkilemez · ~ = kısmi.
| Filtre Türü | FIXED LOD | EXCLUDE LOD | INCLUDE LOD | Table Calc | View Aggregate |
|---|---|---|---|---|---|
| Extract Filter | ✓ | ✓ | ✓ | ✓ | ✓ |
| Data Source Filter | ✓ | ✓ | ✓ | ✓ | ✓ |
| Context Filter | ✓ | ✓ | ✓ | ✓ | ✓ |
| Dimension Filter | ✗ | ✓ | ✓ | ✓ | ✓ |
| Measure Filter | ✗ | ✗ | ✗ | ✓ | ✓ |
| Table Calc Filter | ✗ | ✗ | ✗ | ~ | ~ |
~ Table calc filter sadece görünür satırları kısar (hide); alt-katmandaki TOTAL ve % hesaplamaları gizlenen satırları hâlâ görür.
2.3 "Filtremi Nereye Koymalıyım?" Karar Senaryoları
Aşağıdaki 5 senaryo gerçek dashboard'larda en sık karşılaşılan tuzaklardır. Her birinde "yanlış yerdeki filtre" görünmez bir hatadır:
FIXED ile rank etiketi tüm zamanlardan geliyordu. Year filter ekledin ama Top 10 listesi değişmedi.
Müşterinin "ilk sipariş tarihi" cohort'unu Ay filtresi değiştirdiğinde retention dashboard'um bozuluyor.
Region filter "Marmara" seçince "şehir / ülke" yerine "şehir / Marmara" istiyorum.
Bronze/Silver/Gold segmenti FIXED CLV ile hesaplanıyor. Measure filter ekledim, segment etiketleri doğru ama satır sayıları beklenenin üstünde.
Pareto'da "RANK ≤ 10" table calc filter kullanıyorum, % of total payda otomatik 10 ürünün toplamını alıyor.
{ FIXED : SUM([Sales]) } kullan.
Table calc filter HIDE eder ama LOD bunu görmez ve gerçek toplamı verir.
Bu, Pareto / contribution analizinde 1 numaralı best practice.
2.4 Pratik Cheat Sheet
Hızlı başvuru için 6 ana hata-çözüm: dashboard'larda tıkandığında bu listeyi kontrol et.
SUM(...)/SUM(...) yaz.{ FIXED : SUM(...) } kullan.MIN/MAX/AVG([LOD]) kullan; SUM çoğullar.3. 18 Gerçek Hayat Egzersizi
Sekmeler arasında geçiş yap, her örnek varsayılan olarak kapalıdır. Başlığa veya sağdaki Detay butonuna tıklayarak açabilirsin.
Trendyol — 2024 Q1 Müşteri Kohortu Geri Dönüş Analizi
{ FIXED [Customer ID] :
MIN([Order Date]) }
DATETRUNC('quarter', [İlk Sipariş Tarihi])
IF [Acquisition Cohort] = #2024-01-01# THEN [Sales] END
Neden FIXED?
2024 Q3 dashboard görüntüsünde kullanıcı Q3'te aktifse ama kazanım tarihi Q1'se,
onu Q1 kohortuna saymak gerekiyor. Normal MIN() dimension filtresine takılır,
"Q3 verisi içinde minimum tarih" verir → kohort kayar.
- Customer ID 12.5M kardinaliteye sahip — performans için extract'ı materyalize et.
- YEAR yerine
DATETRUNC('quarter')tercih et; çeyreklik kohort raporlama standardıdır.
| Customer ID | İlk Sipariş | Cohort | 2024 Toplam Harcama |
|---|---|---|---|
| TY-882431 | 2022-03-11 | 2022 Q1 | ₺ 14.300 |
| TY-993127 | 2024-02-08 | 2024 Q1 | ₺ 1.220 |
| TY-110045 | 2024-04-19 | 2024 Q2 | ₺ 870 |
Migros Sanal Market — Müşteri Yaşam Boyu Değeri (CLV) Segmentasyonu
{ FIXED [Customer ID] :
SUM([Sales]) }
IF [CLV] >= 25000 THEN "Platinum" ELSEIF [CLV] >= 10000 THEN "Gold" ELSEIF [CLV] >= 3000 THEN "Silver" ELSE "Bronze" END
Çalışma mantığı
- FIXED, Customer ID bazında tüm satırlara aynı toplamı dağıtır.
- Order ID'yi de görünüme düşürdüğünde CLV değişmez — çünkü FIXED sipariş seviyesinden değil müşteri seviyesinden hesaplanır.
SUM([CLV])demek yanlıştır: çoğullamaya yol açar.MIN/MAX/AVG([CLV])kullan.
Bronze %52 · Silver %31 · Gold %13 · Platinum %4 → ciroya katkıları sırasıyla %14 · %29 · %33 · %24.
Garanti BBVA — Şehrin Bölge İçi Kredi Kartı Pazar Payı
{ FIXED [Region] :
SUM([Card Spend]) }
SUM([Card Spend]) / SUM([Bölge Toplamı])
Filtre tuzağı
Şehir filtresi Add to Context'e alınmazsa pay yanlış hesaplanır. Ama tam burada FIXED'ın gücünü kullanırız: Marmara filtrelendiğinde dahi İstanbul, Marmara'nın %62'si bilgisini sabit tutmak istiyoruz → context'e ALMA.
- Region kardinalitesi düşük (7) → ucuz hesaplama.
- Müşteri segmenti (mass / affluent / private) eklendiğinde yine doğru çalışır.
MediaMarkt — Her SKU İçin Tarihsel Zirve Ay (Stok Planlama)
{ FIXED [SKU], DATETRUNC('month',[Order Date]) :
SUM([Quantity]) }
{ FIXED [SKU] :
MAX([Ürün-Ay Toplamı]) }
IF [Ürün-Ay Toplamı] = [SKU Peak Quantity] THEN "Peak Month" ELSE "-" END
Nested LOD
İki seviyeli zincir: önce SKU + Ay toplamı, sonra SKU seviyesinde bu aylık toplamların maksimumu. Tableau iç LOD'u önce çalıştırır, sonra dış LOD'u uygular.
- Top N filtresi koyacaksan SKU'yu Context'e ekle, aksi halde FIXED yine tüm SKU'lar üzerinden çalışır.
- Yıllık peak için
DATETRUNC('year', ...)'a değiştir.
Yemeksepeti — Tek Sefer ve Tekrarlayan Müşteri Ayrımı
{ FIXED [Customer ID] :
COUNTD([Order ID]) }
IF [Toplam Sipariş] = 1 THEN "One-time" ELSEIF [Toplam Sipariş] <= 5 THEN "Repeat" ELSE "Loyal" END
Niye tarih filtresi etkilememeli?
"2024 Ocak" filtrelendiğinde tek sipariş görünenleri tek-sefer saymak yanıltıcı olur. Kullanıcı 2023'te 12 sipariş vermiş olabilir. FIXED tarihten bağımsız tüm geçmişe bakar.
- YouFoody'de yapılan bir A/B test'te yanlış segmentasyon kampanya CTR'ını %38 düşürmüştür — gerçek bir tuzak.
- Promosyon hedeflemesi için One-time'lar push notification kohortuna düşer.
Türk Telekom Kurumsal — Top 50 Müşterinin Pareto Payı
{ FIXED [Customer ID] :
SUM([Revenue]) }
// Window calc — sıralama için RANK(SUM([Müşteri Toplam Cirosu]), 'desc')
SUM(IF [Müşteri Rank] <= 50 THEN [Revenue] END) / SUM([Revenue])
İki seviyeli zekâ
- FIXED: müşterinin tarihsel ciro etiketi → sıralama referansı.
- Window RANK: sıralama mantığı.
- Pay (Top50 cirosu) ile payda (toplam ciro) farklı kapsamlardan: pay = sabit liste, payda = filtreli dönem.
Vakıfbank — Aylık Harcamanın Yıllık İçindeki Payı
{ EXCLUDE MONTH([Tx Date]) :
SUM([Spend]) }
SUM([Spend]) / SUM([Yıllık Toplam])
Ayrıntı
Görünümde YEAR ve MONTH varken EXCLUDE MONTH dersek yalnızca yıl seviyesinde toplar; her ay satırına yıl toplamı dağıtılır.
WINDOW_SUMile de yapılabilir ama dashboard'da pencere yönü/kapsamı kayar; LOD daha kararlıdır.- Field formatını % yapmayı unutma.
LC Waikiki — Ürünün Kategori Cirosuna Katkısı
{ EXCLUDE [Product Name] :
SUM([Sales]) }
SUM([Sales]) / SUM([Kategori Toplamı])
FIXED ile farkı
FIXED [Category] da aynı görünür — ama Region eklendiğinde FIXED Region'ı yok sayar; EXCLUDE diğer boyutları korur.
"Görünümde olan diğer kırılımlardan etkilensin ama bu birinden değil" diyorsan EXCLUDE seç.
Yemeksepeti — Şehrin Ülke Ortalamasından Teslimat Süresi Sapması
{ EXCLUDE [City] :
AVG([Delivery Min]) }
AVG([Delivery Min]) - AVG([Ülke Ortalama Süre])
Renk paleti önerisi
- Diverging palet (kırmızı–yeşil) ile sıfır eşiğinde nötr renk kullan.
- Tooltip'e şehir, ülke ortalaması ve şehrin değerini birlikte koy.
Beklenen bulgu: İstanbul Anadolu +6 dk (yoğun trafik), Eskişehir –4 dk (kompakt şehir), Şanlıurfa +9 dk (kurye yetersiz).
BIM — Mağaza Günlük Cirosu vs Haftalık Ortalama
{ EXCLUDE [Order Date] :
AVG(
{ FIXED DATETRUNC('week',[Order Date]),
[Store ID] :
SUM([Sales]) }
)
}
(SUM([Sales]) - AVG([Haftalık Ort])) / AVG([Haftalık Ort])
IF ABS([Day vs Week %]) > 0.10 THEN "⚠ Anomaly" ELSE "OK" END
Nested LOD
İçerideki FIXED, mağaza × hafta toplamı. Dıştaki EXCLUDE gün boyutunu kaldırarak haftalık ortalamayı her güne yansıtır.
- Bayram günleri exclusion listesi tutarsan false positive azalır.
- Şampuan kampanyası gibi promosyonlar genelde +%15 sapma yaratır → flagging eşiği 10% gerçekçi.
Sabancı Holding İK — Departman İçi Ücret Eşitliği
{ EXCLUDE [Employee] :
AVG([Salary]) }
(AVG([Salary]) - AVG([Dept Avg])) / AVG([Dept Avg])
Niye EXCLUDE, FIXED değil?
Görünüme Title (Junior, Mid, Senior, Lead) eklediğinde FIXED bunu görmezden gelir; EXCLUDE ise Title bazında ortalama alır → "aynı kıdem-aynı departman" benchmark'ı oluşur. Bu, gerçek pay-equity raporunun standart yöntemidir.
Akbank — Müşteri Segmenti İçinde Şehir Ciro Payı
{ EXCLUDE [City] :
SUM([Revenue]) }
SUM([Revenue]) / SUM([Segment Toplamı])
Dashboard yorumu
- Heatmap'te şehirleri Y, segmenti X eksenine yerleştir.
- Renk olarak bu yüzdeyi kullan; her sütun (segment) kendi içinde 100% normalize görünür.
EXCLUDE [City], [Sub-Segment] kullanılabilir.Akbank — Bölge Bazında Müşteri Başına Ortalama Harcama
{ INCLUDE [Customer ID] :
SUM([Spend]) }
AVG([Customer Spend])
MEDIAN([Customer Spend])
Niye INCLUDE?
SUM([Spend]) / COUNTD([Customer ID]) aynı sonucu verir ama Category, Year vs. eklendiğinde tutarlılığı kaybedebilir.
INCLUDE ile "hesaplama daima müşteri bazında yapılsın, sonra ne agregat istersem onu uygulayayım" netliği gelir.
Hepsiburada — Kategori Bazında Sepet Boyutu (Basket Size)
{ INCLUDE [Order ID] :
SUM([Quantity]) }
AVG([Order Qty])
Sub-bag prensibi
Kategori birden fazla siparişi kapsar; INCLUDE Order ID seviyesinde toplam çıkarır, sonra dış AVG bunları kategoriye göre ortalama alır.
- Kestirme:
SUM([Quantity])/COUNTD([Order ID])→ ama LOD niyeti açıkça belgeler. - Median ile birlikte göstererek dağılımı anla; Kozmetik kategori medianı 3, mean'i 5.7 → kuyrukta büyük sepetler var.
Migros — Mağaza Bazında Günlük Ortalama Çalışan Sayısı
{ INCLUDE [Shift Date] :
COUNTD([Employee ID]) }
AVG([Daily Headcount])
Bağlam
- Görünüm Store, hesap günlük olmalı → INCLUDE
Shift Date. - COUNTD eşsiz çalışan sayar; aynı çalışan iki vardiya yapsa bile bir sayılır.
Turkcell PMO — Departman Çalışan Başına Aktif Proje
{ INCLUDE [Employee] :
COUNTD([Project ID]) }
AVG([Projects per Employee])
PERCENTILE([Projects per Employee], 0.95)
Yan analiz
P95 ile "top %5 en yüklü çalışan"ı yakalarsın; departman ortalaması 2.4 olabilir ama P95 8 ise burnout sinyali. Yan yana göstermek tek başına ortalamadan daha aydınlatıcıdır.
Ziraat Bankası — Şube Başına Günlük Tekil Müşteri (Footfall)
{ INCLUDE [Visit Date] :
COUNTD([Customer ID]) }
AVG([Daily Customers])
PERCENTILE([Daily Customers], 0.9)
Operasyonel zekâ
- Avg + P90 birlikte → "stabil" ve "patlayan" şubeleri ayırt edebilirsin.
- Pazar günü trafiği yoktur;
IF DATEPART('weekday')<>1filtresi koy. - Maaş günü (her ayın 15'i) tepe noktasıdır; ekstra personel kararı için P90 değeri esastır.
Teknosa — Ürün Sipariş Başı Adet ve Reorder Point
{ INCLUDE [Order ID] :
SUM([Quantity]) }
AVG([Order Qty])
AVG([Order Qty]) * [Lead Time Days] * 1.2 // %20 safety stock
İş zekâsı bonusu
1.2 katsayısı %20'lik güvenlik stoğu (safety stock) yansıtır. INCLUDE ile elde ettiğin gerçek "ortalama sipariş adedi" üzerine bu basit kural uygulamada çalışan bir reorder point üretir.
4. FIXED vs EXCLUDE vs INCLUDE — Hızlı Karşılaştırma
Aynı veride aynı ölçümü farklı LOD'larla yazdığında nasıl davranır?
| Özellik | FIXED | EXCLUDE | INCLUDE |
|---|---|---|---|
| Görünüm boyutlarından etkilenir mi? | Hayır | Kısmen (yalnızca belirtilen çıkarılır) | Evet (üstüne ekler) |
| Dimension filtresinden etkilenir mi? | Hayır (Context dışında) | Evet | Evet |
| Granularite | Tamamen sen belirlersin | Görünüm – belirttiklerin | Görünüm + belirttiklerin |
| Tipik kullanım | CLV, cohort, top-N, % of total | Yüzde paylar, sapma, benchmark | Avg of avg, kişi/sipariş başı metrikler |
| Performans riski | Yüksek kardinalite tehlikeli | Genelde ucuz | Genelde ucuz |
5. Hızlı Sınav
Arka planda 40 soruluk havuz var; her sayfa yenilemesinde rastgele 4 soru gelir. Sağdaki butonla yenilemeden de yeni 4 soru çekebilirsin.
6. Sıkça Yapılan Hatalar
- FIXED + dimension filter: Filtre etkisinin gelmesi gerektiğini fark etmemek → Filtreyi Context'e taşı.
- SUM içinde SUM: LOD zaten aggregate döner; dış aggregate olarak yine SUM almak çoğullamaya neden olur.
MIN/MAX/AVGuygundur. - Yüksek kardinalite FIXED: Customer × Order × Product gibi geniş seviyelerde performans çöker; mümkünse extract'ı materyalize et.
- EXCLUDE dimensiyonu görünümde yokken: EXCLUDE etkisiz olur; kullanmadan önce o boyutun rafalarda (en az Detail) olduğundan emin ol.
- Avg of avg yanılgısı (INCLUDE): Her grup eşit ağırlık almaz aslında; gerekiyorsa weighted average yaz.
- Date trunc unutmak:
FIXED [Order Date]her gün ayrı bir gruptur; ay seviyesinde istiyorsanDATETRUNC('month', ...)şart.

Bir Cevap Yazın