Finans ekibi bir raporda üç şey arar: tutarlar bir gelir tablosu düzeninde mi, bütçeye göre neredeyiz ve bir kararın parasal değeri ne. Anadolu Market modelinde faaliyet giderleri Giderler, bütçesi GiderButce, türleri GiderTurleri tablosundadır; bilanço yoktur. Gelir tablosunu faaliyet kârına kadar gerçek veriyle kurarız. Şirket ölçeği öğretim için sıkıştırılmıştır: Giderler tutarları satışa göre küçük, Calisanlar[Maas] ile aynı ölçekte değildir.
Gelir tablosunun mantığı
Gelir tablosu (kâr-zarar tablosu, P&L) yukarıdan aşağı okunur; her satır bir öncekinden bir kalem düşer:
- Brüt satış: Liste fiyatıyla satış (adet × birim fiyat).
- − İndirimler → Satış (indirim sonrası)
- − İadeler → Net satış
- − Satılan malın maliyeti (SMM) → Brüt kâr. Brüt kâr / net satış = brüt marj.
- − Faaliyet giderleri (pazarlama, genel yönetim, personel) → FAVÖK (faiz, amortisman ve vergi öncesi kâr; İngilizcede EBITDA). Operasyonun nakit üretme gücüne yakın bir göstergedir.
- − Amortisman, faiz, vergi → Net kâr.
Modelde 5. satıra kadar inebiliriz: hazır [Gider] ve [Faaliyet Kârı] ölçüleri Giderler tablosunu kullanır. Amortisman ayrı tutulmadığı için buna tam FAVÖK değil, faaliyet kârı diyoruz. Dikkat: modeldeki [Net Satış] yalnızca iptalleri çıkarır, iadeleri değil. Muhasebe dilindeki net satış için iadeyi ayrıca düşmek gerekir. Bir ölçüye ad verirken hangi tanımı kullandığını açıklamasına yaz.
Modelden küçük bir kâr-zarar tablosu
Matrisin satırlarında “Brüt satış, İndirimler, …” gibi kalem adları olmalı; ama bu adlar modelde bir sütun değil. Kalıp: kalemleri tutan bir yardımcı tablo (Giriş → Veri gir) ve kalem başına doğru ölçüyü seçen bir SWITCH ölçüsü.
-- Yardımcı tablo: KZKalemleri (Sira, Kalem), Kalem sütunu Sira'ya göre sıralı
KZ Tutarı =
VAR IadeMaliyet = CALCULATE([Toplam Maliyet], Satislar[Durum] = "İade")
VAR NetSatis = [Net Satış] - [İade Tutarı]
VAR SMM = [Net Maliyet] - IadeMaliyet
RETURN SWITCH(SELECTEDVALUE(KZKalemleri[Sira]),
1, CALCULATE([Brüt Tutar], Satislar[Durum] <> "İptal"),
2, -[İndirim Tutarı],
3, [Net Satış],
4, -[İade Tutarı],
5, NetSatis,
6, -SMM,
7, NetSatis - SMM)
Aynı mantığı yardımcı tabloyu sorgunun içinde kurarak deneyebilirsin:
EVALUATE
VAR Kalemler = SELECTCOLUMNS(
{ (1, "Brüt satış"), (2, "İndirimler"), (3, "Satış (indirim sonrası)"), (4, "İadeler"),
(5, "Net satış"), (6, "Satılan malın maliyeti"), (7, "Brüt kâr") },
"Sira", [Value1], "Kalem", [Value2])
VAR IadeMaliyet = CALCULATE([Toplam Maliyet], Satislar[Durum] = "İade")
RETURN ADDCOLUMNS(Kalemler, "Tutar", SWITCH([Sira],
1, CALCULATE([Brüt Tutar], Satislar[Durum] <> "İptal"),
2, -[İndirim Tutarı],
3, [Net Satış],
4, -[İade Tutarı],
5, [Net Satış] - [İade Tutarı],
6, -([Net Maliyet] - IadeMaliyet),
7, [Net Satış] - [İade Tutarı] - ([Net Maliyet] - IadeMaliyet)))
| Kalem | Tutar (TL) |
|---|---|
| Brüt satış | 1.291.856 |
| İndirimler | −41.084 |
| Satış (indirim sonrası) | 1.250.772 |
| İadeler | −80.835 |
| Net satış | 1.169.937 |
| Satılan malın maliyeti | −743.418 |
| Brüt kâr | 426.519 (marj %36,5) |
Satılan malın maliyetinden iade edilen ürünlerin maliyeti (51.246 TL) düşüldü; ürün stoğa geri döndüğü varsayımıyla. Gider kalemleri tutarları negatif yazılır; böylece matrisin toplamı anlamlı olmaz ama her satır doğru okunur. Ara toplam satırlarını (Net satış, Brüt kâr) koşullu biçimlendirmeyle kalın göster; matrisin kendi toplam satırını kapat.
Bütçe sapması
Bütçe (ya da hedef) sapması iki biçimde verilir: tutar olarak (gerçekleşen − bütçe) ve yüzde olarak ((gerçekleşen − bütçe) / bütçe). Modeldeki Hedefler tablosu kategori ve ay düzeyindedir (ayrıntı düzeyi farkı için Hedef ve gerçekleşen dersine bak).
Bütçe Sapma Yüzdesi = DIVIDE([Net Satış] - [Hedef], [Hedef])
Toplamda net satış 1.250.772 TL, hedef 1.299.300 TL: sapma −48.528 TL, yani −%3,7. Yıllara göre: 2022 −%23,0, 2023 −%0,4, 2024 −%2,1. 2022'deki büyük açık bir performans sorunu değil; hedefler Ocak'tan, satışlar 22 Haziran'dan başlıyor. Sapmayı yorumlamadan önce iki tarafın aynı dönemi kapsadığını kontrol et.
Sapma işareti kaleme göre yorumlanır: satışta pozitif sapma iyi, maliyette kötüdür. Koşullu biçimlendirmede renk kuralını kaleme göre ters çevir. Oranlarda (marj gibi) sapma yüzde puan olarak verilir: %36,5 marj ile %35 hedef arasındaki fark +1,5 puandır, %4,3 değil.
Gider bütçesi: gerçek veriyle sapma
GiderButce gider türü ve ay düzeyindedir. Hazır ölçüler:
Gider Sapma Kontrol = [Gider] - [Gider Bütçe]
Gider tarafında işaret terstir: pozitif sapma bütçe aşımı, yani kötü haberdir. Örnek raporlar → Finansal Performans raporu bu ölçüleri ve GiderTurleri[Grup] kırılımını kullanır.
Oranlar ve oran panosu
| Oran | Tanım | Modelde |
|---|---|---|
| Brüt marj | Brüt kâr / net satış | [Kâr Marjı %] = %36,5 |
| İndirim oranı | İndirim / brüt satış | [Ortalama İndirim %] = %3,2 |
| İade oranı (satır) | İade satırı / tüm satırlar | [İade Oranı %] = %6,8 |
| İade oranı (tutar) | İade tutarı / satış | DIVIDE([İade Tutarı], [Net Satış]) = %6,5 |
| İptal oranı | İptal satırı / tüm satırlar | [İptal Oranı %] = %7,5 |
Aynı adlı oranın iki tanımı (satır ya da tutar bazlı) farklı sonuç verir; panoya hangisini koyduğunu yaz. Kategoriye göre tutar bazlı iade oranı Kozmetik'te %10,9, Spor'da %3,9. Oran panosunda her oranı kendi hedefi ve geçen yılı ile birlikte göster; tek başına bir yüzde iyi mi kötü mü söylemez. Pano tasarımı için Koşullu biçimlendirme ve KPI'lar dersine bak.
Paranın zaman değeri: FV, PV, PMT
Bugünkü 1 TL, bir yıl sonraki 1 TL'den değerlidir; çünkü bugün yatırıp faiz alabilirsin. DAX, Excel'deki finansal fonksiyonların aynısını içerir. İşaret kuralı da Excel'deki gibidir: senden çıkan para negatif, sana gelen pozitif.
| Fonksiyon | Soru | Örnek | Sonuç |
|---|---|---|---|
FV(oran, dönem, ödeme, [bd], [tür]) | Her ay 10.000 TL yatırırsam 12 ay sonra ne birikir? (aylık %3) | FV(0.03, 12, -10000) | 141.920 TL |
PV(oran, dönem, ödeme) | 3 yıl boyunca yılda 120.000 TL almanın bugünkü değeri? (%30) | PV(0.30, 3, -120000) | 217.934 TL |
PMT(oran, dönem, bd) | 500.000 TL krediyi 24 ayda aylık %3,5 ile öderken taksit? | PMT(0.035, 24, -500000) | 31.136 TL |
Oranın ve dönemin aynı birimde olmasına dikkat et: aylık taksit için aylık oran ve ay sayısı. Yıllık %42 nominal oran aylık 0,42 / 12 = 0,035'tir. Son bağımsız değişken tür (type) ödemenin dönem sonunda (0, varsayılan) mı başında (1) mı yapıldığını söyler: FV(0.03, 12, -10000, 0, 1) 146.178 TL döndürür.
EVALUATE
ADDCOLUMNS(GENERATESERIES(12, 36, 12),
"Taksit", PMT(0.035, [Value], -500000),
"Toplam Ödeme", PMT(0.035, [Value], -500000) * [Value])
Vade 12 aydan 36 aya uzayınca taksit 51.742 TL'den 24.642 TL'ye iner; ama toplam ödeme 620.904 TL'den 887.115 TL'ye çıkar.
Yatırım kararı: XNPV ve XIRR
Net bugünkü değer (NBD, NPV): Bir yatırımın tüm nakit akışlarını, istenen getiri oranıyla bugüne indirip toplamak. NBD > 0 ise yatırım istenen getiriden fazlasını kazandırır. İç verim oranı (İVO, IRR): NBD'yi sıfır yapan oran; yatırımın kendi getirisi.
DAX'ta düzensiz tarihli akışlar için XNPV(tablo, değer, tarih, oran) ve XIRR(tablo, değer, tarih) kullanılır. İndirgeme ilk akışın tarihine göre, (gün farkı / 365) üssüyle yapılır. Akışlarda en az bir negatif ve bir pozitif değer olmalı. Örnek: Depo otomasyonu için 1 Ocak 2025'te 300.000 TL yatırım; sonraki iki yıl boyunca her çeyrek 50.000 TL ek brüt kâr (varsayımsal bir proje):
EVALUATE
VAR Akis = SELECTCOLUMNS(GENERATESERIES(0, 8),
"Tarih", EDATE(DATE(2025, 1, 1), 3 * [Value]),
"Nakit", IF([Value] = 0, -300000, 50000))
RETURN ROW(
"NBD (%25)", XNPV(Akis, [Nakit], [Tarih], 0.25),
"İVO", XIRR(Akis, [Nakit], [Tarih]))
Sonuç: NBD 13.920 TL, İVO %30,6. Şirketin istediği getiri %25 ise proje kabul edilir (NBD pozitif, İVO > %25). İstenen getiri %35 olsaydı NBD −10.159 TL olurdu ve proje reddedilirdi.
XNPV(Akislar, Akislar[Tutar], Akislar[Tarih], 0.25) biçiminde yazılır. Sorgu içinde SELECTCOLUMNS(GENERATESERIES(…)) ya da { (DATE(2025, 1, 1), -250000), … } tablo oluşturucusuyla küçük bir tablo kurmak deneme için yeterlidir.Ne olur parametresiyle duyarlılık
NBD, varsayılan orana çok duyarlıdır. Segmentasyon dersindeki ne olur (what-if) parametresi kalıbı burada da işler: Modelleme → Yeni parametre → Sayısal aralık ile 0,10–0,40 arasında 0,05 adımlı bir “İskonto Oranı” parametresi oluştur; ölçü SELECTEDVALUE ile seçili oranı okur.
NBD Senaryo =
XNPV(Akislar, Akislar[Tutar], Akislar[Tarih],
SELECTEDVALUE('İskonto Oranı'[İskonto Oranı], 0.25))
Parametre tablosunu bir çizgi grafiğin eksenine koyarsan duyarlılık eğrisini görürsün; eğrinin sıfırı kestiği nokta İVO'dur:
EVALUATE
VAR Akis = SELECTCOLUMNS(GENERATESERIES(0, 8),
"Tarih", EDATE(DATE(2025, 1, 1), 3 * [Value]),
"Nakit", IF([Value] = 0, -300000, 50000))
RETURN ADDCOLUMNS(GENERATESERIES(0.10, 0.40, 0.05), "NBD", XNPV(Akis, [Nakit], [Tarih], [Value]))
%10'da 59.949 TL, %20'de 27.750 TL, %30'da 1.336 TL, %35'te −10.159 TL. Satış tarafında aynı soruyu Segmentasyon dersindeki fiyat senaryosuyla sorarsın: fiyat %5 artarsa adet ve kâr ne olur? İkisini bir sayfada birleştirmek, yatırımın getirisinin fiyat varsayımına ne kadar bağlı olduğunu gösterir.