- Tek takvim, çok tarih: sorun nerede başlıyor
- USERELATIONSHIP ne yapar, nasıl yazılır
- Adım adım: teslim tarihine göre ölçü yazmak
- Birden çok ilişki, iç içe CALCULATE ve diğer filtre değiştiriciler
- Kısıtlar ve tipik hata mesajları
- USERELATIONSHIP mi, ayrı takvim kopyası mı
- Bu beceriyi Mindset programlarında nerede çalışırsınız
- Sık sorulan sorular
Sipariş ve Teslim Tarihi Aynı Takvimde: USERELATIONSHIP ile Pasif İlişki Kullanımı
Bir olgu tablosunun birden çok tarih sütunu varsa takvim tablosuna yalnız biri etkin bağlanır. USERELATIONSHIP, ölçü hesaplanırken geçici olarak diğer ilişkiyi devreye alır ve aynı takvim üzerinden farklı tarihe göre toplamanızı sağlar.
Bir bakışta
- Etkin ilişki varsayılan tarihi belirler. Rapor, takvim dilimleyicisini hangi ilişki etkinse onun tarihine göre süzer.
- USERELATIONSHIP yalnız ilgili ölçüde diğer ilişkiyi açar. Ölçü hesaplanırken kullanılır, hesap bitince ilişki eski durumuna döner.
- Yalnız süzgeç alan fonksiyonların içinde çalışır. CALCULATE ve zaman zekası toplam fonksiyonları gibi yapılarda kullanılabilir.
- Satır düzeyi güvenlik tanımlıysa dikkat gerekir. Güvenlik tanımlı tabloda aynı ölçü hata döndürebilir.
Tek takvim, çok tarih: sorun nerede başlıyor
Bir sipariş tablosunda genellikle birden çok tarih sütunu vardır: sipariş tarihi, sevk tarihi, teslim tarihi, fatura tarihi. Hepsini aynı takvim tablosuna bağlamak isteyebilirsiniz; çünkü takvimdeki yıl, ay ve hafta sütunlarının hepsine aynı dilimleyiciyle ulaşmak istersiniz.
Ancak Power BI'da raporda süzgeç taşıyan ilişki etkin ilişkidir. Takvim ile sipariş tablosu arasında sipariş tarihi etkin olarak bağlıysa, bir ay dilimleyicisi seçtiğinizde hesaplanan her toplam o ayda verilen siparişlerdir. "Bu ay teslim edilen siparişlerin tutarı" sorusu ise başka bir ilişkiye ihtiyaç duyar.
Çözüm yolları arasında ayrı bir takvim kopyası kurmak ya da USERELATIONSHIP ile aynı takvimi farklı bir tarihe geçici olarak bağlamak vardır. Bu sayfa USERELATIONSHIP yolunu anlatır: model sade kalır, tek takvim tablosu üzerinden çalışılır, hangi tarihe göre hesaplandığı ise ölçünün adında ve formülünde görünür.
USERELATIONSHIP ne yapar, nasıl yazılır
Fonksiyonun söz dizimi sütun adlarından oluşur: USERELATIONSHIP ( sütunA, sütunB ). Microsoft belgesine göre bu sütunlar, kullanılacak ilişkinin uçlarıdır. Genellikle sütunA ilişkinin çok tarafını (olgu tablosundaki tarih), sütunB ise bir tarafını (takvimdeki tarih) gösterir; ters sırada verilirseniz fonksiyon sırayı kendi düzeltir. Argümanlar bir ifade olamaz, tam nitelikli sütun adı olmalıdır.
Fonksiyon bir değer döndürmez. Yalnızca belirtilen ilişkiyi, içinde bulunduğu hesaplama süresince etkinleştirir. Belge, ilişkinin etkin olup olmamasının önemli olmadığını da vurgular: etkin olmayan bir ilişki bile kullanılır ve aynı tablolar arasında hesapta adı geçmeyen etkin ilişkinin yerine geçer.
Fonksiyon tek başına yazılmaz; bir süzgeç argümanı alan fonksiyonun içinde durur. En yaygın yeri CALCULATE'tir. Aşağıdaki şema, bir ölçünün farklı ilişkilerle nasıl çalıştığını özetler.
Aynı takvim, ölçü içinde farklı tarihe bağlanır
Etkin ilişkiden ölçü sonucuna
- Etkin ilişkiTakvim, sipariş tarihine bağlıdır; rapordaki varsayılan süzgeç budur.
- Ölçüde USERELATIONSHIPEtkin olmayan teslim tarihi ilişkisi yalnız bu hesaplama için açılır.
- SonuçAynı ay dilimleyicisi, teslim tarihine göre toplanmış değeri gösterir.
Adım adım: teslim tarihine göre ölçü yazmak
Kurgusal bir sipariş modeli düşünün: Sipariş tablosunda Sipariş Tarihi ve Teslim Tarihi sütunları, ayrı bir Takvim tablosu var. Takvim'in Tarih sütunu tüm tarih sütunlarıyla ilişkilenmiş; sipariş tarihi ilişkisi etkin, teslim tarihi ilişkisi etkin olmayan olarak tanımlı.
Uygulama sırası şöyle işler: • Temel ölçüyü yazın: Toplam Tutar = SUM ( Sipariş[Tutar] ). Bu ölçü, takvim dilimleyicisine sipariş tarihi üzerinden tepki verir. • Teslim tarihli ölçüyü ekleyin: Teslim Edilen Tutar = CALCULATE ( [Toplam Tutar], USERELATIONSHIP ( Sipariş[Teslim Tarihi], Takvim[Tarih] ) ). • Bir matrise Takvim'den ay sütununu, değerlere her ölçüyü yerleştirin. • Aynı satırda "ay içinde alınan" ve "ay içinde teslim edilen" tutarlar yan yana görünür; aradaki fark, teslimat gecikmesini ya da aylar arası taşmayı gösterir.
Bu örnek Microsoft belgesindeki mantığın aynısıdır: belgede etkin ilişki sipariş tarihi, devreye alınan etkin olmayan ilişki sevk tarihidir ve ölçü adı hangi tarihe göre hesaplandığını söyler. Ölçü adına "teslim tarihine göre" ya da benzeri bir ifade eklemek, rapor okuyucusunun ölçüleri karıştırmasını önler.
Birden çok ilişki, iç içe CALCULATE ve diğer filtre değiştiriciler
Bir hesapta takvim ile olgu tablosunu bağlayan birden çok ilişki gerekiyorsa, her biri ayrı bir USERELATIONSHIP çağrısıyla belirtilmelidir. Aynı iç içe CALCULATE yapısında birden çok USERELATIONSHIP çatışırsa, en içteki geçerli olur.
CALCULATE belgesi USERELATIONSHIP'i bir süzgeç değiştirici olarak listeler. Etkin olmayan ilişkiyi devreye aldığınızda, aynı sütunlar arasındaki etkin ilişki otomatik olarak etkin olmaz. Aynı listede ALL, REMOVEFILTERS, KEEPFILTERS ve CROSSFILTER gibi fonksiyonlar da vardır; bunlarla birleştirmek mümkündür. Örneğin USERELATIONSHIP ile teslim tarihine geçip aynı CALCULATE içinde başka bir boyuttaki süzgeci kaldırabilirsiniz.
Bir sınır daha: bire bir ilişkilerde fonksiyon ilişkiyi yalnız tek yönde etkinleştirir. Çift yönlü süzgeç gerekiyorsa, aynı hesapta ters yönlü USERELATIONSHIP çağrıları birlikte yazılır. Bu ayrıntı çoğu rapor için gerekmez, ancak ilişki kuralları karışık modellerde sürpriz hatanın kaynağı olabilir.
Kısıtlar ve tipik hata mesajları
Fonksiyonun bilinen kısıtları şunlardır: • Yalnız süzgeç alan fonksiyonlarda çalışır: CALCULATE, CALCULATETABLE ve dönem başı/sonu bakiye ile dönem başından bugüne toplam fonksiyonları gibi. • Ölçünün bulunduğu tabloda satır düzeyi güvenlik tanımlıysa kullanılamaz; belgede, güvenlik tanımlı tabloya ilişkili örnek formülün hata vereceği belirtilir. • Argümanlardan biri hiçbir ilişkinin parçası değilse ya da sütunlar farklı ilişkilere aitse hata döner. • İlişki modelde hiç yoksa fonksiyon bir ilişki yaratmaz; önce ilişkiyi modelde tanımlamanız gerekir.
Sorun giderirken önce sütunların gerçekten bir ilişkinin uçları olup olmadığına bakın, sonra o ilişkinin başka bir etkin ilişkiyle çakışıp çakışmadığını kontrol edin. Hata yoksa ama sayılar beklenenden farklıysa, ölçünün beklediğiniz ilişkiyi mi kullandığını anlamak için sipariş ve teslim tarihi örneğinde bilinen bir ay seçip elle toplamla karşılaştırın.
Satır düzeyi güvenlik kullanıyorsanız, bu kısıt modelleme kararını etkiler; güvenlik kurallarını ve ilişkileri birlikte tasarlamak gerekir.
USERELATIONSHIP mi, ayrı takvim kopyası mı
Her çoklu tarih sorusu USERELATIONSHIP gerektirmez. Sipariş ve teslim olaylarını aynı grafikte ayrı tarih alanları olarak göstermeniz gerekiyorsa tek takvim tablosu yetmeyebilir; çünkü eksen tek bir tarih alanına bağlıdır. Böyle bir görselde sipariş ve teslim için ayrı takvim kopyaları (ayrı tarih tabloları) düşünülebilir.
USERELATIONSHIP, aksine, aynı takvim ekseninde farklı ölçüler gösterecekseniz idealdir: eksen ay, değerler ise "alınan" ve "teslim edilen" tutarlardır. Model tek takvimle sade kalır ve zaman zekası fonksiyonları tek bir tarih tablosuna dayanır.
Karar verirken sorun şudur: farklı tarihleri ayrı eksenlerde mi karşılaştırıyorum, yoksa aynı eksende farklı ölçüler mi gösteriyorum? İlk durumda ayrı takvim, diğerinde USERELATIONSHIP daha rahat çalışır. Kalıbı seçtikten sonra ölçü adlandırmasını tüm raporda tutarlı tutmak, bakım maliyetini düşürür.
Bu beceriyi Mindset programlarında nerede çalışırsınız
Power BI İleri Düzey ve DAX programı, "CALCULATE ve Filtre Bağlamında Ustalaşmak" ve "Zaman Zekası ve Dönem Analizi" başlıklarıyla USERELATIONSHIP'in doğal bağlamını kapsar: ilişkiler, filtre bağlamı ve dönem karşılaştırması bir arada çalışılır. Sipariş, lojistik ve satış operasyonları ekiplerinde teslim tarihine göre raporlama sık görülen bir ihtiyaçtır.
Uygulamalı Power BI ile Veri Analitiği ve Görselleştirme Sertifika Programı'ndaki "Veri Modelleme ve Yönetimi" başlığı ise ilişki kurulumunu temelden ele alır.
İlgili Mindset programı
Power BI İleri Düzey ve DAX
Sık sorulan sorular
Etkin olmayan ilişki Power BI'da ne işe yarar?
Aynı tablolar arasında birden çok tarih sütunu ilişkisi gerektiğinde, yalnız biri raporda varsayılan olarak süzgeç taşır. Diğerleri etkin olmayan ilişki olarak tanımlanır ve yalnız USERELATIONSHIP ile çağrıldıklarında çalışır. Böylece sipariş ve teslim tarihi gibi alternatif tarihler tek takvim üzerinden kullanılır.
USERELATIONSHIP yalnız etkin olmayan ilişkilerde mi kullanılır?
Hayır. Microsoft belgesine göre ilişkinin etkin olup olmaması işlevi etkilemez. Etkin olmayan bir ilişki de kullanılır, etkin bir ilişki de. Fonksiyon, hesapta belirtilen ilişkiyi devreye alır ve aynı tablolar arasında adı geçmeyen diğer etkin ilişkinin yerine geçer.
Hangi fonksiyonların içinde kullanabilirim?
Yalnız süzgeç argümanı alan fonksiyonların içinde. Belge, CALCULATE ve CALCULATETABLE ile dönem başı ve sonu bakiye fonksiyonlarını ve dönem başından bugüne toplam fonksiyonlarını sayar. Tek başına bir sütun ifadesi olarak ya da SUM gibi fonksiyonun içinde doğrudan kullanılamaz.
Satır düzeyi güvenlik varken neden hata alırım?
Belgeye göre USERELATIONSHIP, ölçünün bulunduğu tabloda satır düzeyi güvenlik tanımlıysa kullanılamaz ve hata döndürür. Güvenlik kuralı ile ilişkiyi geçici değiştiren ölçü birlikte kullanılamaz. Çözüm için güvenlik kuralları ile ilişki tasarımını birlikte gözden geçirmek gerekir.
İlişkiyi hiç kurmadan USERELATIONSHIP yazabilir miyim?
Hayır. Fonksiyon modelde zaten var olan bir ilişkiyi, uçlarındaki sütunlarla tanımlar. Sütunlar bir ilişkinin parçası değilse ya da farklı ilişkilere aitse hata döner. Önce modeli kurun, sonra ilişkiyi ölçüde çağırın.