Reporting Service Filtreleme Teknikleri

Özellikle çok miktarda veri içeren veri tabanlarından, raporlama amacıyla veri alınırken, sadece ve gerçekten gerektiği miktarda veri çekmek gerekir. Böylece hem kaynak kullanımı azalır hem de raporun render edilişi hızlanır. İşte filtreleme bu gerekçelerle uygulanan bir işlemdir. Burada sorun; kullanıcının aynı oturumda, aynı raporu farklı seferlerde alırken, veri çekme kriterini değiştiriyor olma sorunudur.

Not  : Bu yazı “Reporting Service ile Raporlama” isimli kitabımdan bir alıntıdır. Konunun detayı ve devamı bu kitapta yer almaktadır. Bu yazıdan izinsiz alıntı yapılamaz !

Okumaya devam et

Reklamlar

İlk Ve Tek Türkçe Reporting Services Kitabı Çıktı !

Konusunda ilk ve tek Türkçe kaynak olma özelliğini taşıyan Reporting Services ile Raporlama isimli 6. kitabım Pusula Yayıncılıktan çıktı. Öncelikle kitaba yoğun emeği geçen; Selahattin Sarı (Grafik), Alper Zorlu (Düzelti), Gülendam Mallı, Derkan Karakoyun ve Mustafa Arslantunalı‘ya teşekkür ediyorum.Kitap düzgün bir Türkçeyle yazılmış tam bir “nasıl yapılır ?” kitabı karakteristiğini taşıyor. Pek çok başlık altında pratik örneklerle ele alınmış konuların sıklet merkezini development (geliştirme) tarafı teşkil ediyor. Ancak yine de belirli ölçüde yönetimsel ve alt yapıya dair başlıklar da söz konusu.Kitabı tüm kitapçılar ve derneğimizden de (C ve Sistem Programcıları Derneği) temin edebilirsiniz. info@aykuttasdelen.net adresinden mail ile ulaşırsanız kitabı imzalayıp kargo ile gönderebilirim.

Kitapla ilgili genel değerlendirmeler ve başlık özeti şöyle :

• Raporlamanın Temel Kavramları
• List, Table, Matrix, SubReport, Chart Kontrolleri
• Expression’lar ve Fonksiyonlar
• Özgün (Custom) Kodların Yazılması
• Assembly Kullanımı
• BLOB Verilerin Gösterimi
• Reporting Service Yönetimi
• Mail ile Rapor Gönderimi
• Uygulama Entegrasyonu
• Report Viewer Kontrolü
• URL ve Web Servisiyle Erişimler
• Rapor Modelleri ve Report Builder ile Ad-Hoc Raporlama
• Analysis Service’tan (OLAP) Raporlama
• Subscription’lar Oluşturma
• Ve diğerleri …

Genel Değerlendirmeler

1.  bölümde raporlama konusuna ilişkin temel kavramlar ve terminoloji ele alınmaktadır. Ayrıca sihirbaz kullanılarak basit bir örnek yapılmakta ve böylece okuyucunun konuya dair ana noktalar hakkında hızlıca fikir sahibi olması sağlanmaktadır.

2. bölüm ise rapor tasarımı, kontrollerin ve fonksiyonların kullanımı OLAP ve OLTP kaynaklarına nasıl bağlanılacağı, rapor şablonlarının oluşturulması ayrıca özgün kodların yazılması gibi temel geliştirme konularını detaylı ve örnekler üzerinden giderek irdelemektedir. Özellikle Business Intelligence Development Studio aracının nasıl kullanılacağı, Dataset’lerin nasıl oluşturulup manipüle edileceği, filtreler, parametreler, gruplamalar gibi önemli konular yine bu bölümde karşınıza çıkacak.

3. bölüm, geliştirilmesi tamamlanmış bir projenin rapor sunucusuna hangi yöntemlerle deploy edileceğini ve bu aşamada ortaya çıkması muhtemel sorunların çözümlerini ele almaktadır.

4. bölüm her ne kadar bu kitap bir dbadmin için yazılmış yönetim ağırlıklı konuları ele alan bir kitap olmasa da, Reporting Service üzerinde programlama yapan bir geliştiricinin de bir ölçüde bu konulara aşina olması gerektiği için, bu konular hakkında çok temel olan bilgileri okuyucuya kazandırmaktır. Söz gelimi raporların nasıl çalıştığı, snapshot ve cached instance’ların oluşturulması, subscription’ların yaratılması, mail ve dosya paylaşımıyla raporların deliver edilmesi ve güvenlik gibi yönetimsel konular ele alınmaktadır.

5. bölüm Reporting Service’in uygulamalara nasıl entegre edilebileceğine dair yöntemleri incelemekte ve örneklemektedir. URL ve Web Servisiyle erişimin yanı sıra WinForms ve ASP.NET uygulamalarında ReportViewer kontrolüyle raporların gösterimi bu bölümde ele alınmaktadır.

6. bölümde ise ad-hoc raporlama yani son kullanıcıların kendi raporlarını oluşturubilmesini sağlayan Report Builder isimli araç ve rapor model projelerinin geliştirilmesi anlatılmaktadır.

7. bölüm ise T-SQL sorgulama dili konusunda okuyucunun olası eksiklerini gidermeye yönelik bir referans bölümüdür.

Reporting Service Programatic Report Rendering Render Method

Not : Bu yazı Aykut TAŞDELEN’in Reporting Service kitabından alıntıdır, izinsiz kullanılamaz ve devamı söz konusu kitapta yer almaktadır !

Bir raporu programatik olarak görüntülemenin yolu ReportExecutionService::Render() isimli fonksiyonu kullanmaktır. İlk parametresine raporun path bilgisini alan bu fonksiyon, diğerlerinde de render işlemine ait farklı detayları alan veya dışarıya bilgi olarak veren parametrelere sahiptir. Byte dizisi biçiminde raporu döndürdüğü için istenilen bir formatta raporu masaüstü ya da web ortamında görüntülemek kolaydır.

publicbyte[] Render(

    string Format,

    string DeviceInfo,

    PageCountMode PaginationMode,

    out string Extension,

    out string MimeType,

    out string Encoding,

    out Warning[] Warnings,

    out string[] StreamIds

)

Dikkat : Bu fonksiyon ReportExecutionService isimli sınıfa ait olduğu için bu sınıfa ilişkin asmx dosyası da referanse edilmiş olmalıdır.

http://host/ReportServer/ReportExecutionXXXX.asmx

Bu fonksiyon output parametrelerine geçilen değişkenlere çalışması bittiğinde belirli değerler set etmekte olduğu için pratik kullanımda çoğu zaman null geçilerek çağrım yapılmaktadır. Ayrıca Reporting Service’in 2005 versiyonunda fonksiyonun ilk parametresi raporun path’ini alırken, 2008’de bu durum değiştirilmiş, dolayısıyla aynı işlem  artık ExecutionInfo sınıfının LoadReport() fonksiyonuyla yapılır hale getirilmiştir.

Aşağıdaki kodda bir ASP.NET uygulamasının bu servisi ve Render() metodunu kullanarak sunucudaki raporu nasıl render edip bir pdf dosyası haline getirdiği örneklenmektedir.

using rsServiceExec;

using System.Net;

using System.Web.Services.Protocols;

using System.IO;

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        ReportExecutionService rs = new ReportExecutionService();

        rs.Credentials = CredentialCache.DefaultCredentials;

        rs.Url =
          “http://127.0.0.1/ReportServer/ReportExecution2005.asmx”;

        // Render argümanları

        byte[] result = null;

        string path = “/Ornek_2.1/DrDnPersonelPuanMatris”;

        string format = “PDF”;

        string devInfo =
            @”<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>”;

        string encoding;

        string mimeType;

        string extension;

        Warning[] warnings = null;

        string[] streamIDs = null;

        ExecutionInfo execInfo = new ExecutionInfo();

        ExecutionHeader execHeader = new ExecutionHeader();

        rs.ExecutionHeaderValue = execHeader;

        execInfo = rs.LoadReport(path, null);

        // Raporun render edilişi

        try

        {

            result = rs.Render(format, devInfo,
                out extension, out encoding,
                out mimeType, out warnings, out streamIDs);

            execInfo = rs.GetExecutionInfo();

        }

        catch (SoapException exc)

        {

             Response.Write(exc.Detail.OuterXml);

        }

        // Raporun dosyaya kaydedilişi

        try

        {

            FileStream fs = File.Create
               (Server.MapPath(“report.pdf”),result.Length);

            fs.Write(result, 0, result.Length);

            Response.Write(“Rapor oluştu”);

            fs.Close();

        }

        catch (Exception exc)

        {

            Response.Write(exc.Message);

        }

    }

}

Aykut TAŞDELEN

aykuttasdelen@csystem.org

C Ve Sistem Programcıları Derneği Eğitmeni



Reporting Service Doküman Haritası Oluşturmak

How to create document map reporting service  ?

Not : Bu yazı Aykut TAŞDELEN’in Reporting Service kitabından alıntıdır, izinsiz kullanılamaz ve devamı söz konusu kitapta yer almaktadır !
Özellikle yüksek hacimli raporlarda, raporun istenilen bir yerine ulaşmak, kullanıcı açısından zor olabilmektedir. Doküman haritası ise bu zorluğu ortadan kaldırmayı amaçlayan bir navigasyon özelliğidir. Bu basit özellik raporun solundaki bir ağaç sayesinde grup veya kayıt düzeyindeki bir elemana kolayca ulaşabilmeyi sağlar. Şüphesiz bu ihtiyaç pratikte kayıt düzeyinde değil de grup düzeyinde daha çok gerekmektedir.

Rapordaki herhangi bir eleman DocumentMapLabel özelliğiyle doküman haritasına dahil edilebilir. Örneğin daha önce tasarladığımız ürünler raporunda kategori alanı bu amaç için kullanılabilir. Bunun için ilgili Textbox’ın DocumentMapLabel özelliği kullanılmaldır.

Rapor preview edildiğinde sol tarafta Urun kategorilerine ait bir ağaç oluşacak ve buradaki istenen bir kategorideki ürünlere çok daha kolay ulaşılabilinecektir. Ayrıca kullanıcı bu ağacı görmek istemezse araç çubuğundaki düğme aracılığıyla kapatabilir.

Reporting Service-Raporlara Link Eklemek

How to add link to Reports in RS ?

Not : Bu yazı Aykut TAŞDELEN’in Reporting Service kitabından alıntıdır, izinsiz kullanılamaz ve devamı söz konusu kitapta yer almaktadır !

Bazen bir rapordan başka bir rapora veya bir rapordan bir web adresine ya da raporun içindeki farklı bir alana link vermek suretiyle geçişler sağlanabilir. Link verme yani Action özelliği olan Textbox veya Image gibi kontrollere çalışma zamanında tıklanırsa bu işlev gerçekleştirilebilir.

Varsayılan durumda None olan Action özelliği :

Go to reportseçeneği; proje içerisindeki başka bir rapora geçiş için kullanılır. Bu seçenek seçildiği zaman alttaki listede projedeki diğer raporlar listelenir. Bu raporlardan istenen seçilmeli ve gerekiyorsa da Parameters bölümünden rapora parametre de geçilebilir.

Go to bookmarkseçeneği; web sayfalarında olduğu gibi aynı rapor içerisindeki başka bir alana geçilmesini sağlar. Bu seçenek seçildiğinde alt tarafta raporda geçilebilecek alanlar listelenecektir.

Go to URLseçeneği ise; belirli bir web adresine gidilmesini sağlar. Örneğin altlıktaki Textbox’ta bu özellik şirketin web adresine gidilmesi amacıyla kullanılmıştır.