Ö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.
[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 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.Satış GY boş, YoY % de boş döner. DIVIDE sayesinde hata değil boşluk görürsün.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.
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ı | Pencere | Değer |
|---|---|---|
| MTD | 1–31 Mayıs | 46.239 ₺ |
| QTD | 1 Nisan – 31 Mayıs | 80.472 ₺ |
| YTD | 1 Ocak – 31 Mayıs | 235.863 ₺ |
Geçen yıl YTD ([Satış GY YTD]) | 1 Ocak – 31 Mayıs 2023 | 117.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ım | Hangi tarihler? | 2024-Ç2 satırı |
|---|---|---|
PREVIOUSMONTH(Tarih[Tarih]) | Görünen ilk tarihten önceki tam ay: Mart | 63.252 ₺ |
DATEADD(Tarih[Tarih], -1, MONTH) | Tüm dönem bir ay geri: Mart–Mayıs | 143.724 ₺ |
PREVIOUSQUARTER(Tarih[Tarih]) | Önceki tam çeyrek: Ocak–Mart | 155.391 ₺ |
DATEADD(Tarih[Tarih], -1, QUARTER) | Tüm dönem bir çeyrek geri: Ocak–Mart | 155.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.