Üç tür ölçü
| Tür | Örnek | Davranış |
|---|---|---|
| Toplanabilir | Satış tutarı, adet | Her boyutta toplanır |
| Yarı toplanabilir | Stok adedi, banka bakiyesi, çalışan sayısı, abone sayısı | Ürünler/şubeler arasında toplanır; zamanda toplanmaz |
| Toplanamaz | Oran, ortalama, yüzde | Hiçbir boyutta toplanmaz; her düzeyde yeniden hesaplanır |
StokGorunum tablosu her ürünün her ay sonundaki stokunu tutar. 2024 satırında SUM(StokGorunum[StokAdet]) 12 ayın stokunu toplar; gerçek stokun yaklaşık 12 katıdır. Doğru cevap: yılın son görüntüsü.
Dönem sonu (kapanış) değeri
Stok Adedi = VAR SonTarih = CALCULATE(MAX(StokGorunum[Tarih])) RETURN CALCULATE(SUM(StokGorunum[StokAdet]), Tarih[Tarih] = SonTarih)
Alternatifler: LASTNONBLANK(Tarih[Tarih], CALCULATE(COUNTROWS(StokGorunum))) veri olan son günü bulur; CLOSINGBALANCEMONTH / QUARTER / YEAR takvimin son gününü kullanır (o gün veri yoksa boş döner).
SUMX(VALUES(Urunler[UrunNo]), CALCULATE(SUM(StokGorunum[StokAdet]), LASTNONBLANK(Tarih[Tarih], CALCULATE(COUNTROWS(StokGorunum))))).Dönem başı ve ortalama bakiye
Açılış Stoku = CALCULATE([Stok Adedi], PREVIOUSDAY(STARTOFMONTH(Tarih[Tarih]))) Ortalama Stok = AVERAGEX(VALUES(Tarih[YilAy]), [Stok Adedi])
Ortalama stok, stok devir hızı hesabında kullanılır: Stok Devir Hızı = DIVIDE([Net Maliyet], [Ortalama Stok Değeri]).
Toplanabilir yanı unutma
GelenAdet (depoya giren) toplanabilir bir hareket ölçüsüdür: SUM doğrudur. İyi bir stok raporu ikisini birlikte gösterir: hareket (giren/çıkan) ve görüntü (bakiye). Stok raporu bu ayrımı kullanıyor.
Yanlışın boyutu: SUM stoku ne kadar şişirir?
Depo müdürü yıl sonu raporunda “stok adedi” satırında 4.183 görüyor ve şaşırıyor. Depoda 311 ürün var. Fark, ay sonu görüntülerinin toplanmasından geliyor. Bunu tek sorguyla göster:
EVALUATE
SUMMARIZECOLUMNS(
Tarih[Yil],
"Toplanmış (yanlış)", SUM(StokGorunum[StokAdet]),
"Kapanış", [Stok Adedi],
"Toplanmış değer", SUM(StokGorunum[StokDegeri]),
"Kapanış değeri", [Stok Değeri]
)
| Yıl | SUM(StokAdet) | Kapanış adedi | SUM(StokDegeri) | Kapanış değeri |
|---|---|---|---|---|
| 2022 | 3.541 | 325 | 1.964.884 ₺ | 164.498 ₺ |
| 2023 | 4.181 | 309 | 2.048.566 ₺ | 166.057 ₺ |
| 2024 | 4.183 | 311 | 2.163.992 ₺ | 163.465 ₺ |
Toplanmış değer kapanışın 13 katından fazla. “12 ay toplandıysa 12 kat olmalı” diye düşünme: stok ay içinde dalgalandığı için oran sabit değildir. Bu yüzden yanlış sayıyı 12’ye bölerek “düzeltmek” de yanlıştır. Tüm dönem satırında fark daha da büyük: 11.905’e karşı 311.
Kapanışı bulmanın üç yolu
| Yöntem | Hangi günü seçer? | Zayıf noktası |
|---|---|---|
MAX(StokGorunum[Tarih]) ile (hazır [Stok Adedi]) | Görünen dönemde kaydı olan son gün | Bir ürün son ayda kaydedilmediyse o ürün kapanışta yok olur |
LASTNONBLANK(Tarih[Tarih], …) (hazır [Stok Değeri]) | İfadenin boş olmadığı son gün | Aynı sorun; ürün bazında çözüm için SUMX(VALUES(Urunler[UrunNo]), …) gerekir |
CLOSINGBALANCEMONTH / YEAR | Takvimin son günü (ay ya da yıl sonu) | O gün kayıt yoksa boş döner; ayın ortasına kadar süzülmüş bir dönemde bile ay sonunu getirir |
Bu modelde her ürünün her ay sonunda kaydı olduğu için üç yöntem aynı sayıyı verir. Gerçek hayatta öyle olmaz: yeni açılan bir ürün, satıştan kalkan bir ürün ya da geç gelen bir depo dosyası farkı ortaya çıkarır. Bir kenar durum daha: kullanıcı tarih dilimleyicisinde 1–15 Aralık 2024’ü seçerse [Stok Adedi] BLANK döner, çünkü bu günlerde görüntü yok. CLOSINGBALANCEMONTH ise 31 Aralık değerini getirir, yani seçilen dönemin dışındaki bir günü. İkisinden hangisi doğru, rapor sahibinin kararıdır. Ama kararı bilinçli ver ve görsel başlığına yaz.
Açılış, kapanış ve hareket mutabakatı
Stok kontrolünün temel denklemi: Kapanış − Açılış = Giren − Çıkan. Görüntü ölçüsü ile hareket ölçüsünü yan yana koymak veri kalitesini test eder.
Yıllık Stok Değişimi = VAR Kapanis = [Stok Adedi] VAR Acilis = CALCULATE([Stok Adedi], PREVIOUSDAY(FIRSTDATE(Tarih[Tarih]))) RETURN IF(NOT ISBLANK(Acilis), Kapanis - Acilis)
2023’te stok 325’ten 309’a indi (−16), 2024’te 311’e çıktı (+2). 2022 satırı BLANK’tir: veri Ocak 2022’de başlıyor, açılış görüntüsü yok. IF(NOT ISBLANK(Acilis), …) bu yüzden var. Yoksa ölçü 2022’de “+325” gösterirdi, yani bütün stok o yıl gelmiş gibi.
2024’te depoya 1.489 adet girdi ([Gelen Adet]). Denklemden çıkan adet 1.489 − 2 = 1.487 olur. Oysa [Satılan Adet] 1.426. Aradaki 61 adet fire, iade, sayım farkı ya da veri hatasıdır. Böyle bir fark rapordan önce tedarik ekibine sorulacak bir sorudur. Bir stok raporunun en değerli satırı bazen bu mutabakat satırıdır.
Ortalama bakiye ve devir hızı
Stok devir hızı “stok yılda kaç kez yenileniyor?” sorusunu cevaplar: dönem maliyeti / ortalama stok değeri. Ortalama stok, ay sonu görüntülerinin ortalamasıdır:
Ay Sonu Ortalama Stok Değeri =
AVERAGEX(VALUES(Tarih[YilAy]), [Stok Değeri])
Yıllıklaştırılmış Stok Devri =
DIVIDE([Net Maliyet], [Ay Sonu Ortalama Stok Değeri])
* DIVIDE(12, COUNTROWS(VALUES(Tarih[YilAy])))
2024: ortalama stok değeri 180.333 ₺, net maliyet 458.504 ₺, devir 2,54. Yıllıklaştırma çarpanı neden var? Tüm dönem satırında maliyet 36 ayın maliyetidir; çarpan olmadan sonuç “3 yıllık devir” olur ve yıllık sayılarla karşılaştırılamaz. Çarpanla tüm dönem 1,54. Kategori düzeyinde en hızlı dönen Kitap (2,36), en yavaş Spor (0,68). Spor’da ortalama 59.005 ₺’lik stok duruyor; nakit bağlayan kategori burası.