Qlik Sense, güçlü veri görselleştirme ve analiz araçlarıyla iş zekâsı dünyasında öne çıkıyor. Ancak bu gücün arkasındaki en önemli yapı taşlarından biri: ifade dili (expression language) yani Qlik Sense’in “fx” fonksiyonları.
Bu yazıda, hem yeni başlayanlar hem de ileri düzey kullanıcılar için en kritik Qlik fx fonksiyonlarını ve kullanım örneklerini tek bir yerde topladım. Bu cheat sheet ile:
- Daha hızlı analiz yapabilir,
- Karmaşık hesaplamaları sadeleştirebilir,
- Set analizleriyle veri segmentasyonunu uçurabilirsin.
🔹 Temel Agregasyon Fonksiyonları
Fonksiyon | Açıklama | Örnek |
---|---|---|
Sum() | Toplam alma | Sum(Sales) |
Avg() | Ortalama | Avg(Profit) |
Count() | Sayım | Count(CustomerID) |
Min() / Max() | En küçük / en büyük | Min(Date) / Max(Sales) |
🔹 Koşullu İfadeler (If-Else Mantığı)
Fonksiyon | Açıklama | Örnek |
---|---|---|
If() | Koşul kontrolü | If(Sales > 1000, 'High', 'Low') |
Pick(Match(...)) | Çoklu eşleşme yapısı | Pick(Match(Status, 'New', 'Open', 'Closed'), 'Yeni', 'Açık', 'Kapalı') |
Alt() | Boşsa yedeği al | Alt(Name, 'Bilinmiyor') |
🔹 Set Analizi: Seçim Üzerinden Güçlü Kontroller
Set İfadesi | Açıklama | Örnek |
---|---|---|
{<Field=Value>} | Filtre uygulanmış seçim | Sum({<Region={'West'}>} Sales) |
{1} | Tüm seçimleri iptal eder | Sum({1} Sales) |
$ | Mevcut kullanıcı seçimi | Sum({$} Sales) |
Field-={'x'} | Hariç bırakma | Sum({<Region-={'East'}>} Sales) |
Field={'*'} | Null olmayan değerler | Count({<Customer={'*'}>} Customer) |
🔹 Tarih & Zaman Fonksiyonları
Fonksiyon | Açıklama | Örnek |
---|---|---|
Year(Date) | Yılı alır | Year(OrderDate) |
MonthName(Date) | Ay + yıl formatı | MonthName(Date) |
Today() | Bugünün tarihi | Today() |
InYearToDate() | YTD hesaplama | Sum({<Date={"=InYearToDate(Date, Today(), 0)"}>} Sales) |
AddMonths(Date, -1) | Ay kaydırma | AddMonths(Today(), -1) |
🔹 Metin ve String Fonksiyonları
Fonksiyon | Açıklama | Örnek |
---|---|---|
Len() | Karakter uzunluğu | Len(Name) |
Left() , Right() | Soldan/sağdan kırp | Left(ID, 3) |
SubField() | Parçalama | SubField(Email, '@', 1) |
Concat() | Alanları birleştir | Concat(Name, ', ') |
Upper() / Lower() | Büyük / küçük harf | Upper(City) |
🔹 Matematiksel Fonksiyonlar
Fonksiyon | Açıklama | Örnek |
---|---|---|
Round(x, y) | Yuvarlama | Round(Price, 0.1) |
Ceil() , Floor() | Yukarı / aşağı yuvarlama | Ceil(Total) |
Rand() | Rastgele sayı üretir | Rand() |
Mod() | Mod alma | Mod(ID, 2) |
🔹 Aggr() ve İleri Seviye İfadeler
Fonksiyon | Açıklama | Örnek |
---|---|---|
Aggr(Expression, Dimension) | Küme içinde hesaplama | Aggr(Sum(Sales), Customer) |
Rank() | Sıralama | Rank(Sum(Sales)) |
FirstSortedValue() | Sıralanmış ilk değer | FirstSortedValue(Customer, -Sales) |
RangeSum() | Toplam hesaplama | RangeSum(Col1, Col2) |
Above() / Below() | Önceki / sonraki satır | Above(Sum(Sales)) |
🔹 Arayüz için İfadeler (Renk, Dual vs.)
Fonksiyon | Açıklama | Örnek |
---|---|---|
ColorMix1() | Renk skalası | ColorMix1(Rank(Sum(Sales)), Red(), Green()) |
Dual() | Sayı ve metni birleştir | Dual('High', 3) |
If() + Color() | Koşullu boyama | If(Sales > 1000, Red()) |
🔹 Script Tarafı Örnekleri (Data Load Editor)
Fonksiyon | Açıklama | Örnek |
---|---|---|
LOAD , RESIDENT | Veri yükleme | LOAD * RESIDENT TempTable; |
LET , SET | Değişken tanımı | LET vToday = Today(); |
ApplyMap() | Mapping işlemi | ApplyMap('RegionMap', Country, 'Other') |
Peek() | Önceki satırı alır | Peek('Price', -1) |
AutoNumber() | Otomatik ID üretimi | AutoNumber(CustomerID) |
🔹 Pratik Kullanım Senaryoları
Top N + Diğerleri:
If(Rank(Sum(Sales)) <= 5, Customer, 'Others')
Bir önceki yıl ile karşılaştırma:
Sum({$<Year={$(=Max(Year)-1)}>} Sales)
Belirli filtreyi hariç tutmak:
Sum({$<Region=>} Sales)
Yılbaşı itibariyle bugüne kadar toplam satış:
Sum({<Date={"=InYearToDate(Date, Today(), 0)"}>} Sales)
🎯 En Çok Satan İlk 5 Ürün + “Diğerleri” Toplamı
Problem: Grafikte sadece en çok satan 5 ürünü görmek, geri kalanları “Diğer” altında toplamak istiyorum.
Çözüm: Rank()
ve If()
ile gruplama yap.
=If(Rank(Sum(Sales)) <= 5, ProductName, 'Diğerleri')
📉 Aylık Satış Değişim Yüzdesi (MoM)
Problem: Her ayın satış toplamını bir önceki ayla kıyaslayarak yüzde değişimi görmek istiyorum.
Çözüm: Above()
ile önceki ayı al, yüzde hesapla.
=(Sum(Sales) - Above(Sum(Sales)))/Above(Sum(Sales))
📈 Geçen Yıl Aynı Dönemle Kıyaslama (YoY)
Problem: Bu yılki satışları geçen yılın aynı dönemiyle karşılaştırmak istiyorum.
Çözüm: Set Analysis
ile yıl bazında filtreleme yap.
Sum({$<Year={$(=Max(Year)-1)}>} Sales)
🏆 Müşteri Başına Ortalama Satış (ve En Yüksek Müşteri)
Problem: Her müşterinin ortalama satışını görmek, en yüksek satış yapan müşteriyi işaretlemek istiyorum.
Çözüm: Aggr()
ile müşteri bazlı ortalama hesapla.
Aggr(Avg(Sales), CustomerID)
Not: En yüksek müşteriyi renkli göstermek için:
If(Rank(Aggr(Sum(Sales), CustomerID)) = 1, Red())
🧠 Dinamik KPI Kartı: Bugün, Bu Ay, Bu Yıl
Problem: Seçime göre (bugün, bu ay, bu yıl) değişen bir gösterge oluşturmak istiyorum.
Çözüm: If()
+ InMonthToDate()
+ InYearToDate()
If(vPeriod = 'Today',
Sum({<Date={"=$(=Date(Today()))"}>} Sales),
If(vPeriod = 'ThisMonth',
Sum({<Date={"=InMonthToDate(Date, Today(), 0)"}>} Sales),
If(vPeriod = 'ThisYear',
Sum({<Date={"=InYearToDate(Date, Today(), 0)"}>} Sales))))
🛠️ Satışlar %20 Düşen Müşterileri Tespit Et
Problem: Geçen yıla göre %20’den fazla düşüş yaşayan müşterileri bulmak istiyorum.
Çözüm: Aggr()
+ Set Analysis
+ If()
Aggr(
If(
(Sum({<Year={$(=Max(Year))}>} Sales) - Sum({<Year={$(=Max(Year)-1)}>} Sales)) /
Sum({<Year={$(=Max(Year)-1)}>} Sales) <= -0.2,
CustomerID
),
CustomerID
)
🧾Kullanıcı Bazlı Veri Kısıtlaması (Row-level Security)
Problem: Kullanıcının sadece kendi bölgesindeki verileri görmesini istiyorum.
Çözüm: Section Access + OSUser()
/ GetCurrentSelections()
ile eşleştirme.
Region = GetFieldSelections(UserRegion)
🔢 Çeyrek Bazlı YTD (QTD) Hesaplama
Problem: Çeyrek başından bugüne kadar olan toplamı hesaplamak istiyorum.
Çözüm: InQuarterToDate()
fonksiyonu.
Sum({<Date={"=InQuarterToDate(Date, Today(), 0)"}>} Sales)
🧮 Kullanıcı Seçimine Göre Dinamik Hesap
Problem: Seçime göre farklı hesaplama yapmak istiyorum.
Çözüm: Pick()
+ Match()
kombinasyonu.
Pick(Match(vMetric, 'Sales', 'Profit', 'Margin'),
Sum(Sales),
Sum(Profit),
Sum(Profit)/Sum(Sales))
💼 Performansı Düşen Satıcılar
Problem: Son 3 ayın ortalamasına göre bu ay satışları düşen satıcıları listelemek.
Çözüm: RangeAvg()
, Above()
, If()
kombinasyonu.
If(
Sum(Sales) < RangeAvg(Above(Sum(Sales), 1, 3)),
'Performans Düşüşü', 'Stabil'
)
📆 Haftalık Toplamlar (Pazar Günü Bitişli)
Problem: Her hafta Pazar günü biten haftalık toplama ihtiyacım var.
Çözüm: WeekEnd()
fonksiyonu.
Sum({<Date={"=WeekEnd(Date)=WeekEnd(Today())"}>} Sales)
📊 Mode (En Sık Tekrarlanan Değer)
Problem: Bir ürün kategorisinde en çok tekrarlanan ürün ya da müşteri şehri gibi bilgileri bulmak istiyorum.
Çözüm: Qlik’te doğrudan Mode()
fonksiyonu yok, ancak Aggr()
+ FirstSortedValue()
ile çözümleyebiliriz.
FirstSortedValue(
DISTINCT [ProductName],
-Aggr(Count([ProductName]), [ProductName])
)
🪙 Medyan (Ortanca)
Problem: Aykırı değerlerden etkilenmeyen bir ortalama türü olan medyanı görmek istiyorum.
Çözüm: Median()
fonksiyonu doğrudan kullanılabilir.
Median(Sales)
Alternatif: Her müşteri için ayrı ayrı satış medyanı hesaplamak:
Aggr(Median(Sales), CustomerID)
🧮 Standart Sapma (Volatilite Tespiti)
Problem: Satış performansındaki oynaklığı ölçmek istiyorum.
Çözüm: Stdev()
fonksiyonu ile varyansın karekökü hesaplanır.
Stdev(Sales)
Senaryo: Belirli bir standardın üzerindeki oynaklığa sahip satışçılar:
If(Stdev(Aggr(Sales, SalesRep)) > 1000, 'Volatil', 'Stabil')
📉 Korelasyon Analizi (Varsa)
Not: Qlik Sense’de doğrudan Corr()
gibi korelasyon fonksiyonu script tarafında yapılmalıdır.
Script Tarafı Örnek:
LOAD
Sales,
MarketingSpend,
(Sales - AvgSales)*(MarketingSpend - AvgMarketingSpend) as CrossProduct,
(Sales - AvgSales)^2 as SalesDev,
(MarketingSpend - AvgMarketingSpend)^2 as MarketDev
RESIDENT Data;
Corr =
Sum(CrossProduct) /
Sqrt(Sum(SalesDev)*Sum(MarketDev));
Bu işlem, Scatter plot + trend çizgisi ile daha sezgisel gösterilebilir.
🧠 Z-Skoru Hesaplama (Outlier Detection)
Problem: Normalden sapmış satışları bulmak istiyorum.
Çözüm: Z-score = (X – μ) / σ
Sum(Sales) - Avg(TOTAL Sales)) / Stdev(TOTAL Sales)
Eğer Z-skora göre satış z > 2 ise aykırı kabul edilebilir.
🧮 Percentile (Yüzdelik Dilimler)
Problem: Ürünleri satışlarına göre ilk %10, %25, %50 gibi dilimlere ayırmak istiyorum.
Çözüm:
Fractile(Sales, 0.1) // İlk %10 eşiği
Fractile(Sales, 0.5) // Medyan
Fractile(Sales, 0.9) // İlk %90 eşiği
Segmentasyon için:
If(Sales > Fractile(Sales, 0.9), 'En İyi %10',
If(Sales > Fractile(Sales, 0.75), 'İyi',
If(Sales > Fractile(Sales, 0.5), 'Orta', 'Düşük')))
🔀 Regression Trend Çizgisi (Scatter Plot İçin)
Problem: Satış ve harcama arasındaki ilişkiyi tahmin çizgisi ile göstermek istiyorum.
Çözüm: Scatter chart üzerinde “Trendline: Linear” seçeneğini aç.
Alternatif olarak:
Line slope:
Sum(X*Y) - Count(X)*Avg(X)*Avg(Y) / (Sum(X^2) - Count(X)*Avg(X)^2)
Intercept:
Avg(Y) - slope*Avg(X)
Ancak bu işlemler genelde ETL veya script tarafına uygundur. Qlik içinde R veya Python entegrasyonu varsa bu işlemler doğrudan yapılabilir.
📅 Moving Average (Hareketli Ortalama)
Problem: Günlük ya da haftalık değerlerde oynaklığı azaltmak istiyorum.
Çözüm:
RangeAvg(
Above(Sum(Sales), 0, 3)
)
Son 3 periyodun ortalaması alınır (bu, 3’lük hareketli ortalamadır).
🎯 Dinamik Benchmark Kıyaslaması
Problem: Aylık ortalamanın altındaki günleri veya mağazaları göstermek.
Çözüm:
If(Sum(Sales) < Avg(TOTAL <Month> Sales), 'Hedef Altı', 'Üzeri')
🔬 Varyans (Farklılık Derecesi)
Problem: Satışlardaki çeşitlilik veya dengesizlik oranını görmek istiyorum.
Çözüm:
Var(Sales) // Standart sapmanın karesi
🎚️ Çapraz Segmentasyon + Skorlamalı Etiketleme
Problem: Satış ve müşteri sayısı yüksek olanları “Yüksek Değerli”, ikisi de düşük olanları “Düşük Potansiyel” olarak sınıflamak.
Çözüm:
If(Sum(Sales) > Avg(TOTAL Sales) and Count(CustomerID) > Avg(TOTAL <Product> Count(CustomerID)),
'Yüksek Değerli',
'Diğer')
✅ Anomali Tespiti için Otomatik Skor Üretimi
Yöntem 1: Z-Skoru ile Anomali Tespiti (Script)
LOAD
*,
(Sales - Avg(Sales)) / Stdev(Sales) as ZScore,
If(Abs((Sales - Avg(Sales)) / Stdev(Sales)) > 2, 'Anomali', 'Normal') as AnomalyFlag
RESIDENT SalesTable;
Yöntem 2: IQR (Interquartile Range) ile Anomali
// Qlik'te doğrudan Fractile hesaplama
Fractile(Sales, 0.75) - Fractile(Sales, 0.25) as IQR
Script kısmında manuel IQR bandı (Q3 + 1.5*IQR) belirlenip flag atanabilir.
MEASURE ÖRNEKLERİ
🔹 Klasik KPI / Özet Measure’lar
Sum(Sales)
Avg(Sales)
Count(Distinct CustomerID)
Max(Sales)
Min(Sales)
Sum(Profit) / Sum(Sales)
→ Kar marjı (%)Avg(OrderValue)
Sum(Quantity)
Count(OrderID)
Sum(Sales) / Count(Distinct OrderID)
→ Sipariş başı satış
🔹 Zaman Bazlı Measure’lar
Sum({<Year={'$(=max(Year))'}>} Sales)
→ Son yıl satışSum(Sales) - Above(Sum(Sales))
→ Aylık değişimRangeAvg(Above(Sum(Sales), 0, 3))
→ Son 3 ay ortalamaSum(Sales) / Sum(TOTAL Sales)
→ Pazar payı (%)Sum({<Month={'Jan'}>} Sales)
→ Ocak ayı satışları
🔹 Segment Bazlı Measure’lar
Sum({<CustomerSegment={'Premium'}>} Sales)
Count({<Churned={'Yes'}>} CustomerID)
Sum({<Region={'EMEA'}>} Sales)
Avg({<CustomerSatisfactionScore={">=8"}>} NPS)
Count({<RiskFlag={'High'}>} CustomerID)
🔹 İstatistiksel Measure’lar
Mode(Sales)
→ En sık görülen satış değeriMedian(Sales)
Stdev(Sales)
Fractile(Sales, 0.9)
→ 90. percentileZTest(Sales)
(SSE ile dışarıdan yapılmalı)Correlation(Sales, MarketingSpend)
(SSE ile)
🔹 Müşteri Davranışı & Sadakat Measure’ları
Avg(OrdersPerCustomer)
Count({<RepeatCustomer={'Yes'}>} CustomerID)
Sum({<IsNewCustomer={'Yes'}>} Sales)
Avg(DaysSinceLastPurchase)
Sum(Revenue) / Count(Distinct CustomerID)
→ Customer Lifetime Value
🔹 RFM / Davranışsal Measure’lar
Max(PurchaseDate) - Today()
→ Recency (gün)Count(OrderID)
→ FrequencySum(Sales)
→ MonetaryIf(Recency <= 30 and Frequency >= 5, 'Loyal', 'At-Risk')
→ Segment sınıflaması
🔹 Anomali & Uç Değer Ölçümleri
If(Sales > 2*Stdev(TOTAL Sales), 'Anomaly', 'Normal')
ZScore = (Sales - Avg(Sales)) / Stdev(Sales)
Count({<AnomalyFlag={'Yes'}>} OrderID)
If(Sales < Fractile(Sales, 0.05), 'Low Outlier')
If(Sales > Fractile(Sales, 0.95), 'High Outlier')
🔹 Performans, Hedef & Benchmark Measure’lar
Sum(Sales) / Sum(TargetSales)
→ Performans oranı (%)If(Sales >= Target, 'Target Met', 'Underperforming')
Rank(Sum(Sales))
Avg(Sales) - Avg(PeerSales)
Sum(ConversionCount) / Sum(Traffic)
→ Conversion rate
🔹 Zaman Serisi & Trend Göstergeleri
Slope(Above(Sum(Sales), 0, 12))
→ 12 aylık eğilimMovingAvg = RangeAvg(Above(Sum(Sales), 0, 3))
YoY = Sum({<Year={"$(=Max(Year))"}>} Sales) - Sum({<Year={"$(=Max(Year)-1)"}>} Sales)
GrowthRate = (Sum(CurrentSales) - Sum(PreviousSales)) / Sum(PreviousSales)
SeasonalIndex = Sum(MonthSales) / Avg(Sum(MonthSales))