Sql Server Reporting Services – 3 [Expression'lar]

SQL Server, Oracle Add comments

Bu bölümde raporlar üzerinde yönetimimizi, yönlendirmemizi nasıl artıracağımızı, rapor ifadelerini(expression), rapor içerisinde özel kod yazımı ve dışarıdan bir kütüphaneyi, dll dosyasını nasıl kullanacağımızı örneklendireceğiz.
Expression’lar rapor içerisindeki alanlarda gösterilecek deÄŸerleri özelleÅŸtirmek için kullanılan ifadelerdir. Bu ifadeler bir formül olduÄŸu gibi Dataset içerisindeki bir kolona da iÅŸaret ediyor olabilir. Expression’lar aracılığıyla rapor içerisinde kısa kodlar yazarak farklı yönlendirmeler yapılabilir. Herhangi bir alana deÄŸer bastırmak için Properties penceresindeki Value özelliÄŸinde Expressions seçeneÄŸi seçilir. Bu seçim bize kodlarımızı yazabileceÄŸimiz ekranı sunar. Bu ekranda kullanabileceÄŸimiz ifadeler sol tarafta Constants, Globals, Parameters, Fields, Datasets, Operators, Common Functions ÅŸeklinde gruplanmıştır. Dataset içerisindeki kolonlar, sorguya gönderilecek parametreler, raporda kullandığımız kontroller, raporlar ilgili global deÄŸerler gibi koleksiyonların elamanlarına eriÅŸmek için KoleksiyonAdı!NesneAdı ifadesi kullanılır. ÖrneÄŸin kayıt kümesindeki herhangi bir kolona eriÅŸmek için Fields!KolonAdı.Value ifadesi kullanılır. Bu ifade variant türünde deÄŸer döndürür. Fakat Common Functions altındaki Conversion bölümünden Convert fonksiyonları kullanılarak farklı veri tiplerine dönüştürme yapılabilir. Biraz önceki örneÄŸimize geri dönecek olursak özetleme satırında Aidat kolonun altıda aidatların toplamını vermesi için grupsal fonksiyonlar kullanılır. =Sum(Fields!Aidat.Value) ifadesi gruplanmış deÄŸere göre Aidatları toplar. AÅŸağıdaki toplam satırına =”Toplam : “+ CStr(Sum(Fields!Aidat.Value)) ifadesi yazıldı.

Bunun sonucunda aşağıdaki gibi bir ara satır oluşur.

Bu şekilde Sum, Avg, Count, Min, First, Last gibi fonksiyonlar kullanılabilir.

Expressions penceresindeki Globals sekmesindeki deÄŸerler raporla ilgili genel deÄŸiÅŸkenleri belirtir. ÖrneÄŸin raporun çalıştırılma zamanını yazdırmak için Toolbox’tan tasarım alanında Textbox kontrolü eklenir kontrolü Value özelliÄŸi =Globals!ExecutionTime olarak düzenlenir. Aynı ÅŸekilde mevcut sayfanın sayfa numarası için PageNumber deÄŸeri, raporun sunucudaki URL adresi için ReportServerUrl deÄŸeri kullanılır.

Kodları yazdığımız ekranın IntelliSense özelliğini desteklemesi de önemli bir kolaylık sağlamaktadır. Örneğimizi biraz geliştirip Aidat değeri 12.00 üzerindeyse o değeri kırmızı yazdıralım. Bunun için Aidat kolonun Properties bölümünden Color özelliğini seçip aşağıdaki ifadeyi yazalım.

=IIF(Fields!Aidat.Value > 12, “Red”, “Black”)

Rapor içerisinde genel bir fonksiyon yazmak için Layout bölümünde üst menüdeki Report altındaki “Report Properties” bölümüne girilir. Oradaki Code sekmesinde ilgili kodlar VB.NET formatında yazılır.

Public Function GetMesaj(ByVal deger as integer) as String
	IF deger > 12 Then
		Return "12'den büyük"
	ELSE
		Return "12'den düşük"
	End IF
End Function

Bu fonksiyonu herhangi bir yerden çağırmak için code.GetMesaj ifadesi kullanılır.

Layout içerisinde Aidat kolonun saÄŸ tıklayıp “Insert Column to the Right” menüsünü tıklayıp kolonun sağına yeni bir kolon ekleyelim. Ve bu kolonun Value deÄŸerine aÅŸağıdaki ifadeyi yazalım.

=code.GetMesaj(Fields!Aidat.Value)

SQL Server Reporting Services aracı bu ÅŸekilde bazı kodları rapor içerisine gömmemize imkan verdiÄŸi gibi dışarından bir kütüphaneyi kullanmamıza da olanak tanır. ÖrneÄŸin .NET’te yazdığımız harici bir Assembly’i kolayca rapor içerisinde referans olarak kullanabiliriz. Bunun için yapmamız ilk adım bu dll dosyasını raporun referanslarına eklemektir. Bu iÅŸlemi önceki örnekte kullandığımız üst menüdeki Report altındaki “Report Properties” bölümünde yapacağız. Bu penceredeki References sekmesinde “…” düğmesini tıklayıp listeye dışarıdan bir dll dosyasını ekleyelim.

VS.NET 2005 içerisinde C# dilinde bir Class Library projesi oluşturup aşağıdaki gibi basit bir örnek oluşturalım.

using System;

namespace ClassLibrary1
{
    public class Muhasebe
    {
        public double KdvHesapla(double Fiyat, int Kdv)
        {
            //Gönderilen rakama kdv'yi ekleyelim.
            return Fiyat * ((100 + Kdv) / 100);
        }
    }
}

Bu projeyi derleyip dll dosyasını (ClassLibrary1.dll) üzerinde çalışılan VS.NET sürümüne ait klasörün içerisine kopyalamak gerekiyor. Benim makinde VS.NET 2005′e ait kütüphanelerin bulunduÄŸu klasör ÅŸu ÅŸekildedir.

C:\Program Files\Microsoft Visual Studio 8\Common7\ide\PrivateAssemblies

Kopyalama iÅŸleminden sonra rapor tasarımı tarafına geçip Layout ekranın da “Report » Report Properties” menüsündeki References sekmesinde bu dll dosyasını listeye ekleyelim. Listeye ekledikten sonra rapor içerisinde bu kütüphane içerisindeki sınıflara eriÅŸmek için bir nesne adı tanımlıyoruz. Sınıfların adı yazılırken tam adının (fully qualified) yazılması gerekir. Burada nesne adı olarak oMuhasebe ismini kullandım.

Bu işlemlerden sonra RDL dosyasına aşağıdaki etiketler eklenir.


    ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  

   
    
      ClassLibrary1.Muhasebe
      oMuhasebe
    
  
  

Artık bu sınıfı oMuhasebe nesnesini iÅŸaret ederek rapor içerisinde herhangi bir alanda kullanabiliriz. Raporda aidatların hemen saÄŸ tarafına “KDVli Aidat” isminde yeni bir kolon ekledim. Ve o kolonun Value deÄŸerine aÅŸağıdaki ifadeyi yazdım.

=Round(code.oMuhasebe.KdvHesapla(Fields!Aidat.Value,18),2)

Böylece KdvHesapla yordamına mevcut satırdaki Aidat bilgisi ve 18 değeri parametre olarak gönderilir.

Burada dikkat edilmesi gereken konu raporu baÅŸka bir sunucuya deploy ettiÄŸimizde raporda kullandığımız dll dosyalarını da sunucuda SQL Server Reporting’in çalıştığı yere kopyalamamız gerekir. Bu adres muhtemel aÅŸağıdaki gibi olacaktır.

C:\Program Files\Microsoft SQL Server\MSSQL.*\Reporting Services\ReportServer\Bin

Leave a Reply


3 × 6 =

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS GiriÅŸ