Sql Server Reporting Services – 2 [İlk Örnek]

Sql Server Reporting Services’ın ikinci yazısında bir raporun nasıl tasarlanacağını, RDL dosyasının nasıl oluşturulacağını, raporların nasıl yayınlanacağını, Report Manager arabirimini, gerektiği zaman raporların otomatikleştirilmesi ve Matrix, Table, List, Chart kontrollerinin örneklendirilmesini yazacağız. SSRS tasarımı ve düzeni VS.NET içerisinde “Business Intelligence” türünde bir projeyle gerçekleştirilir. Bu projeyi hem manual hem de VS.NET’in sunduğu sihirbaz aracılığıyla gerçekleştirebiliriz. Bununla ilgili basit bir örnek yapalım.
Daha önce SQL Server 2005 ile birlikte kurduğum “SQL Server Reporting Services” servisini başlatarak bir RDL dosyası oluşturacağız. Bunun için Visual Studio 2005 aracını kullanacağız. VS 2005’i açıp “New » Project” bölümünden “Report Wizard”ı kullanarak bir “Report Server” projesi oluşturacağız. “Report Project2” ismini verdiğim projeyi sihirbaz adımlarıyla oluşturuyoruz. İlk olarak bir veri kaynağı oluşturuyoruz. Kendi makinemdeki SQL Server 2005’e bağlanıp Deneme isimli veritabanını veri kaynağı olarak seçip DataSource1 olarak kaydettim. Bir sonraki ekranda “Query Builder” aracını kullanarak bir sorgu oluşturuyoruz. Bu sorgunun dinamik olarak hazırlayalım ki bu işleminde nasıl olduğunu öğrenelim. Query string bölümüne “SELECT MusteriId, AdSoyad FROM Musteri” sorgusunu yazalım. Eğer sorguyu parametrik yapmak istersek ilgili alanları @ işaretiyle değişken haline getirebiliriz. Örneğin dışarıdan aldığı ID bilgisinden büyük müşterileri listelemek için sorguyu şu şekilde değiştirmeliyiz. “SELECT MusteriId, AdSoyad FROM Musteri WHERE MusteriId > @MusteriId” Sonraki ekranlarda tasarım ve tablo ayarlarını yapıyoruz. Bu ekranda veya Designer içerisindeki Toolbox aracılığıyla rapor gösteriminin List, Table, Matrix, Chart tipinde olması sağlanabilir. Aynı şekilde eğer istersek sorgunun belli kolonlara göre gruplanarak, özetlenerek gelmesini de sağlayabiliriz. Ayarları hızlıca geçip “Report Project1¨ klasörü içerisine Report1 isimli rapor olarak kaydediyoruz.

Raporu Preview bölümünde öngörünümde incelemek için “View Report” düğmesini tıklayalım.

Görüldüğü gibi raporun PDF, Excel, MHTML formatında dışarı verilmesi için gerekli kaydeme seçenekleri de sunulmaktadır. Ayrıca raporun birden fazla sayfadan oluşması durumunda sayfalar arasında dolaşmak v eraporu tam ekranda görmek için gerekli düğmeler mevcuttur. Eğer sorgumuz parametrik olsaydı aşağıdaki gibi MusteriId parametresini isteyecekti. Buraya 1 yazıp “View Report” düğmesini tıklayarak raporu başlatabiliriz.

Burada sihirbazı kullanarak oluşturduğumuz için sayfa yapısını VS.NET kendisi otomatik olarak düzenler. Eğer farklı bir düzenleme yapmak istersek ekleme ve çıkarma işlemleri için hatta farklı veri kaynaklarını ekleyip sayfa düzenini değiştirmek için VS.NET içerisindeki Toolbox kullanılabilir.
VS.NET içerisinde raporu sağ tıklayıp rapor sunucusuna (Report Server) deploy edelim. Bu işlemden sonra sunucu üzerinde kurulu olaran raporlama sunucusuna bağlanıp sunucuya ait veritabanı üzerinde ilgili kayıt işlemi gerçekleşir. Deploy işleminin hangi sunucuya hangi bilgilerle kayıt edileceğini “Solution Explorer” içerisinde projeyi sağ tıklayarak Properties bölümünden düzenleyebiliriz.

Projeyi ilgili sunucuya deploy ettikten sonra örneğin ahmetkaymaz isimli sunucu üzerinden aşağıdaki adreste olduğu gibi projeye erişebiliriz.
http://ahmetkaymaz/ReportServer?/Report%20Project1/Report1
Buradaki ReportServer isim sub directory, SQL Server Reporting sunucusunun makinemdeki adıdır.

Ekrandaki “Select a format” bölümünde raporun sonucunun aynı kolaylıkta Excel, PDF formatında dışarı verebiliriz. Sunucu üzerindeki tüm raporları görmek için aşağıdaki virtual directory kullanılır.
http://ahmetkaymaz/Reports
Bu uygulama Report Manager olarak bilinir. Bu arabirimde raporlama aracı üzerinde oluşturulmuş olan klasörler, veri kaynakları, modelleri yönetebilir, raporların yetkilerini ve abonelerini düzenlenebilir.

http://ahmetkaymaz/Reports adresinde bir raporu seçtiğimizde raporla ilgili navigasyon sunulur.

Properties sekmesinde General, Data Sources, Execution, History ve Security bölümleri bulunur. Bu bölümler kullanılarak raporun tanımlayıcı bilgileri, kullandığı veri kaynakları, önbellekleme gibi çalışmasıyla ilgili tanımlar görülebilir gerekirse güncellenebilir.
Subscriptions bölümünde raporun kendilerine gönderileceği aboneler, üyeler tanımlanır. Örneğin raporun belli gün ve saatte otomatik olarak belirlenmiş kişilere gitmesi için üyeler tanımlanabilir.

Bu işlemlerde Subscriptions cannot be created because the credentials used to run the
report are not stored or if a linked report, the link is no longer valid
gibi bir hata alınırsa veri kaynaklarına bağlanırken kullanılan güvenlik bilgilerini düzenlemek gerekebilir. Bu da rapor seçildikten sonra Properties bölümünden düzenlenir. Raporların otomatik olarak gönderilmesi SQL Server Agent servisinin sorumluluğudur. Nitekim bir raporu otomatiğe bağladığımızda arka tarafta SQL Server Agent üzerinde bir Job oluşturulur.
VS.NET tarafına yani rapor tasarlama ekranlarına geri dönecek olursak Solution Explorer bölümünde bir rapor projesi yaratılırken varsayılan olarak gelen Shared Data Sources ve Reports klasörlerini görürüz. Shared Data Sources altında raporun kullandığı veri kaynakları tanımlanır. Bu veri kaynakları bahsettiğimiz gibi SQL Server, Oracle, MS Access olabildiği gibi XML dosyası da olabilir. Veri kaynakları Shared Data Source ve Report Specific Data Source olmak üzere iki tür şekilde tanımlanabilir. İsimlerinden de anlaşılacağı üzere Shared Data Source türündeki kaynaklar birden fazla rapor tarafından kullanılır. Bu veri kaynağı doğrudan raporlama sunucusunun kendisi üzerinde tutulur. Böylece her yeni raporda otomatik olarak bu kaynak kullanılabilir. Bu veri kaynakları raporlardan bağımsız olarak RDS dosyalarında XML formatında oluşturulur. Report Specific Data Source türündeki veri kaynağı ise doğrudan raporun kendisi içerisinde saklanır ve sadece o rapor tarafından kullanılır. Bu tür veri kaynaklarla ilgili tanımlar RDL dosyasının içerisine eklenir. Birden fazla raporun tek bir veri kaynağından besleniyor olması yönetimi kolaylaştırır.
Solution Explorer içerisindeki Reports klasörü RDL dosyalarının konulacağı alandır. Bir RDL dosyası oluşturulduğu zaman tasarım ekranın üst kısmında Data, Layout ve Preview sekmeleri bulunur. Data sekmesinde raporun kullandığı veri kümeleri (DataSet) gösterilir. Bir rapor birden fazla veri kümesinden oluşabilir. Bu veri kümeleri seçilerek ilgili SQL sorguları bu ekranda düzenlenir. Yeni bir DataSet oluşturulacağı zaman DataSet ile ilgili ADO.NET’ten bilinen birçok özellik belirtilebilir. Layout sekmesinde raporun son kullanıcı tarafından nasıl görüneceği tasarlanır. Tasarım yapılırken Toolbox altındaki Report Items kontrollerinden faydalanır. Burada görüldüğü gibi rapora çizgi, resim gibi malzemeler eklenebilir.

Bu bölümde asıl önemli olan Data Region olarak isimlendirilen dört kontrol mevcuttur. Tablo(Table), Matris (Matrix), Liste(List) ve Grafik (Chart) isimli bu kontroller DataSet içerisindeki verilerin gösterileceği alanı temsil edip verilerin nasıl gösterileceğini tasarlar.
Table kontrolünde verilerin klasik şekilde yani satır ve sütun ikilisine göre listelenir. Sütunlar statik, satırlar dinamiktir. Table kontrolünü tasarım alanına taşıdığımızda Body olarak bilinen alanda Header, Detail ve Footer isimli sanal bölümler oluşur. Header bölümünde, veri başlıkları, Detail bölümünde verilerin kendisi, Footer’da ise raporun alt kısmı görülür. RDL tasarımında Data sekmesinin altında seçtiğimiz DataSet aynı zamanda sol tarafta Toolbox penceresi gibi bağımsız olan Datasets penceresinde görülür. Ekrana Table kontrolü taşıdıktan sonra Datasets penceresindeki veri kümelerinin altındaki kolonları Table kontrolünün Detail bölümüne taşıyarak kolon ve satırlarımızı oluştururuz. Her field’i sürükle-bırak ile ekrana taşıdığımızda otomatik olarak kolon ismi oluşur. Kolon veya satır üzerinde değişiklik yapmak için ilgili alanı sağ tıklayıp Properties menüsünü kullanmamız yeterlidir. Örneğin kolon isimlerinin font değişim, renklendirilmesi Properties bölümünden düzenlenir. Kısacası SQL Server’den çektiğimiz tablonun kolon isimleri Header alanında, verilerin kendisi satır formatında Detail bölümünde, satır altı bilgileri Footer bölümünde gösterilir. Örneğin sayısal kolon toplamını Footer alanında gösterebiliriz. Yaptığımız değişiklikleri Preview sekmesi kullanarak anlık görebiliriz. Aşağıdaki şekilde kolon isimleri bold yapıldı, kolonlar renklendirildi ve satırları çerçeve çizildi.

Table türünde bir raporu elde etmek için Wizard’ı kullanırken “Select the Report Type” ekranında Tabular seçeneği seçilir.
Matrix kontrolünde Table kontrolünden farklı olarak hem sütunlar hem de satırlar dinamik olarak yerleştirilir. Table kontrolünde kontroller DataSet içerisindeki tablonun kolonları olabiliyor. Bu kontrolde ise çift boyutlu genişleme sözkonusu olup satır ve sütunlar dinamik olarak genişleyebilir veya daralabilir. Çalışma alanına Matrix kontrolünü ekleyerek Columns bölümüne Sehir kolonunu, Rows bölümüne AdSoyad kolonunu ve Details bölümüne Aidat kolonu ekleyelim.

Bu tasarımın görünümü şu şekilde olacaktır.

List kontrolü Table ve Matrix kontrolünden daha yetenekli olup hücrelerde Toolbox’ta kontrolleri kullanmaya imkan tanır, sadece satır ve sütun bazında değil hücre bazında da işlem yapılmasını sağlar.
Verileri Sıralamak
Listeleme esnasında listeyi belli kolonlara göre dinamik olarak sıralamak için tasarım anında o kolonların sıralama kolonu olduğunu belirtmek gerekir. Bunun için sözkonusu kolon veya kolonların Properties bölümünden “Interactive Sort” sekmesine girilir oradan sıralama ifadesi yazılır.

Bu işlemden sonra “Müşteri Kodu” kolonu link haline getirilir ve tıklanınca liste o kolona göre sıralanır.
Gruplanmış Veriler
Raporlama ekranların en çok yapılan işlem verilerin belli alanlara göre gruplanarak listelenmesidir. Bunu Wizard aracında yapmak için Tabular veya Matrix tipini seçtikten sonraki ekranda Group bölümüne veriler hangi kolona göre özetlenecekse o kolonlar eklenir. O ekranda aynı zamanda rapor ekranında drilldown’ın aktif olup olmayacağı da belirtilebilir. Tasarım ekranında özetleme işlemini yapmak için Table kontrolündeki Detail satır sağ tıklanıp Insert Group menüsü tıklanır. Gelen ekranın General sekmesindeki “Group On” bölümüne özetleme kolonları eklenir. Örneğin tablomuzu Şehir kolonuna göre özetleyelim.

Bu işlemin ardından veriler aşağıdaki gibi Sehir kolonuna göre gruplanmış olur.

Grup tanımlamalarını silmek için aynı şekilde Detail bölümü sağ tıklanıp Delete Groups menüsü, grupları düzenlemek için Edit Group menüsü tıklanır. Özetlemenin son kullanıcı tarafından okunabilir ve anlaşılabilir olması için drilldown da ekleyebiliriz. Bunun için Detail satırına ait Properties penceresinde Hidden özelliği True olarak set edilir ardından ToggleItem özelliğine özetlemenin yapıldığı kolon seçilir. Böylece aşağıdaki tasarımı elde etmiş oluruz.

Özetlemeyle ilgili diğer konu da ara toplam satırlarının olmasıdır. Yani her gruplanmış verilerin altında bir ara toplam satırı oluşturulur ve o satırda gruplanmış verilerin toplam değerleri yazılır. Örneğim bizim tabloda şehir bazında gruplama yaptığımız için her şehirde o şehirlerin toplam aidatlarını yazsın. Bunun için Wizard aracında rapor tipinin seçildikten sonra gruplama yapılacak kolonlar belirlendikten sonra drilldown’u aktifleştirdiğimiz ekranda “Include subtotals” seçeneği işaretlenir.

Ara toplam ve buna benzer kolonları özelleştirme işlemleri için Expression olarak tanımlanan ifadeler yazılır.

Sql Server Reporting Services – 2 [İlk Örnek]” üzerine 7 düşünce

  1. Fatih ÇAĞLAR

    Selamlar benim bi sorum olacak reporting servisle alakalı.ben belge listeleyen bi rapor yapmak istiyorum.belgeler jpg formatında ancak resimleri alt alta bastıramıyorum yardımcı olursanız memnun olurum saolun

    Cevapla
  2. Emre

    Merhaba Ahmet Bey,Siteniz çok faydalı bilgilerle dolu öncelikle bu çalışma için teşekkür ederim.
    Benim sorum raporların runtime’da kod ile oluşturulan datasetlerle çalışıp çalışamayacağı yönünde olacak.Raporlarımı runtime oluşturmak istiyorum bunu storeprocedure ile kısmen de olsa yapabiliyorum fakat wizard kullanmadan vb.net ya da c# ortamında kodla oluşturduğum dataset ile de yapabilirsem çok daha işimi görecek.Yardımcı olursanız çok memnun olurum.

    Cevapla
  3. Ahmet Kaymaz Yazar

    Merhaba Emre,rdl dosyalarını oluştururken kullanılan DataSet ile aynı şemaya sahip olduğu sürece runtime’de dinamik olarak bir DataSet oluşturabilirsin. RDL dosyasında hangi kolonların gösterileceği ve nerede görüneceği dosyanın içerisine yazıldığı için aynı şemayı korumak gerekiyor. Aksi durumda RDL dosyasını dinamik oluşturmak (RDL Generator) gerekir ki bu da çok zahmetli bir iş. Aşağıdaki adres mutlaka faydalı olacaktır.http://www.gotreportviewer.com/

    Cevapla
  4. Nesli

    Merhaba,
    Include subtotals seçeneğini seçtiğimiz pencereye nereden ulaştığımızın adım adım yolunu anlatır mısınız?
    Teşekkürler

    Cevapla
  5. Nesli

    Bu arada bir önceki mesajıma ek olarak; raporu wizard penceresinden değil de Item olarak kendim tasarladım. edit group diyerek grupladım ancak grupların başında toplamları alamıyorum.Nereden yapıyouruz?
    Bilgi için teşekkürler,siteniz bu anlamda çok faydalı..

    Cevapla
  6. Ömer Deniz

    Gerçekten çok başarılı bir yazı olmuş temel anlamında çok önemli hele bu kadar Türkçe kaynağın kısıtlı olduğu bir konuda.

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.