خانه > Persian Contents, Reporting Service, SQL Server > SQL Server Reporting Service چیست؟

SQL Server Reporting Service چیست؟

در سال ۲۰۰۳ یک add-on به  SQL Server نسخه 2000 به عنوان یک سرویس گزارشگیری افزوده شد. این سرویس تا نسخه 2005 خیلی کاربردی نبود. از سال 2005 مایکروسافت سرمایه گذاری خوبی را در این زمینه که قبل از آن شرکتهایی در آن فعالیت میکردند آغاز کرد. اینگونه بود که از این مقطع زمانی به بعد مایکروسافت اقدامات خوبی را در این زمینه شروع کرد و آن را از حالت یک add-on خارج کرد.

نصب
زمانی که میخواهید نسخه های 2005 و 2008 از SQL Server را نصب کنید در یکی از مراحل باید Reporting Service را برای نصب انتخاب کنید. در ادامه باید تیک مربوط به Configure کردن خودکار Reporting Server را بزنید. اگر این گزینه را انتخاب نکنبد باید عملیات پیکربندی را به صورت دستی انجام دهید.

معماری SSRS
سه کامپوننت اصلی وجود دارد که با یکدیگر کار کرده و SSRS را به یک برنامه چندلایه واقعی تبدیل میکند. این سه عبارتند از :

 

  1. Client
  2. Report Server
  3. SQL Server Report Databases

شکل زیر یک تفکیک مفهومی از این سه بخش و اجزا آن است.

در اینجا data source و SSRS databases ، ReportServer و ReportServerTempDB موجودیتهای مجزایی هستند. Data Source منبع و منشا اصلی داده ها برای پر کردن گزارشات است و Report Server Databases وظیفه ذخیره سازی اطلاعات مربوط به گزارشات را بر عهده دارند. هر دوی این دو میتوانند به صورت فیزیکی در یک SQL Server مشترک قرار گیرند، فزض کنید که data source یک پایگاه داده SQL Server است. Data source میتواند data provider های  مختلف مثل SQL Server، Oracle، LDAP و یا Analysis Service را پشتیبانی نماید. این امر ممکن است که شما یک سرور واحد را هم برای SSRS Report Server Web Service و هم برای Report Server Database پیکربندی کنید. اگر چه این کار توصیه نمیشود مگر اینکه تعداد کاربر شما کم باشد.

نصب SSRS دو پایگاه داده برای شما میسازد :
ReportServer : این پایگاه داده اصلی است که تمامی اطلاعات را از فایل RDL منتشر شده (published) در حود ذخیره میکند. همچنین مواردی چون خصوصیات گزارش (مانند data sourceها)، پارامترها  و فایلهای لاگ را در خود نگهداری میکند.

ReportServerTempDB : این پایگاه داده کپیهای cach شده گزارشات را برای بالا بردن کارایی به جهت استفاده همزمان کاربران در خود دارد. با این مکانیزم این اطمینان را داشته باشیم که حتی در صورت restart شدن سرور باز هم گزارشات در دسترس هستند.

 

SSRS Report Server
SSRS Report Server مهمترین نقش را در مدل SSRS ایفا میکند. در میانه کار کرده و برای هر درخواست از سمت client برای render کردن یک گزارش یا برای انجام یک درخواست مدیریتی مانند ساخت یک subscription مسیول است. شما متوانید یک report server را با توجه به عملیاتهای مختلف به چندین زیربخش تفکیک کنید :

  •  Programming interface
  •  Report processing
  •  Data processing
  •  Report rendering
  •  Report scheduling and delivery

SSRS Web Service Interface
رابط برنامه نویسی که به عنوان API های .NET Web Service و متدهای دسترسی URL ظاهر میشوند، تمامی درخواستهای ورودی از client ها را خواه درخواست گزارش باشد، خواه درخواست مدیریتی، اداره میکند.با توجه به نوع درخواست، رابط برنامه نویسی با دسترسی به پایگاه داده Report Server یا ارسال آن به کامپوننت دیگر برای پردازش اقدام میکند.

Report Processor
این کامپوننت مسیول تمامی درخواستهای گزارش است. مانند رابط برنامه نویسی، مستقیما به پایگاه داده ReportServer متصل میشود تا اطلاعات مربوط به تعریف گزارش را دریافت کند که این اطلاعات بعدا برای ترکیب با اطلاعات data source و ساخت گزارش به کار میرود.

Data Processing
SSRS چهار نوع الحاقیه برای اتصال به پایگاه داده حمایت میکند :

 

  1. SQL Server
  2. Oracle
  3. OLE DB
  4. ODBC

وقتی که این کامپوننت یک درخواست را Report Processor دریافت میکند، یک اتصال به data source میزند و آن را به query منبع ارسال میکند. داده بازگردانده شده و به Report Processor فرستاده میشود تا با تعریف گزارش ترکیب شود.

Report Rendering
این کامپوننت وظیفه render گزارش در فرمت مورد نظ را دارد. فرمتهای مورد حمایت عبارتند از :

  •     HTML
  •     PDF
  •     HTML با استفاده از کامپوننتهای وبی Office
  •     Excel
  •     CSV
  •     MHTML
  •     TIFF

برنامه های Client
SSRS شامل چندی برنامه است که از آن استفاده میکنند. این برنامه ها و ابزارها، مدیریت Report Server ، پیاده سازی امنیت و وظایف render کردن گزارش را برای مهیا میکنند. این ابزارها مانند زیرند :

•    Report Manager
 این یک برنامه browser base همراه با SSRS است که محیطی گرافیکی را برای کاربران مهیا میکند که توسط آن میتوانند گزارشات را ببینند یا چاپ کنند، یا اینکه گزارشات را برای بخشهای مختلف مدیریت کنند.

 

•    SQL Server Business Intelligence Development Studio (BIDS)
اگر شما روی سیستم خود Visual Studio نداشته باشید و SSRS را نصب کنید، خود SQL Server برای شما Visual Studio IDE را برای شما نصب میکند تا شما بتوانید به راحتی به طراحی و تست گزارشات خود بپردازید. این IDE را با نام  SQL Server Business Intelligence Development Studio نصب کرده و با انتخاب آن میتوانید به راحتی به آن دست یابید. البته باید بگویم برای ساخت گزارشات وجود این IDE الزامی نیست.

 

•    ابزارهای Command-line
شما میتوانید از چندین ابزار Command-line مانند rs ، rsconfig و RSKeyMgmt برای پیکربندی و مدیریت محیط SSRS استفاده نمایید.

•    Custom Clients

•    Reporting Services Configuration Manager
ابزاری برای پیکربندی به صورت گرافیکیست که از نسخه ۲۰۰۵ به بعد به وجود آمد.

 

انواع گزارشات و ساختار آنها

به طور کلی دو نوع گزارش در RS موجود است:

 

  1.     Client Report
  2.     Server Report

در Visual Studio 2005  به بعد کنترل جدیدی به آن افزوده شد با نام MicrosoftReportViewer که مخصوص نمایش گزارشات بود. گزارشات فایلهایی با پسوند rdl برای گزارش remote و rdlc برای گزارش  clientهستند که میتوانید آن را به پروژه خود بیفزایید. پس از افزودن آن چندین ابزار به شما برای ساخت گزارش داده خواهد شد. شما میتوانید با این ابزارها گزارش مورد نظر خود را بسازید.
RDL یک مدل بر مبنای XML است که هر عنصر گزارش  مانند قالب بندی، اطلاعات dataset، grouping و sorting، پارامترها و فیلترها را تعریف میکند. همانطور که شما آیتمی را اضافه میکنید، این ساختار دچار تغییرات میشود.
در IDE این ساختار از شما مخفیست ولی در صورت نیاز به تغییر کلی در گزارشات ، میتوانید از find and replace در این ساختار به صورت مستقیم استفاده نمایید. در VS 2005  و بعد از آن با زدن دکمه F7 در زمان کار با گزارش میتوانید این ساختار را ببینید. به تکه ای از این ساختار در یک گزارش توجه کنید :

 

 

در نسخه ۲۰۰۵ نه ابزار برای ساخت گزارش وجود داشت که در نسخه ۲۰۰۸ کمی تغییر کردند. لیست این ابزار در تصویر زیر آمده است:

 

هر گزارش شامل سه بخش ۱- Header  ۲- Body  ۳- Footer است که در هرکدام از برخی از این ابزار میتوان استفاده کرد. شما میتوانید از امکانات زیر در گزارشات استفاده نمایید که من فقط آنها را نام میبرم :

•    نوشتن expression برای اکثر اجزای گزارش مثلا امکان visibility و …
•    استفاده از توابع از قبل آماده در نوشتن expression
•    نوشتن expression با زبان VB (مثلا مد تغییر تاریخ)
•    استفاده از پارامترها برای نوشتن query پویا
•    استفاده از فایلهای اسمبلی (dll) : مثلا نوشتن تابعی با زبان c# و استفاده ازآن در گزارش
•    کنترل قوی روی اجزا گزارش
•    امکان قرار دادن sorting و filter بر اساس عناصر محتلف گزارش
•    امکان استفاده از گروه بندی های داده ای تودرتو
•    امکان استفاده از stored procedure و text query به عنوان dataset
•    امکان ساخت گزارشات تعاملی مثلا استفاده از زیرگزارشات
•    استفاده از چندین dataset به عنوان تامین کننده داده
•    امکان دادن به کاربر برای ساختن گزارشات دلخواه با استفاده از report model

 

 

تفاوتهای موجود بین دو نوع گزارش

ساختار گزارشات rdl و rdlc کاملا شبیه هم است ولی در نحوه اجرا و تامین داده با هم کم متفاوت هستند. تفاوتهای موجود را به ترتیب در زیر بیان میکنم :

۱- گزارشات server باید در یک پروژه از نوع report server project و در محیط BIDS افزوده شوند در صورتیکه گزارشات client در یک پروژه معمولی .NET اضافه میشوند.

۲- گزارشات server از یک query مستقیم که به صورت stored procedure یا text  است به عنوان تامین کننده داده استفاده میکنند در حالی که گزارشات client باید در کد مقداردهی شوند. مثلا داده مربوط به آنها میتواند توسط یک dataset یا یک xml data source تامین شود. در ضمن برای انجام این کار احتیاج به نوشتن مقداری کد مثلا در c# است.

۳-برای نمایش داده شدن گزارشات server کنترل MicrosoftReportViewer صرفا وظیفه نمایش گزارش در انتهای عملیات را دارد و تمام عملیات برای تهیه گزارش و render آن در report server انجام میشود. این در حالیست که برای نمایش گزارش client کنترل MicrosoftReportViewer نقش اساسی را انجام میدهد و عملیات render شدن گزارش در این کنترل انجام میشود.

۴-گزارشات client به نصب SSRS نیازی ندارند در حالیکه گزارشات server  بدون این کار قابل دسترسی نیستند.

۵- کنترل MicrosoftReportViewer در گزارشات client و در نسخه ۲۰۰۵ دارای دکمه چاپ نبودند ولی گزارشات server این مشکل را نداشتند. البته لازم به ذکر است این مشکل در نسخه ۲۰۰۸ حل شده است.

۶-گزارشات client نیازی به publish روی report server ندارند در حالیکه گزارشات server برای اجرا شدن حتما باید publish شوند.

نکته : من این نوشته را بر اساس نسخه ۲۰۰۵ نوشتم و باید بیان کنم که نسخه ۲۰۰۸ بهبودهای خوبی داشته است. البته اصول تغییری نکرده است. در نوشته های آینده سعی میکنم مثالهایی را بر اساس نسخه ۲۰۰۸ بنویسم.

  1. مسعود
    آوریل 4, 2009 در 6:28 ب.ظ.

    سلام و خسته نباشید آقای رمضانی.مطلب بسیار خوب همراه با بار علمی بالا بود.من هم به جمع خوانندگان وبلاگ شما پیوستم !

  2. برنامه نویس
    آوریل 7, 2009 در 11:27 ب.ظ.

    سلام مرسی از مقاله جالبتون .

  3. SundanCe
    آوریل 12, 2009 در 8:47 ب.ظ.

    من بهتون لینک دادم می شه به من لینک بدید!

  4. مجتبی
    آوریل 19, 2009 در 1:33 ق.ظ.

    سلام دوست عزیز مطالب جامع و مفیدی بود موفق باشی

  5. علی
    آوریل 26, 2009 در 1:57 ق.ظ.

    سلام،سایت بسیار خوب و پر محتوایی دارید..خسته نباشید..یه سوال داشتم می خواستم بدونم Stored procedere ها د ر sql2008 با 2000 فرق می کنه…از لحاظ ساختار نوشتاری؟و دوم اینکه چرا بانک 2000 را ساپورت نمی کنه..البته من الان 2 روزه 2008 اش رو گرفتم..مرسی

  6. علی اصغر
    آوریل 26, 2009 در 11:44 ق.ظ.

    بسم الله الرحمن الرحیمسلامانشاالله موفق باشیژایگاه پر باری بود

  7. عسل
    آوریل 29, 2009 در 9:29 ق.ظ.

    سلام ممنون از مطلبی که  گذاشتیدمزیت rdl  نسبت به rdlc چيه؟

  8. عسل
    آوریل 29, 2009 در 10:01 ق.ظ.

    اگه ميشه در زمينه چگونه ساختن گزارشات از طريق report server  با استفاده از پارامتر مطلب بزاريدممنون ميشم

  9. عسل
    مِی 1, 2009 در 1:16 ق.ظ.

    سلام ممنون از جواب های کاملی که میدید برای نمایش گزارش سرور در فرم  c#.net  از شی reportviewer   استفاده میکنیم در قسمت path  چه چیزی باید وارد کنیم ؟اگه میشه در مورد نمایش گزارشات سرور (reporting server ) توضیحی بدید

  10. عسل
    مِی 5, 2009 در 8:03 ق.ظ.

    سلامخیلی خیلی ممنون از جوابی که دادید

  11. سعید
    ژوئیه 29, 2009 در 11:59 ق.ظ.

    سلام اگه میشه در مورد چگونه فارسی کردن toolbar درreporting services یا mirror کردن آن توضیح بدید

  12. حمید
    آگوست 24, 2009 در 11:38 ق.ظ.

    سلامممنون از مطالب مفیدتون می خواستم ببینم ما مشکلات فارسی در این ابزار نخواهیم داشت؟منظورم تا آخرین مرحله از جمله پرینت . چون مثل اینکه بعضی دوستان تا printPreview هم مشکل ندارند ولی موقع چاپ توی پرانتز و… مشکل راست به چپ رو دارند . مثلا (سلام) میشه )سلام(

  13. مریم عرشی
    سپتامبر 14, 2009 در 10:39 ق.ظ.

    سلا م یک سوال داشتم تا جایی که من تحقیق کردم report builder امکان گروهبندی بصورت یک جدول تو در تو را به ما نمی دهد ، مثلا در فضایی مانند هدر کد گروه باشد و در detail بقیه فیلدها را بیاورد . آیا شما برای این راهی دارید.؟ممنون

  14. ريبوار حسين پوري
    اکتبر 9, 2009 در 6:02 ب.ظ.

    مرسي از مطلب مفيدت مسعود جانپاينده باشي

  15. برنامه نویس(و برنامه خوان !)
    فوریه 27, 2010 در 3:32 ق.ظ.

    جناب رمضانی ، یک دنیا از مطلب ارزنده تان ممنونم

  16. محمد
    مِی 19, 2010 در 8:06 ق.ظ.

    ممنون

  17. روح الله دلپاک
    ژوئیه 21, 2010 در 9:17 ب.ظ.

    بسیار خوب و آموزنده بود. من در حال حاضر از کریستال ریپورت برای تهیه گزارش استفاده می کنم. البته همانطور که می دانید برای نسخه 2010 ویژوال استدیو فعلا کریستال ریپورت در مرحله بتا است. با این وجود من هنوز استفاده می کنم. اما مثل اینکه بعد از انتشار نسخه نهایی کریستال ریپورت برای ویژوال استادیو 2010 قرار است برای استفاده از آن لاینسس جداگانه ای از خود ویژوال استادیو داشته باشیم که این موضوع هم برمیگردد به خریداری شدن شرکت بزینس آبجکت توسط شرکت سپ و تغییر سیاستهای کاری آنها.
    حالا سوال من این است که به نظر شما ریپورت سرویس اس کیو ال جایگزین بی کم و کاستی برای کریستال ریپورت می تواند باشد؟
    و اینکه اگر تصمیم به مهاجرت از کریستال ریپورت به ریپورت سرویس اس کیو گرفتم، آنوقت باید تک تک گزارشات را مجددا طراحی کنم یا ابزاری برای تبدیل هست؟
    و در آخر اینکه ریپورت سرویس اس کیو مشکل عمده ای با زبان فارسی و مسائل راست به چپ دارد یا خیر؟

    • ژوئیه 25, 2010 در 11:05 ق.ظ.

      سلام دوست عزیز
      از حسن توجه شما ممنونم. باید خدمت شما عرض کنم که SSRS ابزاری بسیار قوی تر از کریستال ریپورت است و با فارسی هیچ مشکلی ندارد. اما برای مهاجرت گزارشات خودتان را تبدیل کنید. در مورد اینکه آیا ابزاری برای تبدیل وجود دارد یا نه اطلاع خاصی ندارم.

      موفق باشید

  18. ویدا
    سپتامبر 14, 2010 در 1:37 ب.ظ.

    سلام خدمت دوستان عزیز
    من به تازگی پروژه ام رو از دات نت 2005 به دات نت 2008 منتقل کردم و به مشکلی بر نر خوردم. تنها اشکالی که وجود داره گزارشامه. پرانتز در گزارشات جا به جا نمایش داده می شه. می دونم که در دات نت 2008 از کریستال ریپورت 10.5 استفاده میشه. شما راه حلی رو میشناسید که بتونم این مشکل رو برطرف کنم.
    با تشکر

  1. No trackbacks yet.

برای برنامه نویس پاسخی بگذارید لغو پاسخ