Her İşletme Kullanıcısının Bilmesi Gereken DAX Formülleri

Power BI için 20 temel DAX formülünde uzmanlaşın. HESAPLAMA, zaman zekası, RANKX, bağlam geçişi, yineleyiciler ve pratik iş örnekleri.

E
ECOSIRE Research and Development Team
|17 Mart 202614 dk okuma3.1k Kelime|

Data Analytics & BI serimizin bir parçası

Tam kılavuzu okuyun

Her İşletme Kullanıcısının Bilmesi Gereken DAX Formülleri

DAX (Veri Analizi İfadeleri), Power BI'ı basit bir grafik aracından tam teşekküllü bir analitik motora dönüştüren formül dilidir. Power BI'ın sürükle ve bırak arayüzü temel toplamaları yönetirken, gerçek iş zekası DAX'ı gerektirir. Yıldan yıla karşılaştırmalar, yuvarlanan ortalamalar, sıralamalar, olası senaryolar ve karmaşık KPI'ların tümü DAX formüllerine bağlıdır.

Buradaki zorluk, DAX'in aldatıcı derecede basit görünmesine rağmen deneyimli Excel kullanıcılarını bile şaşırtacak şekilde davranmasıdır. Filtre bağlamı, satır bağlamı ve bağlam geçişi kavramları DAX'a özgüdür ve Excel veya SQL'de doğrudan eşdeğeri yoktur. Bu kılavuz, anında uyarlayabileceğiniz gerçek dünyadan örneklerle, iş kullanıcıları için en pratik 20 DAX formülüne odaklanmaktadır.


Temel Çıkarımlar

  • HESAPLAMA en önemli tek DAX işlevidir --- filtre bağlamını değiştirir ve önemsiz olmayan ölçümlerin yüzde 80'inden fazlasında kullanılır
  • Zaman zekası işlevleri (TOTALYTD, SAMEPERIODLASTYEAR, DATEADD), modelde bu şekilde işaretlenmiş uygun bir tarih tablosu gerektirir
  • VAR/RETURN sözdizimi karmaşık ölçümleri okunabilir hale getirir ve gereksiz hesaplamaları önler
  • Yineleyici işlevler (SUMX, AVERAGEX, RANKX) ifadeleri satır satır değerlendirirken toplayıcılar (SUM, AVERAGE) sütunlar üzerinde çalışır
  • Bağlam geçişi, hesaplanan bir sütun veya yineleyici bir ölçü çağırdığında satır bağlamını filtre bağlamına dönüştürdüğünde meydana gelir
  • SWITCH(TRUE(), ...), iç içe geçmiş IF ifadelerinin yerine geçer ve çok daha okunabilirdir
  • ALL, ALLEXCEPT ve REMOVEFILTERS hangi filtrelerin etkin olduğunu kontrol eder - ancak RLS etkilerine karşı dikkatli olun

Temel: Filtre İçeriği ve Satır İçeriği

Formüllere dalmadan önce bu iki kavramı anlamak çok önemlidir. DAX'taki her karışıklığın kökeni filtre bağlamı ve satır bağlamına kadar uzanır.

Filtre İçeriği

Filtre bağlamı, bir hesaplamaya uygulanan filtreler kümesidir. Dilimleyicilerden, görsel filtrelerden, sayfa filtrelerinden, rapor filtrelerinden ve RLS'den gelir. Satırlarında "Yıl" ve sütunlarında "Bölge" bulunan bir matris görseline bir hesaplama yerleştirdiğinizde, her hücrenin benzersiz bir filtre bağlamı olur: (Yıl = 2025, Bölge = Kuzey Amerika), (Yıl = 2025, Bölge = EMEA) vb.

Her DAX toplama işlevi (SUM, AVERAGE, COUNT, MIN, MAX) geçerli filtre bağlamı içinde değerlendirme yapar. 2025 + Kuzey Amerika'ya göre filtrelenmiş bir hücredeki SUM(Sales[Revenue]) yalnızca her iki koşulla eşleşen gelir satırlarını toplar.

Satır İçeriği

Satır bağlamı, hesaplanan sütunların ve yineleyici işlevlerin içinde bulunur. "Geçerli satır" anlamına gelir. Satış tablosundaki hesaplanan bir sütunda, Sales[Revenue] * Sales[Quantity] her satırı ayrı ayrı değerlendirir.

Bağlam Geçişi

Bir yineleyici işlevi (SUMX gibi) bir ölçü çağırdığında, satır bağlamı otomatik olarak filtre bağlamına dönüştürülür. Buna bağlam geçişi denir. Güçlüdür ancak yanlış kullanıldığında performans sorunlarına neden olabilir.

-- Row context exists here (iterating over Products)
Revenue Per Product =
SUMX(
    Products,
    [Total Revenue]  -- This measure is evaluated in filter context
                     -- where the current product's ID filters the Sales table
)

Bu kavramları anlamak her DAX formülünü sezgisel hale getirir. Bunlar olmadan DAX formülleri kara kutular gibi görünür.


20 Temel Formül

1. HESAPLAMA — Filtre Bağlamını Değiştirin

HESAPLAMA en önemli DAX işlevidir. Bir ifadeyi değiştirilmiş bir filtre bağlamında değerlendirir.

Sözdizimi: CALCULATE(expression, filter1, filter2, ...)

Örnek: Yalnızca büyük siparişlerden elde edilen gelir

Large Order Revenue =
CALCULATE(
    SUM(Sales[Revenue]),
    Sales[OrderTotal] > 10000
)

Örnek: Belirli bir ürün kategorisinden elde edilen gelir

Electronics Revenue =
CALCULATE(
    SUM(Sales[Revenue]),
    Products[Category] = "Electronics"
)

HESAPLA, belirtilen sütundaki mevcut filtrenin yerini alır. Bir dilimleyici Kategoriyi zaten "Giyim" olarak filtreliyorsa Elektronik Gelir ölçümü bu dilimleyiciyi yok sayar ve CALCULATE kategori filtresini geçersiz kıldığından Elektronik gelirini gösterir.

2. FİLTRE — Satır Düzeyinde Filtreleme

FILTER, bir koşula göre filtrelenmiş bir tablo döndürür. Basit bir sütun karşılaştırması olarak ifade edilemeyen karmaşık filtreleme için genellikle CALCULATE içinde kullanılır.

Sözdizimi: FILTER(table, condition)

Örnek: 5'ten fazla siparişi olan müşterilerden elde edilen gelir

Revenue From Repeat Customers =
CALCULATE(
    SUM(Sales[Revenue]),
    FILTER(
        Customers,
        CALCULATE(COUNTROWS(Sales)) > 5
    )
)

Önemli: FILTER satır satır yinelenir, bu da onu büyük tablolardaki basit CALCULATE filtrelerinden daha yavaş hale getirir. Yalnızca doğrudan sütun filtresi yetersiz olduğunda kullanın.

3. HEPSİ — Tüm Filtreleri Kaldır

ALL, bir tablo veya sütundaki tüm filtreleri kaldırır ve filtrelenmemiş tablonun tamamını döndürür. Toplamları, toplam yüzdelerini ve oranları hesaplamak için kullanılır.

Sözdizimi: ALL(table) veya ALL(table[column])

Örnek: Toplamın yüzdesi olarak gelir

Revenue % of Total =
DIVIDE(
    SUM(Sales[Revenue]),
    CALCULATE(SUM(Sales[Revenue]), ALL(Sales))
)

Bir dilimleyici "Kuzey Amerika"ya filtre uyguladığında SUM(Sales[Revenue]) Kuzey Amerika'nın gelirini döndürür. CALCULATE(SUM(Sales[Revenue]), ALL(Sales)) tüm filtreleri kaldırır ve küresel geliri döndürür. Bölme yüzdeyi verir.

4. ALLEXCEPT — Belirtilenler Dışındaki Tüm Filtreleri Kaldır

ALLEXCEPT, belirtilen sütunlar dışındaki tüm filtreleri tablodan kaldırır. Bu, bazı filtreleri (yıl gibi) korurken diğerlerini (ürün kategorisi gibi) kaldırmak istediğinizde kullanışlıdır.

Sözdizimi: ALLEXCEPT(table, column1, column2, ...)

Örnek: Cari yıl içindeki gelir paylaşımı

Revenue % of Year Total =
DIVIDE(
    SUM(Sales[Revenue]),
    CALCULATE(
        SUM(Sales[Revenue]),
        ALLEXCEPT(Sales, DateTable[Year])
    )
)

Bu, her ürünün veya bölgenin tüm zamanlar için değil, seçilen yıl içindeki gelir payını gösterir.

5. TOTALYTD — Yılbaşından Bugüne

TOTALYTD, bağlam içinde yılın başlangıcından geçerli tarihe kadar devam eden bir toplamı hesaplar.

Sözdizimi: TOTALYTD(expression, dates[date_column], [filter], [year_end_date])

Örnek: Yılbaşından bugüne gelir

Revenue YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date])

30 Haziran'da sona eren mali yıl için:

Revenue Fiscal YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date], "6/30")

Önkoşul: DateTable'ın modelde bir tarih tablosu olarak işaretlenmesi gerekir (Tablo Araçları, ardından Tarih Tablosu Olarak İşaretle).

6. GEÇEN YILIN AYNI DÖNEMİ — yıldan yıla

SAMEPERIODLASTYEAR, tarih bağlamını tam olarak bir yıl geriye kaydırır.

Sözdizimi: SAMEPERIODLASTYEAR(dates[date_column])

Örnek: Geçen yıla göre gelir

Revenue PY =
CALCULATE(SUM(Sales[Revenue]), SAMEPERIODLASTYEAR(DateTable[Date]))

Revenue YoY Growth =
VAR CurrentRevenue = SUM(Sales[Revenue])
VAR PriorRevenue = [Revenue PY]
RETURN
DIVIDE(CurrentRevenue - PriorRevenue, PriorRevenue, 0)

Aylık bir matriste, her satır büyüme yüzdesiyle birlikte cari ayın ve önceki yılın aynı ayının gelirini gösterir.

7. DATEADD — Esnek Zaman Kaymaları

DATEADD, tarihleri ​​herhangi bir aralığa göre kaydırır: gün, ay, çeyrek veya yıl. SAMEPERIODLASTYEAR'dan daha esnektir.

Sözdizimi: DATEADD(dates[date_column], intervals, interval_type)

Örnek: 3 ay önceki gelir

Revenue 3 Months Ago =
CALCULATE(
    SUM(Sales[Revenue]),
    DATEADD(DateTable[Date], -3, MONTH)
)

Örnek: 12 aylık gelirin yuvarlanması

Revenue Rolling 12M =
CALCULATE(
    SUM(Sales[Revenue]),
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)

8. RANKX — Dinamik Sıralamalar

RANKX, bir ifadeye dayalı olarak her öğeye bir sıralama atar.

Sözdizimi: RANKX(table, expression, [value], [order], [ties])

Örnek: Ürünleri gelire göre sıralayın

Product Revenue Rank =
RANKX(
    ALL(Products[ProductName]),
    [Total Revenue],
    ,
    DESC,
    DENSE
)

ALL(Ürünler[ÜrünAdı]), ürünlerdeki dilimleyici filtrelerine bakılmaksızın, sıralanacak ürünlerin tam listesini sağlar. DESC, en yüksek gelirin 1. sırayı alacağı anlamına gelir. DENSE, bağlı değerlerin aynı sırayı alacağı anlamına gelir.

Örnek: Üst N filtresi

Top 10 Products Revenue =
CALCULATE(
    [Total Revenue],
    FILTER(
        ALL(Products[ProductName]),
        RANKX(ALL(Products[ProductName]), [Total Revenue], , DESC) <= 10
    )
)

9. ANAHTAR — Koşullu Mantık

SWITCH, iç içe geçmiş IF ifadelerinin yerini alır ve çok daha okunabilirdir.

Sözdizimi: SWITCH(expression, value1, result1, value2, result2, ..., else_result)

Örnek: Müşteri segmenti sınıflandırması

Customer Segment =
SWITCH(
    TRUE(),
    [Total Revenue] > 100000, "Enterprise",
    [Total Revenue] > 25000, "Mid-Market",
    [Total Revenue] > 5000, "SMB",
    "Startup"
)

Örnek: Dinamik ölçü seçimi

Selected Measure =
SWITCH(
    SELECTEDVALUE(MeasureSelector[Measure]),
    "Revenue", [Total Revenue],
    "Orders", [Order Count],
    "AOV", [Average Order Value],
    "Margin", [Gross Margin %],
    [Total Revenue]
)

Bu model, kullanıcıların bir grafikte hangi ölçümün görüntüleneceğini seçmesine olanak tanıyan bir dilimleyiciyle çalışır.

10. VAR / DÖNÜŞ — Değişkenler

Değişkenler ara sonuçları saklayarak formülleri okunabilir hale getirir ve gereksiz hesaplamaları önler. Bir değişken bir kez değerlendirilir ve yeniden kullanılır.

Sözdizimi: VAR name = expression RETURN final_expression

Örnek: Değişkenli karmaşık KPI

Customer Health Score =
VAR Revenue = [Total Revenue]
VAR OrderCount = [Order Count]
VAR DaysSinceLastOrder =
    DATEDIFF(MAX(Sales[OrderDate]), TODAY(), DAY)
VAR RevenueScore =
    SWITCH(TRUE(), Revenue > 50000, 3, Revenue > 10000, 2, 1)
VAR FrequencyScore =
    SWITCH(TRUE(), OrderCount > 20, 3, OrderCount > 5, 2, 1)
VAR RecencyScore =
    SWITCH(TRUE(), DaysSinceLastOrder < 30, 3, DaysSinceLastOrder < 90, 2, 1)
RETURN
    RevenueScore + FrequencyScore + RecencyScore

Değişkenler olmadan, bu formül aynı hesaplamaları birden çok kez tekrarlayarak onu okunamaz hale getirir ve daha yavaş hale getirir.

11. BÖL — Güvenli Bölme

DIVIDE, sıfıra bölme işlemini sorunsuz bir şekilde gerçekleştirir ve hata yerine belirli bir alternatif sonuç döndürür.

Sözdizimi: DIVIDE(numerator, denominator, [alternate_result])

Örnek:

Conversion Rate =
DIVIDE([Closed Won Deals], [Total Opportunities], 0)

Ölçülerde her zaman / operatörü yerine DIVIDE kullanın. / operatörü sıfıra bölerken hata döndürerek görsellerinizi bozar.

12. DISTINTCCOUNT — Benzersiz Değerleri Say

DISTINTCCOUNT bir sütundaki benzersiz değerlerin sayısını sayar.

Sözdizimi: DISTINCTCOUNT(column)

Örnek: Dönem içindeki aktif müşteriler

Active Customers =
DISTINCTCOUNT(Sales[CustomerID])

Bu, geçerli filtre bağlamında (seçili ay, üç aylık dönem vb.) en az bir satın alma işlemi gerçekleştiren tekil müşterileri sayar.

13. ÜLKELER — Tablodaki Satırları Sayma

COUNTROWS, isteğe bağlı olarak filtrelenen bir tablodaki satır sayısını sayar.

Sözdizimi: COUNTROWS(table)

Örnek: Sipariş sayısı

Order Count =
COUNTROWS(Sales)

Cancelled Orders =
CALCULATE(
    COUNTROWS(Sales),
    Sales[Status] = "Cancelled"
)

14. SUMX — Satır Satır Toplamı

SUMX, her satır için bir ifadeyi değerlendiren ve sonuçları toplayan bir yineleyicidir. Toplamadan önce sütunları çarpmanız gerektiğinde bu çok önemlidir.

Sözdizimi: SUMX(table, expression)

Örnek: Ağırlıklı ortalama hesaplama

Weighted Average Price =
DIVIDE(
    SUMX(Sales, Sales[Quantity] * Sales[UnitPrice]),
    SUM(Sales[Quantity])
)

SUM iki sütunu çarpamaz. Her satır için Miktar çarpı BirimFiyat değerini değerlendirmek ve ardından sonuçları toplamak için SUMX'e ihtiyacınız vardır.

15. AVERAGEX — Satır Satır Ortalaması

AVERAGEX, AVERAGE'ın yineleyici versiyonudur.

Sözdizimi: AVERAGEX(table, expression)

Örnek: Ortalama kapanış gün sayısı

Average Days to Close =
AVERAGEX(
    Opportunities,
    DATEDIFF(Opportunities[CreatedDate], Opportunities[ClosedDate], DAY)
)

16. MAXX ve MINX — Yineleyici Min/Maks

MAXX ve MINX, satır satır değerlendirilen bir ifadenin maksimum veya minimum değerini bulur.

Örnek: Müşteri başına en son sipariş tarihi

Most Recent Order =
MAXX(Sales, Sales[OrderDate])

Oldest Unpaid Invoice =
MINX(
    FILTER(Invoices, Invoices[PaymentStatus] = "Unpaid"),
    Invoices[InvoiceDate]
)

17. ARAMA DEĞERİ — DÜŞEYARA Eşdeğeri

LOOKUPVALUE, bir veya daha fazla arama kriterine göre tablodan bir değer alır. Excel'in DÜŞEYARA fonksiyonunun DAX eşdeğeridir.

Sözdizimi: LOOKUPVALUE(result_column, search_column, search_value, ...)

Örnek:

Customer Region =
LOOKUPVALUE(
    Customers[Region],
    Customers[CustomerID], Sales[CustomerID]
)

Not: LOOKUPVALUE genellikle hesaplamalarda değil, hesaplanan sütunlarda kullanılır. Ölçülerde RELATED (çoka-bir için) veya RELATEDTABLE (birden çoğa için) tercih edilir.

18. SELECTEDVALUE — Geçerli Dilimleyici Değerini Al

SELECTEDVALUE, filtre bağlamında tam olarak bir değer olduğunda bir sütunun değerini döndürür. Birden fazla değer seçilirse alternatif sonucu döndürür.

Sözdizimi: SELECTEDVALUE(column, [alternate_result])

Örnek: Dinamik başlık

Chart Title =
"Revenue for " & SELECTEDVALUE(DateTable[Year], "All Years")

19. ISBLANK — Boş Değerleri Kontrol Edin

ISBLANK, bir değerin boş (boş/boş) olup olmadığını test eder.

Örnek: Atanmış bir satış elemanı olmayan siparişler

Unassigned Orders =
CALCULATE(
    COUNTROWS(Sales),
    ISBLANK(Sales[SalespersonID])
)

20. CONCATATEX — Tablodaki Değerleri Birleştirin

CONCATENATEX bir tablo üzerinde yinelenir ve değerleri tek bir dizede birleştirir.

Sözdizimi: CONCATENATEX(table, expression, [delimiter], [order_by], [order])

Örnek: Bir müşteri tarafından satın alınan ürünlerin listesi

Products Purchased =
CONCATENATEX(
    VALUES(Products[ProductName]),
    Products[ProductName],
    ", ",
    Products[ProductName], ASC
)

Müşteri ayrıntıları tablosunda bu, her müşteri için "Ürün A, Ürün B, Ürün C"yi gösterir.


Zaman Zekası Derin İncelemesi

Zaman zekası, iş kullanıcılarının DAX'a ihtiyaç duymasının en yaygın nedenidir. Power BI'ın zaman zekası işlevleri özel bir tarih tablosu gerektirir. İşte kapsamlı bir zaman ölçümleri seti.

Önkoşullar: Tarih Tablosu

Modelinizde aşağıdakileri içeren bir tarih tablosu bulunmalıdır:

  • Tüm veri aralığınızı kapsayan sürekli bir tarih sütunu (boşluksuz)
  • Tarih tablosu olarak işaretlenen tablo (Tablo Araçları, ardından Tarih Tablosu Olarak İşaretle)
  • Tarih tablosunun tarih sütunundan her bir olgu tablosunun tarih sütununa olan ilişki

Ortak Zaman İstihbaratı Önlemleri

-- Month-to-Date
Revenue MTD =
TOTALMTD(SUM(Sales[Revenue]), DateTable[Date])

-- Quarter-to-Date
Revenue QTD =
TOTALQTD(SUM(Sales[Revenue]), DateTable[Date])

-- Year-to-Date
Revenue YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date])

-- Previous Month
Revenue PM =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSMONTH(DateTable[Date]))

-- Previous Quarter
Revenue PQ =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSQUARTER(DateTable[Date]))

-- Previous Year
Revenue PY =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSYEAR(DateTable[Date]))

-- Month-over-Month Growth
Revenue MoM % =
VAR Current = SUM(Sales[Revenue])
VAR Prior = [Revenue PM]
RETURN DIVIDE(Current - Prior, Prior, 0)

-- Year-over-Year Growth
Revenue YoY % =
VAR Current = SUM(Sales[Revenue])
VAR Prior = [Revenue PY]
RETURN DIVIDE(Current - Prior, Prior, 0)

-- Rolling 3-Month Average
Revenue 3M Avg =
AVERAGEX(
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -3, MONTH),
    CALCULATE(SUM(Sales[Revenue]))
)

-- Cumulative Total (Running Sum)
Revenue Cumulative =
CALCULATE(
    SUM(Sales[Revenue]),
    FILTER(
        ALL(DateTable[Date]),
        DateTable[Date] <= MAX(DateTable[Date])
    )
)

Mali Yıl Zaman İstihbaratı

Mali yılınız takvim yılıyla uyumlu değilse isteğe bağlı Year_end_date parametresini kullanın:

-- Fiscal Year ending March 31
Revenue Fiscal YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date], "3/31")

-- Or use DATESYTD for more control
Revenue Fiscal YTD v2 =
CALCULATE(
    SUM(Sales[Revenue]),
    DATESYTD(DateTable[Date], "3/31")
)

Bağlam Geçişi: Gizli Motor

Bağlam geçişi, bir ölçü çağrıldığında satır bağlamının (hesaplanmış bir sütundan veya yineleyiciden) filtre bağlamına dönüştürüldüğü süreçtir. Bu DAX'taki en güçlü ve en yanlış anlaşılan kavramdır.

Nasıl Çalışır?

Bu önlemi düşünün:

Total Revenue = SUM(Sales[Revenue])

Ürünler tablosundaki şu hesaplanan sütun:

Product Revenue = [Total Revenue]

Hesaplanan sütunda satır bağlamı (geçerli ürün satırı) bulunur. [Total Revenue] çağrıldığında içerik geçişi satır içeriğini bir filtreye dönüştürür: CALCULATE(SUM(Sales[Revenue]), Products[ProductID] = <current row's ProductID>). Sonuç, söz konusu ürün için gelirdir.

Performans Etkileri

Bağlam geçişi, ölçü çağrısının çevresine örtülü bir HESAPLAMA ekler. Küçük masalar için bu önemsizdir. Karmaşık ölçülere sahip büyük tablolar için pahalı olabilir. Büyük tablolar üzerinden yineleyicilerin içindeki karmaşık önlemleri çağırmaktan kaçının.

Verimsiz:

-- Iterates over every customer, calling a complex measure each time
Customer Profitability =
SUMX(
    Customers,
    [Revenue] - [COGS] - [Allocated Overhead]
)

Daha iyi:

-- Pre-compute the components and use simple arithmetic
Customer Profitability =
SUM(Sales[Revenue]) - SUM(Sales[COGS]) -
DIVIDE(SUM(Sales[Revenue]), [Total Revenue]) * [Total Overhead]

Pratik İş Senaryoları

Senaryo 1: ABC Analizi (Pareto Sınıflandırması)

Ürünleri A (gelirin en üst %80'i), B (sonraki %15) ve C (en alttaki %5) olarak sınıflandırın:

ABC Class =
VAR CurrentProduct = SELECTEDVALUE(Products[ProductName])
VAR AllProducts =
    ADDCOLUMNS(
        ALL(Products[ProductName]),
        "@Revenue", [Total Revenue]
    )
VAR Sorted = TOPN(COUNTROWS(AllProducts), AllProducts, [@Revenue], DESC)
VAR TotalRev = SUMX(AllProducts, [@Revenue])
VAR CumulativeRev =
    SUMX(FILTER(Sorted, [@Revenue] >= [Total Revenue]), [@Revenue])
VAR CumulativePct = DIVIDE(CumulativeRev, TotalRev)
RETURN
    SWITCH(TRUE(),
        CumulativePct <= 0.8, "A",
        CumulativePct <= 0.95, "B",
        "C"
    )

Senaryo 2: Kohortu Elde Tutma Analizi

Her bir satın alma grubundan kaç müşterinin zaman içinde aktif kaldığını takip edin:

Cohort Retention Rate =
VAR CohortMonth = SELECTEDVALUE(DateTable[YearMonth])
VAR CohortCustomers =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerID]),
        FILTER(
            ALL(Sales),
            FORMAT(Sales[FirstPurchaseDate], "YYYY-MM") = CohortMonth
        )
    )
VAR ActiveCustomers =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerID]),
        FILTER(
            ALL(Sales),
            FORMAT(Sales[FirstPurchaseDate], "YYYY-MM") = CohortMonth
        )
    )
RETURN
    DIVIDE(ActiveCustomers, CohortCustomers, 0)

Senaryo 3: Hareketli Yıllık Toplam (MAT)

Hareketli bir yıllık toplam, son 12 tam ayı toplayarak mevsimselliği düzeltir:

Revenue MAT =
CALCULATE(
    SUM(Sales[Revenue]),
    DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)

Revenue MAT Growth =
VAR Current = [Revenue MAT]
VAR Prior =
    CALCULATE(
        [Revenue MAT],
        DATEADD(DateTable[Date], -12, MONTH)
    )
RETURN
    DIVIDE(Current - Prior, Prior, 0)

Yineleyici ve Toplayıcı: Her Biri Ne Zaman Kullanılmalı

Toplayıcı İşlevleri

SUM, ORTALAMA, COUNT, MIN, MAX tek bir sütun üzerinde çalışır. Hızlıdırlar çünkü depolama motoru bunları doğrudan sıkıştırılmış sütun verilerinden çözebilir.

Ne zaman kullanın: Bir sütunun basit bir şekilde toplanmasına ihtiyacınız var.

Yineleyici İşlevleri

SUMX, AVERAGEX, COUNTX, MINX, MAXX, RANKX bir ifadeyi satır satır değerlendirir. Daha esnektirler ancak daha yavaştırlar çünkü formül motoru her satırı işler.

Ne zaman kullanın:

  • Toplamadan önce sütunları çarpmanız gerekir (ağırlıklı hesaplamalar için SUMX)
  • Her satıra bir koşul uygulamanız gerekir (IF ile COUNTX)
  • Öğeleri sıralamanız gerekir (RANKX)
  • Hesaplama, satır düzeyinde değerlendirme gerektiren ilgili tablolardaki değerlere bağlıdır

Temel performans kuralı: Aynı sonuç bir toplayıcıyla elde edilebiliyorsa toplayıcıyı kullanın. Yineleyicileri yalnızca satır satır değerlendirmenin gerekli olduğu durumlarda kullanın.


DAX'ta hata ayıklama

Yaygın Hata Mesajları

HataSebepDüzelt
"X sütunu için tek bir değer bekleniyor"Measure, beklendiği yerde birden çok değer döndürürBir değere düşürmek için SELECTEDVALUE, MAX veya CALCULATE kullanın
"Döngüsel bağımlılık"Hesaplanan iki sütun veya ölçü birbirine referans verirDöngüyü kaldırmak için hesaplama zincirini yeniden tasarlayın
"İlişkiler belirlenemiyor"Tablolar arasında belirsiz ilişki yoluUSERELATIONSHIP'te ilişkiyi belirtin veya etkinleştirin
"İfade birden çok sütuna başvuruyor"ALL/VALUES birden çok sütunla yanlış kullanılmışALL(Tablo) veya ALL(Tablo[Sütun1], Tablo[Sütun2])

Performans Analizörü

Power BI Desktop'ın Performans Analiz Aracı (Görünüm, ardından Performans Analiz Aracı), her görsel için DAX sorgusunu ve yürütme süresini gösterir. Şunları yapmak için kullanın:

  1. Yavaş görselleri tanımlayın (1 saniyeden fazla)
  2. Ayrıntılı analiz için DAX sorgusunu DAX Studio'ya kopyalayın
  3. Ölçüleri optimize ederken yürütme öncesi/sonrası sürelerini karşılaştırın

DAX Stüdyosu

DAX Studio, ayrıntılı sorgu analizi sağlayan ücretsiz bir harici araçtır. Şunu gösterir:

  • Depolama motoru sorguları (hızlı, sütun deposu taramaları)
  • Formül motoru sorguları (daha yavaş, satır satır değerlendirme)
  • Gerçekleştirme boyutları (motorlar arasında karıştırılan veriler)

Bir ölçü çok sayıda formül motoru sorgusu üretiyorsa, muhtemelen çok fazla yineleyici veya karmaşık FILTER ifadesi kullanıyordur. Depolama motoruna daha fazla iş göndermek için yeniden düzenleme yapın.

DAX'i temel bilgilerden gelişmiş optimizasyona kadar kapsayan Power BI eğitimi için ECOSIRE, özel veri kümelerinize ve işle ilgili sorularınıza göre uyarlanmış uygulamalı atölye çalışmaları sunar.


SSS

Ölçü ile hesaplanan sütun arasındaki fark nedir?

Bir ölçü, geçerli filtre bağlamı içinde sorgu zamanında değerlendirilir. Tabloya veri eklemez; dinamik olarak bir değer hesaplar. Hesaplanan bir sütun, veri yenileme zamanında değerlendirilir ve tabloya fiziksel bir sütun ekler. Toplamalara ve dilimleyicilere ve filtrelere göre değişen KPI'lara yönelik ölçümleri kullanın. Satır düzeyindeki sınıflandırmalar veya dilimleyicilerde, filtrelerde veya ilişkilerde kullanılması gereken değerler için hesaplanan sütunları kullanın. Ölçüler model boyutunu büyütmediği için hemen hemen her zaman tercih edilmektedir.

YTD ölçümüm neden yanlış değerler gösteriyor?

Bunun en yaygın nedeni tarih tablonuzun doğru şekilde yapılandırılmamış olmasıdır. Üç şeyi doğrulayın: (1) tarih tablosunda boşluk yoktur --- verilerinizin başlangıcından bugüne kadar olan her tarih dahil edilmelidir, (2) tablo Power BI'da bir tarih tablosu olarak işaretlenmiştir (Tablo Araçları, ardından Tarih Tablosu Olarak İşaretle) ve (3) tarih tablosu ile olgu tablonuz arasındaki ilişki etkindir ve doğru şekilde eşlenmiştir. Ayrıca tarih sütununuzun tam eşleşmeyi engelleyen bir zaman bileşeni içermediğini de kontrol edin.

FILTER yerine CALCULATE'i ne zaman kullanmalıyım?

Filtreyi basit bir sütun karşılaştırması olarak ifade edebildiğinizde HESAPLAMA işlevini kullanın (ör. KOD0). CALCULATE bunu depolama motorunun optimize edebileceği verimli bir filtreye dönüştürür. Birden çok sütuna veya çağrı ölçülerine başvuran karmaşık satır satır koşullara ihtiyaç duyduğunuzda FİLTRE kullanın (örneğin, CALCULATE(COUNTROWS(Sales)) > 5 olan müşterileri filtreleme). FILTER bir yineleyicidir ve daha yavaştır; bu nedenle mümkün olduğunda CALCULATE'in basit sözdizimini tercih edin.

DAX'ta cari toplam veya kümülatif toplamı nasıl oluştururum?

CALCULATE'i geçerli tarihe kadar olan tüm tarihleri ​​içeren bir filtreyle kullanın: Revenue Cumulative = CALCULATE(SUM(Sales[Revenue]), FILTER(ALL(DateTable[Date]), DateTable[Date] <= MAX(DateTable[Date]))). Bu, mevcut tarih filtresini (TÜMÜ) kaldırır ve onu, geçerli bağlamda başlangıçtan maksimum tarihe kadar tüm tarihleri ​​içeren bir filtreyle değiştirir. Aylık bir matriste her satır, o ay boyunca kümülatif toplamı gösterir.

Veri tabanına geri yazmak için DAX'ı kullanabilir miyim?

Hayır. DAX salt okunur bir sorgu dilidir. Görüntülenmek üzere verileri hesaplayabilir, filtreleyebilir ve dönüştürebilir ancak kaynak veritabanına veri ekleyemez, güncelleyemez veya silemez. Geri yazma senaryoları için Power BI'da yerleşik Power Apps kullanın veya Power BI uyarıları tarafından tetiklenen Power Automate akışlarını kullanın. Bazı üçüncü taraf araçlar (Acterys, Writeback Manager), özel görseller aracılığıyla geri yazma yetenekleri ekler.

E

Yazan

ECOSIRE Research and Development Team

ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.

Data Analytics & BI serisinden daha fazlası

Power BI Kontrol Paneli Geliştirmeye İlişkin Tam Kılavuz

KPI tasarımı, görsel en iyi uygulamalar, detaya geçiş sayfaları, yer işaretleri, mobil düzenler ve RLS güvenliği ile etkili Power BI panolarını nasıl oluşturacağınızı öğrenin.

Power BI Embedded: Uygulamanıza Analitik Ekleme

Power BI analitiğini SaaS uygulamanıza ekleyin. Kimlik doğrulamayı, çok kiracılı RLS'yi, kapasite boyutlandırmayı, JavaScript SDK'sını, özel temaları ve Fabric fiyatlandırmasını kapsar.

Excel'den Power BI'ya Geçiş: Adım Adım Kılavuz

Formül çevirisi, veri modeli oluşturma, Power Query, doğrulama ve hizmetten çıkarma işlemlerini kapsayan Excel'den Power BI'ya geçişe ilişkin eksiksiz kılavuz.

Power BI + Odoo Entegrasyonu İçin Tam Kılavuz

Gelişmiş analizler için Power BI'ı Odoo ERP'ye bağlayın. PostgreSQL doğrudan sorguları, anahtar tablolar, satış/envanter/İK kontrol panelleri ve artımlı yenileme kurulumu.

İşletmelerde Yapay Zeka Yatırım Getirisini Ölçmek: Gerçekten İşe Yarayan Bir Çerçeve

Departmanlar arasında doğrudan tasarrufları, üretkenlik kazanımlarını, gelir etkisini ve stratejik değeri kapsayan yapay zeka yatırım getirisini ölçmek için pratik bir çerçeve.

Finansal Raporlama Kontrol Panelleri Oluşturma: KPI'lar, Tasarım ve ERP Entegrasyonu

Kararları yönlendiren finansal raporlama kontrol panelleri tasarlayın. Hangi KPI'lerin izleneceğini, kontrol paneli tasarım ilkelerini ve ERP entegrasyonunun en iyi uygulamalarını öğrenin.

WhatsApp'ta Sohbet Et