Yazının 4.bölümünde bir rapordan başka bir rapora atlamayı, alt rapor oluşturmayı ve en çok kullanılan parametrik raporları işleyeceğiz. Bazı karmaşık raporlarda raporlar arasında bağlantı kurup bir rapordan diğerine atlanılmak istenilebilir. Ana rapordan alt rapora (sub report) geçmek için link oluşturulur. Bir linki oluşturmak için Layout üzerindeki kontrole ait Properties penceresinden Action özelliği kullanılır. Link tıklandığı zaman diğer rapora geçmek için üç yöntem sunulur. Bunlar aşağıdaki şekilde gösterilmiştir.

None seçeneği bu kontrolün link olmadığını yani tıklanmayacağını belirtir.
Jump to report seçeneği proje içerisindeki başka bir rapora atlamak için kullanılır. Bu seçenek seçildiği zaman alt listede projedeki diğer raporlar listelenir. Parameters bölümünden rapora parametre olarak gönderilebilir veya fx tıklanarak önceki paragrafta bahsettiğimiz koleksiyon değerlerinden biri parametre olarak gönderilebilir.
Jump to bookmark seçeneği html sayfa tasarımından hatırlayacağımız üzere aynı rapor içerisinde başka bir alana atlanılmasını sağlar. Bu seçeneği seçtiğimizde alt tarafta raporda atlanılabilecek alanlar listelenir.
Jump to URL seçeneği girilmiş olarak URL adresine gidilmesini sağlar.
Parameterik Raporlar
Son olarak sayfanın başında sorgusunu verdiğimiz parametrik yapıdan bahsedelim. Raporu parametrik yapmak için sorgu içerisinde @ ile başlayan parametreler tanımlanır veya global parametre tanımlanabilir. Rapor üzerindeki parametreleri düzenlemek veya yeni parametre tanımlamak için VS.NET içerisindeki üst taraftaki Report bölümünden Report Parameters tıklanır. Bu bölümde parametrenin null olup olamayacağı, uyarı mesajının ne olacağı, default değerinin olup olmayacağı, dataset/global alanlarından gelip gelmeyeceği gibi bilgiler düzenlenir.
SELECT * FROM Musteri WHERE Sehir=@Sehir
Raporu beslediÄŸimiz Dataset’in sorgusunu bu ÅŸekilde düzenlediÄŸimiz otomatik olarak rapor için Sehir isimli parametre oluÅŸturulacaktır. Bu ve daha sonra oluÅŸturacağımız parametreler hakkında bilgiyi “Report » ReportParameters” menüsünden görülebilir.

Bu ekranda parametreler ilgili metin bilgisi (prompt), veri tipi (Data type), adı ve null kabul edip etmeyeceÄŸi gibi bilgiler düzenlenebilir. Bu ekrandaki en önemli alan parametre için muhtemel deÄŸerlerin belirlenmesidir. “Available values” bölümünde deÄŸerleri elle girebileceÄŸimiz gibi bir sorguya da baÄŸlayabiliriz. “Non-queried” seçeneÄŸini iÅŸaretleyip Label ve Value bölümlerine kullanıcının seçebileceÄŸi deÄŸerleri girelim ÖrneÄŸin ÅŸehirleri isimleri ve varsa kodlarıyla birlikte bu alana girebiliriz.

Bu durumda kullanıcıya aşağıdaki gibi tercihler sunulur.

Az deÄŸerli parametreler için muhtemel deÄŸerleri elle girmek mantıklı olsa da parametreleri doÄŸrudan veritabanından beslemek daha doÄŸru olacaktır. Bunun için “Available values” bölümünden From query seçeneÄŸi iÅŸaretlenir ve listenin hangi dataset’ten besleneceÄŸi seçilir. Bu iÅŸlemden önce tasarım tarafına geri dönüp Data bölümünde yeni bir Dataset oluÅŸturalım. İsmini DsSehir verdiÄŸim bu veri kümesinin sorgusunu aÅŸağıdaki gibi düzenledim.
SELECT DISTINCT Sehir FROM Musteri WHERE NOT Sehir IS NULL
Böylece Musteri tablosundaki Sehir kolonundaki değerleri listenmiş olacaktır. Report Parameters bölümüne geçip DsSehir veri kümesini seçiyorum.

Åžimdi raporumuzu MusteriId isimli yeni bir parametre ekleyeceÄŸiz. Ama bu parametredeki deÄŸerler Sehir parametresinin seçimine baÄŸlı olacak. Yani hangi ÅŸehir seçildiyse onun müşterileri listelenecek oradan seçilmiÅŸ olan müşterinin bilgileri gelecek. Bunun öncelikle raporun beslendiÄŸi ana dataset’in sorgusunu ÅŸu ÅŸekilde deÄŸiÅŸtiriyoruz.
SELECT * FROM Musteri WHERE MusteriId=@MusteriId
Ek olarak müşterileri ÅŸehir bazlı listeleyen bir dataset hazırlayacağız. Bu dataset’e DsMusteri ismini veriyorum.
SELECT DISTINCT MusteriId, AdSoyad FROM Musteri WHERE Sehir=@Sehir
Parametreler bölümüne geçip MusteriId parametresini DsMusteri veri kümesine bağlıyoruz.

Rapor ilk çalıştığında “Müşteri Id” giriÅŸ kapalı olacak. Her ÅŸehir seçildiÄŸinde bu liste seçilen ÅŸehir deÄŸerine göre düzenlenir.

Çok Seçmeli Parametreler
“Report Parameters” ekranında Properties bölümünde “Multi-value” seçeneÄŸi iÅŸaretlenerek çoklu seçim yapılmasına izin verilebilir. ÖrneÄŸin son kullanıcının birden fazla ÅŸehir seçmesine izin verelim. Bunun Sehir parametresinin “Multi-value” seçeneÄŸi iÅŸaretlenir. Ardından Müşterileri listeleyen dataset’in dışarıdan çoklu parametre alabileceÄŸi ÅŸekilde deÄŸiÅŸtirmeliyiz. Bunun için bilindiÄŸi gibi T-SQL’de IN ifadesi kullanılır. Sorgumuzu aÅŸağıdaki gibi deÄŸiÅŸtirelim.
SELECT DISTINCT MusteriId, AdSoyad FROM Musteri WHERE Sehir IN (@Sehir)
Bu durumda rapor ekranı aÅŸağıdaki gibi liste içerisinde chexbox’lı olacaktır.

Bu örnekte Ankara ve İstanbul seçildiÄŸi için SQL Server’e aÅŸağıdaki srogu gidecektir.
SELECT DISTINCT MusteriId, AdSoyad FROM Musteri WHERE Sehir IN (N'Ankara ',N'İstanbul ')
Rapor içerisinde kod yazarken parametre koleksiyonundan bir parametreye erişmek aşağıdaki sözdizimi kullanılır.
Parameters!MusteriId.Label veya Parameters!MusteriId.Value
Parametre örneğimizdeki Şehir gibi çok seçmeliyse dizi gibi yorumlanmalıdır.
Parameters!Sehir.Value(0) veya Parameters!Sehir.Label(0)
Bir rapordan ikinci bir rapora parametre de gönderilebilir. Åžu ÅŸekilde bir örnek yapalım. İlk raporumuzda tablodaki ÅŸehirleri listeleyelim. İkinci raporda ise ana raporda tıklanmış olan ÅŸehrin müşterilerini yazdıralım. Öncelikle ikinci raporda Åžehir parametresi tanımlayacağız ve sorguyu ona göre düzenleyeceÄŸiz. Ardından ana raporda her satırı link haline getiriyoruz. Bunu yapmak için sözkonusu kolon saÄŸ tıklanır Properties bölümünden “Textbox Properties” penceresi açtırılır. Bu pencerede Navigation sekmesinde Hyperlink action bölümünden “Jump to report” seçeneÄŸi iÅŸaretlenir. Açılan listeden ikinci rapor seçilir. Yan taraftaki Parameters düğmesini tıklayıp ikinci rapordaki parametrelere ulaşıp onlara deÄŸer atayabiliriz. Böylece iki rapor arasında baÄŸlantı kurulmuÅŸ olur.




Ekim 3rd, 2009 at 22:13
Merhabalar,
Öncelikle makaleleriniz için çok teşekkür ederim, çok yardımcı oldu. Bir sorum olacaktı:
İki tarih arasındaki istatistik veri çekmek istiyorum.
Deploy ettiğim bir raporu, reportviewerda gösterip , arayüzden parametre vermek istiyorum. Reportviewer ın reportserverurl ve pathini ayarladım, fakat hata veriyor. Datasetim kullandığım web projesinde olmadığı için mi? bunun bir çözümü var mı?
teşekkür ederim
İyi günler
Teşekkürler Tekrardan
Ekim 5th, 2009 at 20:34
Merhaba,
tam olarak sorunuzu anlayamadım. Nasıl bir hata verildiğini yazabilirseniz daha iyi yardımcı olabilirim. Parametre oluşturma aşamasına mı takıldınız.