Reporting Services – Expression ile sorgudan gelen birçok satırı tek satır halinde yazmak

Raporunuzdaki bir dataset’den gelen bir kolonun birçok satır değerlerini tek bir satırda birleştirmek istiyorsanız güzel bir yöntem.

İlk olarak raporunuzda yeni bir Parametre yaratın, mesela FabrikaMultipleValues. Parametre’nin özelliklerinden Allow Multiple Values seçin ve Visibility’yi Hidden yapın. Daha sonra sol tarafdaki tablardan Default Values menüsünü açın oradan Get Values from Query’i seçtikten sonra satırlarını birleştirmek istediğiniz DataSet’i ve Value Field’ı (dataset kolonunun adı) seçin. Parametreyi OK basarak kaydetin.

Capture

Capture

Son olarak birleştirilmiş kayıtların yazılmasını istediğiniz yere bir TextBox koyun ve içinde Expression olarak şunu yazın.

=Join(Parameters!FabrikaMultipleValues.Value,”,”)

Capture

Bu kadar. Burada Join fonksyonu ilk olarak bir Array alıyor. Biz Array olarak yarattığımız parametreyi veriyoruz. Sonuçta oda birçok değeri olan bir array haline gelmişti. İkinci değişken olarada “virgül” koyuyoruz, buda her bir kayıdı neyle ayıracağını gösteriyor. Bu virgül yerine siz istediğiniz karakteri koyabilirsiniz.

Güncelleme: Virgül ile ayırdığınız listenizi tekil değerlerden oluşturmak istiyorsanız yukarıdaki adımlara ek olarak aşağıdaki adımlarıda takip edin.

İlk olarak yukarıdaki adımlarda hazırladığımız listedeki tekrar eden elemanları silen bir fonksiyon hazırlamamız gerekiyor. Bunu reporting services’in Code yazma kısmında yapacağız. Yazacağımız fonksiyonu daha sonrasında raporumuz içerisinde kullanarak listemizi tekil hale getireceğiz.

Raporunuzun Report Body kısmına tıkladıktan sonra yukarıdaki menüden Report seçeneğinin altında Report Properties seçeneğini seçin. Daha sonra Code tabına gidin ve aşağıdaki kodu yapıştırın.

Public Shared Function RemoveDuplicates(parameter As Parameter) As String() 
            Dim items As Object() = parameter.Value
            System.Array.Sort(items) 
            Dim k As Integer = 0
            For i As Integer = 0 To items.Length - 1
                        If i > 0 AndAlso items(i).Equals(items(i - 1)) Then
                                    Continue For
                        End If
                        items(k) = items(i)
                        k += 1
            Next
            Dim unique As [String]() = New [String](k - 1) {}
            System.Array.Copy(items, 0, unique, 0, k)
            Return unique
End Function

Capture

Kodu yapıştırdıktan sonra OK basın ve pencereyi kapatın.

İkinci olarak bu fonksiyonumuzu ve ilk olarak hazırladğımız Parametremiz içersinden gelicek olan listemizi birleştirmemiz gerekiyor. Bunun için bir tane daha parametre yaratmamız gerekiyor. Bunun adını da FabrikaMultipleValueUnique diyelim.

Capture

Yarattığımız parametrenin Available Values ve Default Values bölümlerini fonksiyonumuzu kullanarak dolduracağız. Benim hazırladığım expression şu şekilde “=Code.RemoveDuplicates(Parameters!FabrikaMultipleValue)

Capture

Capture

Unutmayın hem Available hemde Default value’ların hepsini doldurmamız gerekiyor. Bir başka dikkat etmeniz kısım ise fonksiyon içerisine yazdığımız sadece Parametre’nin adı. Parametrenin sonuna Value tarzında başka bir obje eklemiyoruz. Bu adımdan sonra OK basın ve raporunuzu kaydedin.

Son olarak yazımızın ilk bölümündeki gibi Raporumuz istediğimiz bölümüne Join kullandığımız expression’ımızın içerisine yeni parametremizi ekliyoruz.

Capture

Eklediğim expression şu şekilde; =Join(Parameters!FabrikaMultipleValueUnique.Value,”, “)

Ref: http://blogs.msdn.com/b/sqlforum/archive/2011/04/28/walkthrough-how-to-get-distinct-values-of-a-column-of-a-sharepoint-list-using-sql-server-reporting-services.aspx

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s