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

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

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


  • Client
  • Report Server
  • 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 شوند.

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