Birden Fazla Tabloyu Ortak Sütun Üzerinden Bağlamak

Power Bi'ın en güçlü özelliklerinden biri, aynı anda birden fazla veri kaynağına bağlanarak tüm verileri tek bir veri modeli üzerinde analiz etmeye imkan vermesi.

Tek bir veri kaynağı olduğunda -diyelim ERP- genellikle tüm "entity"lerle ilgili bir tane master tablo oluyor. Örneğin "Ürünler" tablosu, örneğin "Müşteriler" tablosu. Bu tabloların temel özelliği ilgili boyutun tekil (unik) kayıtlarını -genelde- üzerinde zaten taşıyor olmaları. Yani tablolardaki Ürün Kodu, Müşteri Kodu gibi bilgiler hali hazırda tekil olarak geliyor. Dolayısıyla bu tabloları, transaction tablolarıyla (faturalar, irsaliyeler, siparişler, envanter hareketleri vs.)  birleştirmek kolay oluyor.

Birden fazla veri kaynağı olduğunda (ERP + CRM + diğer şirket içi uygulamalar) bazen bir sistemde olan -diyelim- "Müşteri Kodu" diğer sistemde olmayabiliyor.

Yukarıdaki örnekte, her üç transaction tablosunda müşteriyi tanımlayan sütunlar var (sütun isimleri hepsinde aynı değil). Müşterilerin bazıları tek tabloda var, bazıları iki tabloda var, bazıları hepsinde var.

Bu üç tabloyu birbirine nasıl bağlayacağız?

Her üç tablonun da ortak paydası olan müşteri kodlarını birleştirip, sadece  tekil  müşteri kodlarını içeren bir tablo yaratırsak, bu üç tabloyu birleştirebiliriz!

Müşteri kodlarını birleştirdiğimiz sütundaki değerlerin tekil olması lazım. Aksi taktirde tablolar arasında ilişki kuramayız. Önceki yazıdan hatırlatma yapmak gerekirse, iki tablo arasında bir sütun üzerinden ilişki kurabilmek için tablolardaki sütunlardan biri tekil değerleri içermek zorunda.

"Modelling" tabından "New Table" diyerek yeni bir tablo oluşturalım;

Tüm Müşteriler :=
UNION (
    DISTINCT ( 'Tablo 1'[Müşteri Kodu] );
    DISTINCT ( 'Tablo 2'[Müşteri Kodu] );
    DISTINCT ( 'Tablo 3'[Müşteri] )
)

Yeni oluşturduğumuz tek sütunluk "Tüm Müşteriler" tablosu tüm müşteri kodlarını içeriyor, fakat değerler  tekil değil . Tekilleştirmek için kodumuzu bir kademe daha ilerletelim; dönen değerlerin de tekil listesini oluşturacağız.

Tüm Müşteriler :=
DISTINCT (
    UNION (
        DISTINCT ( 'Tablo 1'[Müşteri Kodu] );
        DISTINCT ( 'Tablo 2'[Müşteri Kodu] );
        DISTINCT ( 'Tablo 3'[Müşteri] )
    )
)

Değerler tekilleşti. Her üç transaction tablosunu bağlayabiliriz artık.

Bir matris oluşturarak, hatta "slicer" ekleyerek müşterilere ait transaction'ları gösterebiliriz.


Buna benzer durumları Power BI'da çözmenin genellikle birden fazla yolu var. Aynı tekilleştirmeyi PowerQuery ile de yapabilirdik.

Son olarak, tabloyu oluşturduğumuz kodu bir kademe daha ilerleteceğim: Transaction tablolarından bazılarında satır seviyesinde Müşteri Kodu'nun olmadığını, "boş" olduğunu varsayalım. Bu bir veri hatası olurdu aslında ve kaynağı düzeltmek daha doğru olurdu böyle bir durumda. PBI ile modelleme yaparken en başta ve en sık karşılaşılan durumlar genellikle verinin "kirliliği" veya "olmamasıyla" ilgili oluyor.

Bu durumda Müşteri Kodu'nun olmadığı satırlar, yeni oluşturduğumuz tabloda tek bir "blank" satırı olarak gözükürdü. "Blank", PBI'ın algılamasına göre bir değerdir, "value"'dur. Müşteri kodu sütununun "Blank" içermesi durumunda bunu da filtreleyebiliriz.

Tüm Müşteriler :=
FILTER (
    DISTINCT (
        UNION (
            DISTINCT ( 'Tablo 1'[Müşteri Kodu] );
            DISTINCT ( 'Tablo 2'[Müşteri Kodu] );
            DISTINCT ( 'Tablo 3'[Müşteri] )
        )
    );
    NOT ( ISBLANK ( [Müşteri Kodu] ) )
)

Yazıdaki modeli indirebilirsiniz:

Sadece kayıtlı üyeler görebilir. Giriş veya Üyelik için login.