Reporting Service 2 Renkli Dinamik Table

İpucu : Reporting Service’te Table kontrolüyle kayıtlar gösterildiğinde bir kayıtta farklı bir arka plan rengi diğer bir kayıtta farklı bir arka plan rengi olsun istenebilir. (ASP.NET’teki Grid gibi) Bu durumda satır içindeki tüm Textbox’ların BackgroundColor özelliğine aşağıdaki gibi bir expression yazılmalıdır :

=iif(RowNumber(Nothing) Mod 2 = 0, “Silver”, “White”)

Bu konuda daha detaylı bilgi ve farklı örnekler görmek için
https://aykuttasdelen.wordpress.com/2010/08/16/how-to-conditional-formatting-in-reporting-services/
yazımı okuyunuz.

Reklamlar

Reporting Service Kontrolün Rapor Üzerine Yerleşimi

İpucu : Reporting Service’te rapor tasarımı sırasında bir kontrolü rapor üzerine yerleştirip mouse ile yeri belirlenmeye çalışılırken birkaç piksellik atlamalar olduğu için istenilen yere tam yerleşim yapılamamaktadır. Bu arada klavyeden ctrl tuşuna da basılırsa daha net bir yer belirleme işlemi yapılabilir.

Ücretsiz Free SP Generator , Dinamo Çıktı !

C ve Sistem Programcıları Derneği eğitmenlerinden Aykut TAŞDELEN’in geliştirdiği ücretsiz bir araç olan DinamoSPGenerator çıktı.
SQL Server üzerinde uygulama geliştirenlerin sıkça yaşadığı bir sorun olan CRUD işlemlerinden sorumlu stored procedure’leri elle yazmaya bu araç sayesinde ihtiyaç kalmıyor. Bu aracı aşağıdaki adresten sıkıştırılmış bir dosya biçiminde indirip açmanız ve içinden çıkan setup.exe’yi çalıştırmanız yeterli. Start menüsünde “CSD” isimli bir klasör içinde oluşacak olan kısayoldan uygulamanızı çalıştırabilirsiniz.

Dikkat : 18 Kasım 2010 itibariyle uygulamanın eski versiyonu zaman aşımına uğramaktadır Bu nedenle kullanmaya devam etmek isteyenler aşağıdaki download linkinden yeni versiyonu indirip yine ücretsiz kullanmaya devam edebilirler.

http://www.aykuttasdelen.net/downloads/Dinamo_SPGenerator_Kurulum.zip

Bir sihirbaz mantığıyla yazılmış olan bu araçta kullanılan teknoloji; WPF (Windows Prensentation Foundation). Ayrıca çok kısa bir zaman içinde bu aracın Visual Studio ile entegre çalışan bir eklenti add-on biçimi de kullanıma açılacak.

C ve Sistem Programcıları Derneğinde vermekte olduğum eğitimlerde öğrenci arkadaşlara bir örnek teşkil edebilmesi için yazdığım bu uygulamayı diğer yazılımcı dostlarımla da paylaşmak istedim. Amacım öğrencilerimi hazır yazılmış 3. parti araçlar veya bileşenler kullanmak yerine bilinç düzeylerini arttıracak, arka planında (kendileri geliştirdiği için) ne olup bittiğini bildikleri yapıları kullanmaya teşvik etmek. Diğer  klişe eğitim kurumlarından farklı bir vizyonla kendi derleyicimizi kendi işletim sistemimizi yazmak ve bunu da diğer meslektaşlarımızla paylaşmak vizyonumuzun bir projeksiyonu. Benzer şekilde bundan sonraki ASP.NET eğitimlerinde IIS’e alternatif basit bir web sunucu ile tarayıcı geliştirmek ve onları kullanmak cihetine gideceğiz.

İ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.

Analysis Service Nedir ? What is Analysis 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 !

Bilindiği gibi SQL Server’da veri tabanları OLTP ve OLAP diye ikiye ayrılmaktadır. OLTP (On Line Transactional Processing) veri tabanları; verilerin iki boyutlu -satır ve sütunlardan oluşan- tablolar biçiminde tutulduğu ve bu tablolar arasında ilişkilerin kurulabilmesiyle karakterize tipik ilişkisel veri tabanlarıdır. OLTP, görece az miktardaki verinin olduğu ancak fazla atomik işlem gören veri tabanları için uygundur. Atomik ifadesinden kastedilen anlam transactional çalışma mantığıdır. Bu çalışma mantığı kısaca ACID doktirini diye bilinen prensiplerle özetlenir.

OLAP (On Line Analytical Proccessing) ise; görece fazla miktarda verinin iki boyutlu tablolar yerine çok boyutlu küpler biçiminde tutulduğu ve bu veriler üzerinde istatistiksel analizlerin yapılabildiği veri tabanlarını ifade eder. Özellikle karar destek sistemlerinde kullanılan bu tür veri tabanlarının arkasında çoğu zaman yine OLTP türü veri tabanları bulunmaktadır. Ayrıca OLAP veri tabanları eş zamanlı (concurrent) birden çok kullanıcıya OLTP’ye göre çok daha performanslı sorgu sonuçları üretebilir.

OLTP türü veri tabanlarının sorgulanmasında SQL dili kullanılırken, OLAP için temelde SQL diline benzeyen ancak küp, slice, fact veya dimension gibi OLAP’a özgü olguları destekleyen MDX (Multi Dimensional eXpression language) sorgulama dili kullanılır.

İşte Analysis Services; Microsoft SQL Server’ın OLAP türü veri tabanlarını destekleyen teknolojisidir.

Son yıllarda kullanımı popülerleşen Veri Ambarı (DataWarehouse) kavramı da yine bu konuyla ilgilidir. Kabaca bir kurumun farklı departman ya da veri sahalarından gelen verileri denormalizasyon yaparak merkezi biçimde depolayan yapı anlamına gelir. Kuşkusuz yapılan tek şey denormalizasyon değildir. Yine sıkça kullanılan bir terim olan ETL, veri ambarı oluşturma sürecini ifade eder.

E = Extract : Yani veriyi çeşitli sahalardan (farklı şubeler, farklı departmanlar gibi) ve çeşitli veri tabanlarından elde etmek,

T = Transform : İstenilen şekle dönüştürmek ve

L = Load : Veri ambarına yüklemek şeklinde özetlenebilir.

 

Data Mart; veri ambarına ilişkin alt kümeleri anlatan bir terimdir. Söz gelimi bir bankayı ele alırsak tüm bankaya ait bilgiler veri ambarını ifade ederken, departmanlar düzeyindeki bilgiler data mart’ları ifade eder. Örneğin ADK, Kredi, Bireysel Bankacılık veya Nakit Yönetimi gibi departmanların verileri somutlaşmış data mart örnekleridir.   

Veri Madenciliği (Data Mining) ise; veri ambarındaki aralarında başta bir korelasyon yokmuş gibi gözüken verilerin, istatistiksel bazı metotlar kullanılarak analiz edilmesi, bu yolla verilerin içindeki mantık örgülerinin (patern’lerin) keşfedilerek, verilerin anlamlandırılması ve geleceğe dair öngörülerde bulunulması demektir. Somutlamak gerekirse örneğin geçmiş 50 yıllık seçimlerde belirli bir şehirde yaşayan insanların seçimin yapıldığı mevsime bakılarak hangi mevsimde, en çok hangi partiye oy verdiğini inceleyip sonuca göre de önümüzdeki seçimlerde hangi mevsimde seçim yapılırsa o partinin daha çok oy alacağı kestirilebilir.

Küp (Cube); verinin kendisi ve boyutlarını ifade eden bir terimdir. Boyut (Dimension); basit anlamda verinin analiz edildiği bakış açısıdır. Örneğin bir ürüne ait satış verisi yer, zaman veya kategori boyutlarında analiz edilebilir.  Fact’ler ise boyutlardaki özetlenmiş, hesaplanmış değerlerdir. Örneğin satış verisindeki toplam ya da ortalama satış adedi gibi. Bu şekilde oluşturulan küpler sayesinde veri ambarı kullanılabilir hale gelmektedir. Küpler üzerinde çeşitli işlemlerin yapılabildiği yapılardır örneğin;

Dilimleme (Slicing); kabaca ilişkisel veri tabanlarında where ile bir koşul belirleyerek yapılan işlemin karşılığıdır. Burada koşul oluşturmak için boyutlardan faydalanılır. Örneğin yılın üçüncü çeyreğindeki satışlar gibi. Dicing ise; dilimleme işleminin birden çok boyutta yapılması demektir.

Not : Bu yazının devamındaki küplerin raporlama için kullanımı gibi bilgiler Taşdelen’in Reporting Services kitabında yer almaktadı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



Report Manager Upload Error : Maximum request length exceeded

Report Manager ile deployment yapılırken büyük dosyalar upload edilmek istendiklerinde “Maximum request length exceeded” hatası alınır. Bunun nedeni; Report Manager ile 4MB’ın üzerindeki dosyaların default olarak upload edilememesidir. Ancak ReportManager’ın çalıştığı makinede machine.config dosyası açılıp, <system.web> kısmına aşağıdaki satır eklenirse bu sorun giderilir.  Aynı şey ASP.NET için de geçerlidir.

  

<httpRuntime maxRequestLength =”30000″ executionTimeout=”500″/>

Bu sayede sınır 30 MB’a çıkartılmış olunur. Ayrıca büyük bir dosyayı upload etmek uzun süreceği için bir timeout hatasının oluşmasına da engel olmak gerekir. Bu nedenle de timeout süresi uzatılmıştır.