RELATED ve RELATEDTABLE ile tablolar arasında değer taşımak
Beceri rehberi

RELATED ve RELATEDTABLE ile tablolar arasında değer taşımak

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

RELATED ile bire çok ilişkide başka tablodan değer getirme, RELATEDTABLE ile ilişkili satırları sayma, LOOKUPVALUE farkı ve ilişki yönü hataları anlatılıyor.

Ne zaman RELATED gerekir?

Veri modelinde bilgi farklı tablolara dağılmıştır: satışlar bir tabloda, ürünün kategorisi ve maliyeti başka bir tabloda. Bir satış satırının ürün kategorisini ya da birim maliyetini bilmek gerektiğinde, o değeri ilişki üzerinden bulmanız gerekir. RELATED tam olarak bunu yapar: mevcut satırın ilişkili olduğu başka bir tablodaki satırdan bir sütunun değerini getirir.

Bu, Excel'de düşey arama ile yapılan işin modeldeki karşılığıdır, ancak daha hızlı ve daha sağlamdır; çünkü eşleştirme zaten ilişkiyle tanımlıdır, her satırda yeniden aranmaz. Örnek:

Ürün Kategorisi = RELATED(Ürünler[Kategori])

Bu ifade Satışlar tablosunda bir hesaplanmış sütun olarak yazılırsa, her satış satırı için ilgili ürünün kategorisini getirir. Önkoşul, Satışlar ile Ürünler arasında bir ilişkinin bulunmasıdır ve ifadenin yazıldığı satır tarafı 'çok' tarafıdır.

RELATED'ın yönü: bire çok ilişkide çok tarafından bir tarafa

En sık yapılan hata yön karışıklığıdır. RELATED, satırın bulunduğu 'çok' taraftan, ilişkili 'bir' tarafa bakar. Yani Satışlar'dan Ürünler'e. Çünkü bir satış satırı yalnızca bir ürüne bağlıdır ve o ürünün sütun değeri belirsizlik olmadan getirilebilir.

Tersi yönde, Ürünler tablosunda bir satırdan o ürüne ait satışlara bakmak istediğinizde RELATED kullanılamaz; çünkü bir ürünün birçok satışı vardır ve hangisinin değerinin getirileceği belli değildir. Burada RELATEDTABLE devreye girer.

Özet kural: RELATED tek değer getirir ve çok tarafında çalışır. RELATEDTABLE tablo getirir ve bir tarafında çalışır. İlişkinin yönü, hangi fonksiyonun hangi tabloda yazılabileceğini belirler. İlişkiyi model görünümünde kontrol edin: oklar filtre yönünü gösterir, 'bir' ve 'çok' simgeleri ise tarafları.

Hesaplanmış sütunda RELATED ile marj hesabı

Gerçek bir iş örneği: satış satırında ürün maliyeti yok, yalnızca ürün tablosunda var. Satış satırı başına kâr hesaplamak için maliyeti ilişkiden alırsınız:

Satır Kârı = Satışlar[Tutar] - Satışlar[Miktar] * RELATED(Ürünler[Birim Maliyet])

Bu hesaplanmış sütun, Satışlar tablosunda her satır için kârı hesaplar. Ancak bu yaklaşım, veri yenilenince hesaplanır ve modeli büyütür. Alternatif olarak aynı mantığı bir iteratör ölçüsünde kurabilirsiniz:

Toplam Kâr = SUMX(Satışlar, Satışlar[Tutar] - Satışlar[Miktar] * RELATED(Ürünler[Birim Maliyet]))

İteratör satır bağlamı sağladığı için RELATED ölçü içinde de çalışır. Böylece modelde ek sütun tutmazsınız ve ölçü filtrelere duyarlı kalır. Hangi yöntemin seçileceği, sütunu başka yerde (filtre, ilişki, dilimleyici) kullanıp kullanmayacağınıza bağlıdır. Ölçü yazmayı tercih etmek, çoğu rapor modelinde daha sağlıklı sonuç verir.

RELATEDTABLE ile bir taraftan ilişkili satırlara bakmak

RELATEDTABLE, bir satır bağlamında o satırla ilişkili 'çok' taraftaki tüm satırları tablo olarak döndürür. Tek başına bir tablo verdiği için genellikle bir toplulaştırma fonksiyonuyla birlikte kullanılır.

Örnek: Müşteriler tablosunda her müşterinin sipariş sayısını bir hesaplanmış sütunda tutmak:

Sipariş Sayısı = COUNTROWS(RELATEDTABLE(Siparişler))

Bu ifade, müşteri satırı için ona bağlı sipariş satırlarını alır ve sayar. Aynı kalıpla toplam harcama (SUMX ile), son sipariş tarihi (MAXX ile) ya da hiç siparişi olmayan müşterileri bulmak (sayı sıfırsa) mümkündür.

Bu bilgi, müşteriyi sınıflandırmak gibi işler için çok değerlidir: tekrar sipariş veren, tek seferlik alan, uzun süredir sipariş vermeyen müşteri grubu bir hesaplanmış sütunla etiketlenebilir. Ancak yine aynı uyarı geçerli: etiket filtre bağlamına göre değişmeyecekse sütun uygundur, değişecekse ölçü olarak yazılmalıdır.

RELATED, LOOKUPVALUE ve ilişkisiz tablo

Modelde ilişki yoksa RELATED çalışmaz ve hata verir. Böyle durumlarda LOOKUPVALUE alternatiftir. LOOKUPVALUE, hedef sütun, arama sütunu ve aranan değer üçlüsüyle çalışır:

Kategori = LOOKUPVALUE(Ürünler[Kategori], Ürünler[Ürün Kodu], Satışlar[Ürün Kodu])

İlişki gerekmez; ama her satırda arama yapıldığı için büyük tablolarda yavaştır ve eşleşme birden fazla satır döndürürse hata ya da boş değer üretir.

Öneri açıktır: aralarında doğal bir anahtar varsa ilişki kurun ve RELATED kullanın. LOOKUPVALUE'yu ilişki kurmanın mümkün olmadığı ya da bilinçli olarak istenmediği durumlarda seçin. Bu karar modelin sağlığını etkiler; birçok geçici LOOKUPVALUE kullanımı, eksik ilişkinin belirtisidir.

İlişki zincirlerinde RELATED birden fazla adım ötedeki tabloya da ulaşabilir. Satışlar, Ürünler ve Kategoriler arasında bire çok ilişkiler zinciri varsa, Satışlar'dan Kategoriler'deki bir sütuna RELATED ile erişilebilir. Zincirdeki her ilişkinin etkin olması gerekir.

Sık hatalar ve kontrol listesi

  • RELATED'ı bir taraftaki tabloda çağırmak: hata verir. Yön yanlış; RELATEDTABLE gerekebilir.
  • Pasif ilişkiyle RELATED: pasif ilişki RELATED tarafından kullanılmaz. USERELATIONSHIP ölçüde gerekir, hesaplanmış sütunlarda ise ilişkiyi etkin yapmak ya da LOOKUPVALUE gerekir.
  • Hesaplanmış sütunları ağır ifadelerle şişirmek: her satırda RELATED çağrısı model boyutunu artırır.
  • İlişkili tablo yinelenen anahtar içeriyorsa ilişki kurulamaz ya da yanlış kurulur: önce boyut anahtarının benzersizliğini doğrulayın.
  • Boş değer: ilişkili satır bulunamazsa RELATED boş döner. Örneğin ürün tablosunda karşılığı olmayan bir ürün kodu raporda boş görünür; bu bir veri kalite sorunudur.

Bir başka pratik uyarı model boyutuyla ilgilidir. Satış tablosuna RELATED ile kategori, bölge, marka gibi birçok boyut sütunu kopyalamak, boyut tablolarının varlık nedenini ortadan kaldırır ve dosyayı şişirir. Bu bilgiler zaten ilişki sayesinde ilgili tablodan görsele getirilebilir; bir tabloda kategori adını göstermek için satış tablosuna sütun eklemenize gerek yoktur. RELATED'ı yalnızca bir hesabın içinde ara değer olarak ihtiyaç duyduğunuzda, örneğin maliyet çarpımında, kullanın.

Kontrol: hesaplanmış sütunu bir tabloda kaynak sütunla yan yana koyun, birkaç satırı elle doğrulayın. Boş çıkan satırları filtreleyip nedenini bulun. İlişki görünümünde kardinaliteyi ve yönü gözden geçirin.

Bu beceriyi Mindset programlarında nerede çalışırsınız

RELATED ve RELATEDTABLE, ilişkili tablolarla çalışmayı öğreten DAX konularındandır. Power BI İleri Düzey ve DAX eğitiminin 'DAX Diline Derinlemesine Giriş' modülü söz dizimini, Power BI Veri Modelleme eğitiminin 'Yıldız Şema ve Boyut Modelleme' modülü ise bu fonksiyonların dayandığı ilişki yapısını ele alır. Hem model kuran hem ölçü yazan BI geliştiricileri ve analistler için uygundur.

Kurumsal ekiplerde Excel'deki düşey arama alışkanlığından modele geçiş yapan raporlama ekipleri için RELATED, geçişin ilk pratik adımıdır.

İlgili Mindset programı

Power BI İleri Düzey ve DAX

Sık sorulanlar

Sık sorulan sorular

RELATED ile LOOKUPVALUE arasındaki fark nedir?

RELATED modeldeki ilişkiyi kullanır, hızlıdır ve yalnızca çok tarafından bir tarafa bakar. LOOKUPVALUE ilişki gerektirmez, arama sütunu ve değeri verirsiniz; ama büyük tablolarda daha yavaştır. İlişki kurulabiliyorsa RELATED tercih edilir.

RELATED neden hata veriyor?

En yaygın neden, fonksiyonun bir tarafındaki tabloda çağrılması ya da iki tablo arasında etkin bir ilişkinin olmamasıdır. Model görünümünde ilişkinin var, etkin ve doğru yönde olduğunu kontrol edin. İlişki yoksa kurun ya da LOOKUPVALUE kullanın.

RELATEDTABLE tek başına bir değer döndürür mü?

Hayır, tablo döndürür. Bu yüzden COUNTROWS, SUMX ya da MAXX gibi bir fonksiyonla sarmalayıp tek bir değere indirgemeniz gerekir. Örneğin bir müşteriye bağlı sipariş satırlarını sayarken COUNTROWS(RELATEDTABLE(Siparişler)) yazılır. Sonuç, o müşteriyi süzen her görsel satırında kendi sipariş sayısı olarak görünür; ilişki yönü tersse RELATEDTABLE de beklenen satırları getirmez.

RELATED ölçü içinde kullanılabilir mi?

Tek başına kullanılamaz, çünkü ölçüde satır bağlamı yoktur. SUMX gibi bir iteratörün içinde ise satır bağlamı oluştuğu için RELATED çalışır. Bu, maliyet gibi başka tablodaki bir değeri satır satır kullanarak toplam hesaplamanın yaygın yoludur.

DAX RELATED ve RELATEDTABLE Kullanımı Nasıl Yapılır