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.




Aralık 24th, 2009 at 18:22
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
Aralık 25th, 2009 at 21:20
Fatih,
sorunu tam olarak anlayamadım. Diskte 1.jpg, 2.jpg şeklinde bulunan resimleri mi gösteremiyoruz ? Konuyla ilgili aşağıdaki linkleri kontrol edebilirsin.
http://blog.toddtaylor.com/PermaLink,guid,b1517702-ad4b-48e1-a6e3-b736e8a982cb.aspx
http://www.kodyaz.com/articles/reporting-services-display-dynamic-image.aspx
Ocak 2nd, 2010 at 22:16
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.
Ocak 5th, 2010 at 09:22
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/
Nisan 16th, 2010 at 10:06
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
Nisan 16th, 2010 at 10:24
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ı..
Kasım 22nd, 2011 at 10:20
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.