Power BI ‘da Tablo İlişkileri
Power BI ‘da Tablolar Arasında İlişki Kurma (Relationships)
Power BI’ da oluşturacağımız raporlarda birçok veriyi barındıran çok sayıda veri kümeleri olabilir. (Stok, Üretim, Müşteri verileri, Satış, Fatura, Sipariş, Sevk vb. verileri barındıran veri kümeleri)
Şirket yöneticileri tarafından istenen raporlarda bu veri kümelerinde bulunan bazı verilerin bir arada görüntülenmesi istenebilir. (Sipariş ve fatura bilgileri gibi.) Bu sebepten bu tabloları arasında bazı ilişkilendirmeler yapılması gerekir.
Power BI ’da bu tablo ilişkilendirmelerini yapabileceğimiz, ilişki özelliklerini tanımlayabileceğimiz bir Relationships ekranı bulunmaktadır.
Burada dikkat edilmesi gereken en önemli husus ister bir ERP yazılımına (Kurumsal Kaynak Planlaması)(AX, SAP, LOGO vb.) ait bir tablo olsun ister Excel’ den gelen bir tablo olsun, bu tablolar arasındaki ilişkilerin çok iyi belirlenmesi veya bilinmesi gereklidir.
Bu yazımda uygulayacağımız senaryoda MS SQL Server veri tabanından çekmiş olduğum Satış Temsilcilerinin yaptığı ciroların bulunduğu satış verileri (SQL Server’ dan Veri Çekme İşlemi başlıklı yazımı linki tıklayarak inceleyebilirsiniz.) ile Excel ‘ den çekmiş olduğum Satış Temsilcilerinin Aylık ve Yıllık hedeflerini barındıran veri küpünü (Excel Dosyasından Veri Alma İşlemi başlıklı yazımı linki tıklayarak inceleyebilirsiniz.) ilişkilendirip birleşik bir rapor oluşturmak. (Satış temsilcisinin yapmış olduğu yıllık cirosunun hedefi ile karşılaştırılmasını sağlamak)
Bunun için tablolar arası ilişki kuracağımız alanları belirleyelim.
- Fatura Tarihi (1-ŞİRKET SATIŞLARI Veri Küpündeki Alan) – Ay(Satış Temsilcisi Hedef Veri Küpündeki Alan )
- Satış Temsilcisi (1-ŞİRKET SATIŞLARI Veri Küpündeki Alan) – Satış Temsilcisi (Satış Temsilcisi Hedef Veri Küpündeki Alan )
Relationships Ekranı
1) Power BI Desktop uygulamasında aşağıda gösterilmiş olan işaretli alandan Relationships ekranından üzerinde, çalışma yaptığımız pbix dosyası içerisinde yer alan tabloları ve daha önce ilişki (relation) oluşturulmuş ise bu ilişkilerin hangi alanlarda oluşturulduğunu görebileceğimiz bölümdür.
2) Bazen bu bölüm o kadar karmaşık bir hal alır ki bir ürünün elektrik devre şemasını andırabilir :) Ama bu sizin gözünüzü korkutmasın bu oluşum zamanla edineceğiniz tecrübe ve powerzeka.com ‘ daki yazılarla daha anlaşılır bir hal alacaktır.
Tablo İlişkilerini Oluşturma (Join Tables)
1) Burada amacımız bu iki tablo arasında daha önce belirlediğimiz ikisinde de ortak bulunan alanları doğru olarak eşleştirmek.
Bunu yapabilmek için Power BI ‘ da ortak sanal tablolar oluşturulur ve bu tablolar ilişki kurulacak ana tablolarla birleştirilir. Bu cümlem kafanızı karıştırmış olabilir. Yazımın devamını incelerseniz ne anlatmak istediğimi görsellerle destekli daha iyi anlayacağınıza emin olabilirsiniz.
2) Öncelikle bu iki tabloyu birleştirebilmek için ilişki kuracağımız ortak alanları sanal bir tabloda tanımlayıp, oluşturmamız gerekir. (1-1 (Bire-bir) ilişki olmamasından dolayı bir tablo üzerinden birleştirme işlemini gerçekleştiriyoruz.)
Örneğimizde öncelikle Satış Temsilcisi (1-ŞİRKET SATIŞLARI Veri Küpündeki Alan) – SATICI (Satış Temsilcisi Hedef Veri Küpündeki Alan ) alanlarını birleştirmek (join) için Satış Temsilcisi Sanal Tablosu ‘ nu oluşturuyoruz. Bunun için Modelling sekmesinden New Table ‘ a tıklıyoruz.
3) Açılan kod satırına Satış Temsilcisi Sanal Tablosu = VALUES(İlgiliTabloİsmiVeyaKolonİsmi) yazılarak tanımlanır.
Burada dikkat edilmesi gereken husus ise ilişki kurulacak tablolar arasındaki 1-1 bir ilişki olmaması durumunda ortak alanın hangi veri kümesinde daha geniş kapsamda bulunduğunun tespitidir. Sanal tabloyu bu alanla oluşturduğumuz zaman ilişki kurma aşamasında bir hata oluşmayacaktır.
Şöyle ki ; bizim senaryomuzda Satış temsilcisinin yapmış olduğu yıllık cirosunun, satış hedefi ile karşılaştırılmasını sağlamak olduğu için satış temsilci verisinin daha geniş kapsamlı olduğu yer olan MS SQL Server veri tabanından çekmiş olduğum Satış Temsilcilerinin yaptığı ciroların bulunduğu veri küpündeki (1-ŞİRKET SATIŞLARI) Satış Temsilcisi alanını kullanacağım. Sizler de raporlarınızda uygun olan alanı seçerek bu sanal tabloyu oluşturmalısınız.
4) Görüldüğü gibi oluşturduğumuz sanal tablo Fields bölümünde görüntülenir duruma gelmiş oldu. Tekrar Relationships ekranına dönerek tablolar arasında ilişkiyi nasıl kuracağımıza bakacak olursak;
5) Kırmızı ile işaretlenmiş ana tabloları, yeşil ile işaretlenmiş sanal tabloyu kullanarak join işlemini yapacağız. Burada ilişki kuracağımız alanı sürükle-bırak metodu ile sanal tabloya bağlama işlemini gerçekleştireceğiz.
6) İlgili alanları sanal tabloya sürükleyip-bıraktık sonra aşağıdaki ekran görüntüsündeki gibi class diyagramlarına benzer bir simgeleme şekli ile bağlantılar görüntülenir.
Tablo İlişkilerini Kurgularken Bağlantı Ayarlarının Yapılması (Edit Relationship)
7) Bu bağlantıların neler olduğu daha karmaşık raporlarda ve zaman geçtikçe unutulabilir. Bunun için tabloların bağlantı bölümlerine tıklayarak açılan Edit relationship ekranından yapılan birleştirme işleminin hangi alanlardan yapıldığı (Her iki tabloda da ilişki kurulan alanlar koyu renk ile gösterilir.) görülebilir.
Cardinality bölümünden 1-N(Many to one), 1-1(One to one), M-1(Many to one) ayarları yapılabilir.
Edit Relationship M-M (Many to Many) desteklemez!
Ayrıca Cross Filter Direction bölümünden Single ve Both seçenekleri yapılan join işlemine göre seçilebilir.
8) Tablolar arasındaki ilişkiyi kurduğumuza göre artık bu iki tablonun birleşimini bir raporda görüntüleme bölümüne geçebiliriz. Bunun için sol bölümde bulunan Report simgesini seçerek rapor ekranına geçiş yapıyoruz.
Aralarında İlişki Kurulan Tablo Verilerinin Power BI Görsellerine Aktarılması (Visualizations)
9) Görsellerden (Visualizations) bir tablo (table) seçerek Values bölümüne sırasıyla sanal tabloda oluşturduğumuz Satış Temsilcisi, Excel dosyasından çekmiş olduğumuz Satış Temsilcisi Hedef veri küpünden HEDEF CİRO ve MS SQL Veri Tabanından çekmiş olduğumuz 1-ŞİRKET SATIŞLARI veri küpünden Satış Temsilcilerinin Ciro alanlarını ekliyoruz.
10) Eğer tablolar arasında ilişki kurmada bir problem yaşandıysa aşağıdaki tablolarda olduğu gibi rakamlarda sapmalar meydana gelecektir.
Burada yaptığımızı basit bir join işlemi gibi düşünebilirsiniz fakat zaman geçtikçe Power BI ‘ da oluşturacağınız birçok veri kümesinden oluşan karmaşık raporlarda bu durum sıkça başınıza gelebilir.
Böyle durumlarda tablo ilişkilerini dikkatlice tekrar gözden geçirmek gerekir.
11) Aşağıdaki ekran görüntüsünde ise tablolar arasında ilişki kurmadan önceki ve join işleminden sonraki tabloların birleşmiş bir halde nasıl görüntülendiğini inceleyelim.
12) Ayrıca bu tabloların artık birbirleriyle ilişkili olmasından dolayı görseller arası filtreleme yapılabilir durumdadır. Birleşik tabloda ya da diğer tablolarda herhangi bir satır seçildiğinde diğer tablolarda da o değerin filtrelendiğini görebilirsiniz.
Enter Data Özelliği İle Tablo Oluşturulması
13) Bu adımdan sonra ilişki kurma işlemini bir adım daha ilerletelim istiyorum. Şöyle ki; Excel dosyasından çekmiş olduğumuz Satış Temsilcisi Hedef veri küpünde bulunan ay bazında hedef ciroları daha değerlendirilebilir verilere dönüştürmek istiyorum.
Bir satış temsilcisinin aylık hedefinin yüzde kaçını gerçekleştirdiğini raporuma yansıtmak istiyorum.
Yukarıda yaptığımız işlemlerin yanı sıra bir de Excel dosyasından çekmiş olduğumuz Satış Temsilcisi Hedef veri küpünde bulunan tarihsel alanları (ay), MS SQL Veri Tabanından çekmiş olduğumuz 1-ŞİRKET SATIŞLARI veri küpündeki Fatura Tarihi-Ay ile ilişkilendirmemiz gerekiyor.
Bunun için tıpkı Satış Temsilcileri için oluşturduğumuz sanal tablo gibi Tarihler arasında bir ilişki kurmak için de bir tabloya ihtiyacımız olacak.
Bu bölümde, daha önce kullandığımız metottan daha farklı olarak Power BI ‘ ın Enter Data özelliğini kullanarak bir tablo (sanal tablo değil) oluşturacağız.
14) Power BI Desktop – Report ekranının üst menüsünde Home sekmesi altında bulunan Enter Data ‘a tıklıyoruz. (Aynı ekrana Edit Queries’ den de ulaşabilirsiniz.)
15) Name bölümünden ismini Date Table olarak değiştiriyoruz ve Load butonuna tıklıyoruz.
Fields bölümünde Date Table adında bir tablonun oluştuğunu görüyoruz. Bu tabloya veri girişi yapabilmek için Edit Queries ekranına geçiyoruz ve Date Table ‘ ın Source bölümüne çift tıklıyoruz.
16) Aşağıdaki alanları kapsayacak şekilde veri girişlerini yapıyoruz. (Buradaki örnekte ben sadece 2017 yılına ait bir raporlama yapacağım için sadece 2017 yılını ekledim siz de raporunuza uygun tarihleri aynı bu formatta ekleyebilirisiniz.)
17) Oluşturduğumuz kolonlar default olarak Text formatında oluşturulur.
Ama ilişki kuracağımız AY ID ve YIL alanlarının sayısal değerler olması gerekir. Bunun için değişiklik yapacağımız kolonu seçip Transform sekmesinden Data Type ‘ ını Whole Number olarak değiştiriyoruz.
Daha sonra Dosya sekmesinden Close & Apply ‘ ı tıklayarak Power BI Desktop Report ekranına tekrar dönüyoruz.
Enter Data Özelliği İle Oluşturulan Tablonun Diğer Tablolarla İlişkilendirilmesi (Relationships)
18) Relationships ekranına geçiş yaptığımızda artık Date Table adında bir tablonun daha oluştuğunu görüyoruz.
Şimdi sıra, MS SQL Veri Tabanından çekmiş olduğumuz Satış Temsilcilerinin yaptığı ciroların bulunduğu veri küpü (1-ŞİRKET SATIŞLARI) ile Excel dosyasından çekmiş olduğumuz Satış Temsilcilerinin Aylık ve Yıllık hedeflerini barındıran veri küpünü (Satış Temsilcisi Hedef) tarihsel olarak Date Table ‘ı kullanarak join işlemini gerçekleştirmek yani tarihsel olarak bir ilişki kurgulamakta.
Burada dikkat edilmesi gereken en önemli hususlardan biri 1-ŞİRKET SATIŞLARI veri küpündeki Fatura Tarihi alanındaki verilerin AY ID ve YIL alanlarına parçalanması gerektiğidir. Bunu yapmamanız durumunda bu örnekteki gibi bir ilişki yapmanızın imkânı yoktur. (Örneğin 06.09.2017 tarihli bir faturanın AY ID =9 ve YIL =2017 olacak şekilde kolonlara ayrılması gereklidir.)
19) Tabloları AY ID alanları ile Date Table ‘ ı kullanarak ilişkiyi oluşturuyoruz. Burada Excel ‘ den çekmiş olduğumuz Satış Temsilcilerinin Aylık ve Yıllık hedeflerini barındıran veri küpününde (Satış Temsilcisi Hedef) sadece 2017 yılına ait verilerin olmasından dolayı AY ID ile yapmış olduğumuz ilişki yeterli olacaktır.
Eğer birden fazla yılı kapsayan veriler olsaydı YIL ilişkisini de kurmamız gerekecekti.
20) Tablolar arasında Satış Temsilcisi ve tarihsel olarak ilişkilendirmeyi tamamladık. Şimdi bu verileri Power BI Görsellerine aktaralım.
21) Raporumuzda artık Satış Temsilcilerinin 2017 hedef cirolarına ve 2017 cirolarına ait verileri ay bazında Matris görselini kullanarak yansıtmış olduk.
Yeşil ile çevrelenmiş tablolar ilişki kurmak için oluşturduğumuz tabloları göstermektedir. Kırmızı ile çevrelenmiş diğer tablolar ise ana tablolarımızdır. (SQL Server’ dan ve Excel Dosyasından çekmiş olduğumuz verilerin oluşturduğu tablolar)
Bu görüntüleme de yapacağımız sadece ufak bir dokunuşumuz kaldı. Yazılarımı takip edenler bilir bu ufak sorunun çözümüne daha önce Excel dosyasından veri alma işlemi başlıklı yazımda bahsetmiştim.
Dikkat ederseniz aşağıdaki matris görselinde ayların dizilimi alfabetik sıralama ile oluşturulmuş, biz bunu yıldaki sıralarına çevirmemiz gerekiyor.
22) Fields bölümünden AY’ ları görsele taşıdığımız veri kümesindeki AY alanını seçip üst sekmede bulunan Modelling seçilir, daha sonra Sort by Column seçilerek oradan açılır pencereden AY ID seçilerek işlem tamamlanır.
Oldukça uzun bir yazı oldu fakat daha anlaşılır bir şekilde başka türlü anlatamazdım. Umarım sizin için faydalı bir yazı olmuştur. Konu ile ilgili bir öneriniz varsa iletmenizi çok isterim. Bir hatamız olduysa affola…
Görüşlerinizi, önerilerinizi ve sorularınızı yorum bölümüne yazabilirsiniz. Vakit buldukça cevaplamaya çalışacağım.
Görüşmek dileğiyle herkese iyi çalışmalar…
Bu konunun önemi henüz yeni yeni anlaşılıyor ülkemizde ve bu konuda çok az ve yetersiz Türkçe kaynak var. Gerçekten veri analizi ve görselleştirme için mükemmel ötesi bir uygulama. Power BI… Ama daha mükemmel olan bu aracı kullanmaya yönelik olarak yapmış olduğunuz anlatım ve eğitici yazılar. Gerçekten size ne kadar teşekkür etsem hakkınızı ödeyemem, beni ingilizce kaynaklar arasında boğulmaktan kurtardınız. Okan Bey ellerinize sağlık. Sağolun Varolun.
Bir şey daha söylemek isterim, Bu konuda görsel anlatım olan Türkçe kaynak bulmak gerçekten çok zor. Microsoft sites sıkıcı ve otomatik çeviri nedeniyle anlaşılmaz. Sayfaya ilk girdiğimde acaba ingilizce bir site ve google translate otamatik Türkçe’ye mi çevirdi diye sayfayı bir kaç kez yenilemek zorunda kaldım ve anlatımın Türkçe olduğuna en başta inanamadım bir an şaşkınlık, akabinde büyük bir mutluluk yaşadım. :) İyi ki sizin gibi insanlar var. Tekrar tekrar teşekkürler.
Murat Bey,
Güzel yorumunuz için teşekkür ederim. Power BI gerçekten veri analizleri ve görselleştirme açısından karar vericilere çok büyük avantaj sağlıyor. Türkçe kaynak sıkıntısı olduğunu fark ettiğim için kendi karşılaştığım sorunları, ihtiyacı olanlara yardımcı olması için bu blog’a aktarmaya çalışıyorum. Beğendiğinize sevindim. Takipte kalmanız dileğiyle.