Reporting Services 2008 – Excel Export ve 65556 Satır Limiti

Bir müşterim için hazırladığım bir döküm raporunda Excel’e aktarım sırasında hata almaya başladım. Hata şu şekildeydi;

Excel Rendering Extension: Number of rows exceeds the maximum possible in a worksheet of this version. Rows requested: 141274. Maximum rows: 65536. —> Microsoft.ReportingServices.ReportProcessing.HandledReportRenderingException: Excel Rendering Extension: Number of rows exceeds the maximum possible in a worksheet of this version. Rows requested: 141274. Maximum rows: 65536. —> System.Exception: For more information about this error navigate to the report server on the local server machine, or enable remote errors‏‏

Bu hata aslında oldukça açık. Hazırladığım SSRS raporu export etmek istediğimiz Excel 2003’ün desteklediği maksimum satır sayısından daha fazla satır sayısı içeriyor. Biraz araştırma yaptıktan sonra, Reporting Service 2008 R2’nin sadece excel 2003’ü desteklediğini öğrendim. Eğer 2007 veya 2010’u destekleseydi böyle bir sorun yaşamayacaktık çünkü 2007’den sonraki Excel’ler 1,048,576 satır destekliyorlar.

Peki o zaman ne yapmalıyız ? Burdaki tek kaçış noktamız 65536 satır sınırının worksheet bazında olması. Yani eğer raporumuz 65536 satır sayısına geldiğinde Excel’de 2. worksheet’e geçirirsek geri kalan kısmını bir sorun olmayacak.

1. Adım: İlk olarak raporunuzdaki tablonun satırlarını sınırlayan bir kural (expression) olmadığına emin olun ki problemimizi tam olarak yakalayabilelim.

2. Adım: Hali hazırda olan tablonuzdan bir tane daha kopyalayıp hemen olanın altına yapıştırın. Daha sonra yukarıdaki tablonun adını TableNotForExcel olarak değiştirin, altta olan tablonun isminede TableForExcel yazın.

Capture1

Capture2

 

 

3. Adım: Şimdi TableNotForExcel tablosunun Tablix Properties penceresini açalım ve Visibility sekmesindeki  Show or hide based on an expression seçeneğini seçip aşağıdaki expression’ı girelim.

=IIF(Globals!RenderFormat.Name=”EXCEL”,TRUE,FALSE)

Bu expression sayesinde rapor bu tabloyu eğer render yapılan format excel ise saklayacak.

Capture3

 

4. Adım: Bir önceki adımda yaptığımız işlemin benzerini TableForExcel için yapıyoruz. Tek fark expression’daki TRUE ile FALSE değerleri yer değiştirecek. Yani eğer render aldığımız format Excel ise bu tablo gözükecek.

=IIF(Globals!RenderFormat.Name=”EXCEL”,FALSE,TRUE)

5. Adım: TableForExcel tablomuzun Properties kısmından DataElementOutput değerini NoOutput olarak işaretliyoruz. Bu ayar sayesinde eğer XML olarak rapor alınırsa bu tablo XML’de gözükmeyecek. Böylece 2 tablo arka arkaya gözükmeyecek sadece gerçeği gözükecek.

Capture4

6. Adım: Şimdi sıra geldi Excel’e export ettiğimiz zaman gözükecek olan TableForExcel tablomuzu belli bir satır sayısına geldiğinde bir sonraki sayfaya geçicek şekilde ayarlamaya. İlk olarak TableForExcel tablomuzu seçiyoruz ve Row Groups penceresinden Details elemanına bir Parent Group ekliyoruz. Açılan Tablix Group penceresindeki Group By dropdown’ın yanındaki Fx düğmesine basarak expression penceresini açıyoruz. Expression olarak aşağıdaki fonksiyonu yazıyoruz.,

Capture5

=Int((RowNumber(Nothing)-1)/65500)

Capture6

7. Adım: Parent Group eklediğimizden dolayı tablomuz SSRS yeni bir kolon ekliyor onu kaldırıyoruz. Kaldırmak istediğimiz kolonun üzerine sağ tuşa basıp Delete Columns seçeneğini seçiyoruz. Bu seçimi yaptıktan sonra SSRS bize aşağıdaki gibi bir soru soruyor burada sadece kolonu kaldır seçeneğini seçiyoruz yani Delete columns only.  Bu sayede önceki adımlarda yarattığımız Parent Group silinmiyor sadece o group için yaratılan kolon siliniyor.

Capture7

8. Adım: Son adım olarak yarattığımz Parent Group‘un özelliklerine gidelim. Parent Group’un sağındaki küçün oka basarak Group Properties seçeneğini seçin. Page Break sekmesine gelin ve Page Break options başlığı altındaki Between each instance group checkbox’ını işaretleyin. Buna ek olarak yine aynı pencerede Sorting sekmesine gidin ve eğer herhangi bir sorting tanımlanmış ise group içersinde hepsini silin.

Capture8

Capture9

Capture10

Sonuç: Böylece raporumuz Excel 2003’e export edilebilir hale getirdik. Raporumuz artık excel sheet’inde 65500 satır sayısına ulaştığında otomatik olarak yeni bir worksheet açılara oradan devam edecektir.

 

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