Ana içeriğe geç
Kesit Power BI
Orta · Zaman Zekâsı

Zaman zekâsı: YTD, geçen yıl, büyüme

TOTALYTD, SAMEPERIODLASTYEAR, DATEADD, PREVIOUSMONTH ve yıllık büyüme ölçüleri.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Ön koşul

Zaman zekâsı fonksiyonları kesintisiz bir tarih sütununa ihtiyaç duyar; iyi uygulama, ayrı bir tarih tablosu kurup “Tarih tablosu olarak işaretle”mektir. İlişki tarih türünde bir sütunla kurulduysa işaretlemeden de çalışır; tarih dışı bir anahtarla kurulduysa işaret şarttır. Bu modelde Tarih[Tarih] o sütundur. Görselde tarih bilgisini her zaman Tarih tablosundan al (Tarih[Yil], Tarih[YilAy]), olgu tablosundaki tarihten değil.

Veriye dikkat: 2022 yarım yılİlk satış Haziran 2022’de. Bu yüzden hazır [YoY %] 2023 için %289,8 verir: tam yılı yarım yılla karşılaştırır. Bu veri bilerek böyle; “Tam dönem YoY” alıştırması sorunu çözer.

Yılbaşından bugüne (YTD)

Satış YTD = TOTALYTD([Net Satış], Tarih[Tarih])
-- aynısı:
Satış YTD = CALCULATE([Net Satış], DATESYTD(Tarih[Tarih]))

Mart satırında 1 Ocak – 31 Mart toplamını verir. Benzerleri: TOTALQTD, TOTALMTD, DATESQTD, DATESMTD.

Geçen yılla karşılaştırma

Satış GY = CALCULATE([Net Satış], SAMEPERIODLASTYEAR(Tarih[Tarih]))

YoY % = DIVIDE([Net Satış] - [Satış GY], [Satış GY])

SAMEPERIODLASTYEAR, görünen tarihleri bir yıl geri kaydırır. DATEADD(Tarih[Tarih], -1, YEAR) aynı işi yapar ve daha esnektir: -1, MONTH bir önceki ay, -1, QUARTER bir önceki çeyrek.

Önceki dönem

Satış GA = CALCULATE([Net Satış], PREVIOUSMONTH(Tarih[Tarih]))
Aylık Değişim % = DIVIDE([Net Satış] - [Satış GA], [Satış GA])
PREVIOUSMONTH ile DATEADD farkıPREVIOUSMONTH her zaman görünen ilk tarihten önceki tam ayı döndürür. Yıl düzeyinde bir hücrede (ör. 2024 toplamı) bile Aralık 2023'ü verir. DATEADD(..., -1, MONTH) ise tüm dönemi bir ay kaydırır.
İlk yıl boşVerinin başladığı yılda “geçen yıl” yoktur; Satış GY boş, YoY % de boş döner. DIVIDE sayesinde hata değil boşluk görürsün.
Derinleş

Tarih tablosu olarak işaretlemek ne değiştirir?

Tarih tablosunu “tarih tablosu olarak işaretle”diğinde Power BI, tarih sütunu (Tarih[Tarih]) üzerine kurulan her filtreye otomatik olarak REMOVEFILTERS(Tarih) ekler. Bu yüzden şu kümülatif ölçü, satırlarda Tarih[YilAy] olsa bile doğru çalışır:

Kümülatif (tarih sütunuyla) =
VAR Son = MAX(Tarih[Tarih])
RETURN CALCULATE([Net Satış], Tarih[Tarih] <= Son)

Aynı mantığı yıl sütunuyla elle kurmak ise bozulur:

Satış GY (elle) =
VAR Y = MAX(Tarih[Yil])
RETURN CALCULATE([Net Satış], Tarih[Yil] = Y - 1)

Bu ölçü Tarih[Ay] kırılımında doğru sonuç verir, ama Tarih[YilAy] kırılımında her hücrede BLANK döner: “2024-03” filtresi yerinde kalır, üstüne “Yıl = 2023” eklenir ve iki filtreyi aynı anda sağlayan tarih yoktur. SAMEPERIODLASTYEAR bu sorunu yaşamaz, çünkü tarih sütunu üzerinden çalışır ve diğer tarih filtrelerini kaldırır.

Zaman zekâsının üç ön koşulu1) Tarih sütunu kesintisiz olmalı: ilk yılın 1 Ocak’ından son yılın 31 Aralık’ına her gün bir satır. 2) Tablo, tarih tablosu olarak işaretlenmeli. 3) Olgu tablosu tarih tablosuna bu tarih sütunuyla bağlanmalı. Biri eksikse ölçü hata vermez; yalnızca yanlış sonuç verir.
Uzmanlaş

YTD, QTD, MTD: aynı satırda üç farklı pencere

Aylık yönetim raporunda Mayıs 2024 satırına bakan bir finans uzmanı üç sayı görür. Üçü de “bugüne kadar” der, ama başlangıç noktaları farklıdır:

Ay Başından Bugüne = TOTALMTD([Net Satış], Tarih[Tarih])
Çeyrek Başından Bugüne = TOTALQTD([Net Satış], Tarih[Tarih])
Yıl Başından Bugüne = TOTALYTD([Net Satış], Tarih[Tarih])
Mayıs 2024 satırıPencereDeğer
MTD1–31 Mayıs46.239 ₺
QTD1 Nisan – 31 Mayıs80.472 ₺
YTD1 Ocak – 31 Mayıs235.863 ₺
Geçen yıl YTD ([Satış GY YTD])1 Ocak – 31 Mayıs 2023117.309 ₺

YTD büyümesi: (235.863 − 117.309) / 117.309 = %101. Bu sayı “yılın ilk beş ayında satışlar ikiye katlandı” demektir. Aylık YoY’den daha az dalgalıdır ve yönetimin en sık sorduğu sayıdır.

Yıl satırında MTD ne gösterir?

2024 yıl satırında MTD 94.001 ₺ gösterir: Aralık’ın ay başından bugüne değeri. Fonksiyon “görünen son tarihin ayı” ile çalışır. Yıl satırında bu sayı yanıltıcıdır; kullanıcı bunu yılın toplamı sanabilir. MTD ve QTD ölçülerini matriste kullanıyorsan üst düzeylerde gizle: IF(ISINSCOPE(Tarih[YilAy]), TOTALMTD(…)).

Mali yıl

Şirketin mali yılı Temmuz’da başlıyorsa TOTALYTD ve DATESYTD fonksiyonlarına yıl sonu tarihini metin olarak verirsin:

Mali YTD = TOTALYTD([Net Satış], Tarih[Tarih], "6-30")

Tarih tablosuna da mali yıl ve mali çeyrek sütunları eklenmeli. Yoksa görselde “2024” yazan satır takvim yılını, ölçü ise mali yılı gösterir.

“Önceki dönem” dört farklı şey olabilir

Çeyreklik bir tabloda “önceki dönem” sütunu istendi. 2024-Ç2 satırında (net satış 145.102 ₺) dört yazım dört farklı sayı verir:

YazımHangi tarihler?2024-Ç2 satırı
PREVIOUSMONTH(Tarih[Tarih])Görünen ilk tarihten önceki tam ay: Mart63.252 ₺
DATEADD(Tarih[Tarih], -1, MONTH)Tüm dönem bir ay geri: Mart–Mayıs143.724 ₺
PREVIOUSQUARTER(Tarih[Tarih])Önceki tam çeyrek: Ocak–Mart155.391 ₺
DATEADD(Tarih[Tarih], -1, QUARTER)Tüm dönem bir çeyrek geri: Ocak–Mart155.391 ₺

Hazır [Satış GA] ölçüsü PREVIOUSMONTH kullandığı için çeyrek satırında yalnızca Mart’ı gösterir; “önceki çeyreğe göre büyüme” için uygun değildir. Kural: ölçünün adındaki dönemi fonksiyonda da kullan. Çeyreklik görsel için çeyreklik ölçü yaz.

Aynı ayrım yıllar için de geçerlidir. Ay satırında SAMEPERIODLASTYEAR geçen yılın aynı ayını verir; PREVIOUSYEAR ise geçen yılın tamamını. 2024’ün her ay satırında PREVIOUSYEAR 400.870 ₺ gösterir. Bu bir hata değil, “geçen yılın toplamına karşı bu ay” karşılaştırması için kullanılan bir ölçüdür.

Eksik başlayan yıl tuzağı

Bu modelde satış verisi 22 Haziran 2022’de başlıyor. 2023’ün YoY değeri bu yüzden %289,8 çıkar: 2023’ün 12 ayı, 2022’nin yaklaşık 6 ayıyla karşılaştırılıyor. Kimse bu sayıya göre karar vermemeli. Bir çözüm, karşılaştırılan dönemin tamamı veri kapsamındaysa YoY göstermektir:

Tam Dönem YoY % =
VAR OncekiBas = EDATE(MIN(Tarih[Tarih]), -12)
VAR IlkSatis = CALCULATE(MIN(Satislar[Tarih]), REMOVEFILTERS(Tarih))
RETURN IF(OncekiBas >= IlkSatis, [YoY %])

2023 yıl satırında önceki dönem 1 Ocak 2022’de başlar. Bu tarih ilk satıştan önce olduğu için ölçü BLANK döner. 2024 satırında %86,4 görünür. Ay satırlarında Temmuz 2023’ten itibaren değer çıkar.

Tarih tablosu kontrol listesi1) Her gün bir satır, boşluk yok; ilk yılın 1 Ocak’ından son yılın 31 Aralık’ına. 2) Tarih sütununda saat yok (00:00 olmayan değerler ilişkiyi bozar). 3) “Tarih tablosu olarak işaretle” yapıldı. 4) Seçenekler’de “Otomatik tarih/saat” kapalı; yoksa her tarih sütunu için gizli bir tarih tablosu oluşur. 5) Ay adı gibi metin sütunları “Sütuna göre sırala” ile sayıya bağlı (Ay → AyNo). 6) Verinin başladığı ve bittiği tarih biliniyor; eksik dönemli karşılaştırmalar gizleniyor.
Alıştırmalara geç (9)