نحوه تهیه گزارش در SSRS و انتشار آن روی وب سرور
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: پنج دقیقه

یکی از محصولات پرکاربرد و حرفه ای مایکروسافت در زمینه تولید گزارش SQL Server Reporting Services یا به اختصار SSRS می‌باشد . در این پست نحوه ایحاد یک گزارش ساده به صورت والد و فرزندی ، انتشار گزارش روی وب سرور و مدیریت نمایش ستون‌ها با استفاده از Expression‌ها را در محیط BIDS بیان می‌کنم



برای انجام این پروسه ، از ابزار BIDS استفاده خواهیم کرد . همچنین برای اطلاعات و داده‌ها از دیتابیس آزمایشی Adventure works استفاده می‌کنیم (دانلود )

 


صورت مسئله : گزارش از دپارتمان‌های کاری و تعداد کارمندان مرد و زن هر دپارتمان . که با کلیک روی هر سطر گزارش (بسته به جنسیت) بتوان لیست تمام افراد آن دپارتمان را دید .


بخش اول :

برای شروع BIDS را باز کرده و یک پروژه از نوع Report Server Project استارت بزنید .

 
نام این پروژه را در اینجا introductionPrj1 قرار دادم .

همانطور که ملاحظه می‌کنید ، سه پوشه در Solution explorer قرار دارد که برای تعریف پایگاه داده با پوشه Shared Data Sources و برای تعریف گزارشات از پوشه Reports استفاده خواهیم کرد

برای این منظور ابتدا یک data source تعریف می‌کنیم :


و سپس شروع به ساختن یک گزارش می‌کنیم :

مراحل را تا رسیدن به مرحله تعریف Query پی میگیریم .


انتخاب دیتا سورس :


در اینجا می‌خواهیم قسمت اول گزارش یعنی فهرست کردن تعداد کارمندان هر دپارتمان را به تفکیک جنسیت مشاهده کنیم :
SELECT DEPARTMENTNAME, GENDER, COUNT(1) AS COUNT FROM DBO.DIMEMPLOYEE GROUP BY DEPARTMENTNAME,GENDER ORDER BY DEPARTMENTNAME,GENDER

برای مشاهده صحت دستور می‌توانید از Query Builder کمک بگیرید :


ادامه تنظیمات را مانند تصویر پی بگیرید (تعریف Tabular بودن گزارش و طراحی جدول و theme و نام گذاری گزارش )






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

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

SELECT EMPLOYEEKEY,FIRSTNAME,LASTNAME, MIDDLENAME,TITLE,HIREDATE, BIRTHDATE,EMAILADDRESS,PHONE,GENDER FROM DBO.DIMEMPLOYEE WHERE DEPARTMENTNAME=@DEPARTMENTNAME AND GENDER=@GENDER

و تست گزارش :

و بقیه قسمت‌ها مانند قبل :



تا به این مرحله data source و گزارش‌ها ایجاد شدند :

اکنون باید ارتباط بین دو گزارش را برقرار کنیم :

گزارش والد را باز کرده و روی ستون COUNT کلیک راست نموده و گزینه Popperties را انتخاب نمایید :

سپس در تب action گزینه Go to Report را انتخاب نموده و گزارش فرزند را انتخاب نمایید .

در انتها هم باید پارامتر‌ها را تعریف کنید . خروجی مانند زیر خواهد بود :

ToolTip از تب General قابل اعمال است .

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




تا به این مرحله گزارش تکمیل شد که البته برای ظاهر آن هم باید فکری کرد که در این پست اشاره ای نمی‌شود .

بخش دوم :

گزارش جاری فقط قابل استفاده از طریق BIDS است و با توجه به محدودیت دسترسی باید آن را در جایی قرار داد تا کاربران بتوانند از آن استفاده کننده . برای این منظور باید تنظیمات SSRS Web Application انجام شود تا بتواند روی سرور عملیاتی قرار گیرد .

در صورتی که تنظیمات SSRS برای قرار گرفتن روی وب سرور انجام نشده باشد و ما بخواهیم گزارش را Deploy کنیم خطا دریافت خواهیم کرد .

پس در ادامه نحوه تنظیم وب سرور را بیان می‌کنم و پس از آن گزارش را روی وب سرور قرار می‌دهیم :
برای این منظور باید برنامه Reporting Services Configuration Manager که در مسیر نصب SQL Server است برویم



پس از اتصال به سرور به تب Report Manager Url بروید :



در این مرحله باید سرور را تنظیم کنید تا بتوانیم پروژه را روی آن Deploy کنیم . از باز بودن پورت اطیمنان حاصل کنید . سپس وب سرویس را تنظیم کنید که هر دو فقط شامل نام Virtual Directory و Credential آن می‌شود . (مگر اینکه تنظیمات خاصی داشته باشید).


در صورت اجرا کردن مسیر URL باید بتوانید صفحه خانگی آن را مشاهده کنید :

که البته هنوز هیچ گزارشی روی آن قرار نگرفته است .سپس به گزارش خود باز می‌گردیم تا تنظیمات سرور را روی BIDS تکمیل کنیم :
برای این منظور روی پروژه کلیک راست کنید و ابتدا روی Properties کلیک کنید .



تنظمات مهم شامل مسیر سرور که برابر با همان سرویسی است که تنظیم کرده اید و مسیر پوشه ای که گزارش‌ها روی سرور در آن قرار خواهند گرفت ، می‌باشد.دقت کنید که باید حتما پوشه موجود باشد . اگر به حالت پیشفرش رها کنید ، گزارشات در Root قرار خواهند گرفت .



روی OK کلیک کنید و پروژه را Deploy کنید .

اگر به سایت برگردید ، گزارشات را می‌توانید مشاهده کنید





بخش سوم :

در این مرحله می‌خواهیم یکی از ویژگی هایی که در گزارش گیری کاربرد زیادی دارد ، یعنی نمایش ستون‌های دلخواه در گزارش را به کمک SSRS و BIDS به کار ببریم.

برای این منظور به پنجره Report Data مراجعه کرده و روی Parameters کلی راست کرده و گزینه Add Parameter را انتخاب کنید :



فیلد‌ها را مانند زیر پر کنید : (در اینجا می‌خواهیم یک dropdown به کاربر نشان داده شود تا انتخاب کند که ستون نمایش داده شود یا خیر . همچنین مقدار پیشفرض بله است)


گزینه‌های مورد نظر را انتخاب نمایید

و تعیین مقدار پیش فرض


و نتیجه در BIDS :


اکنون باید تغییر مقدار این ستون را بر روی گزارش اعمال کنیم :
برای همین منظور روی ستون BirthDate در حالت Design کلیک راست کرده و گزینه Column Visibility را انتخاب کنید :

سپس باید تنظیم کنیم که در نمایش و عدم نمایش این ستون باید بر اساس یک عبارت یا expression باشد .


عبارت زیر را وارد کنید (به این معنی که اگر مقدار 1 بود نمایش داده شود در غیر این صورت نمایش داده نشود) برای اطلاعات بیشتر در مورد دستورات Expression به اینجا   و اینجا   و اینجا مراجعه کنید

 =iif(Parameters!ShowBirthDate.Value=1,true,false)



اکنون می‌توانید گزارش را deploy کنید و تنظیمات سطوح دسترسی کاربران را انجام دهید

 
  • #
    ‫۱۱ سال و ۱ ماه قبل، شنبه ۱۶ شهریور ۱۳۹۲، ساعت ۱۹:۴۴
    سلام ممنونم از مطلبتون جالب بود ! .چجور میشه این نمونه گزارش گیری رو در Windows Application استفاده کرد؟
    • #
      ‫۱۱ سال و ۱ ماه قبل، شنبه ۱۶ شهریور ۱۳۹۲، ساعت ۲۱:۲۴
      با استفاده از SOAP API‌های SSRS می‌تونید (+ و + و + )
      و در بخش Reporting موجود در VS Toolbox کنترل Report Viewer بهتون کمک می‌کنه.
      موفق باشید
    • #
      ‫۱۰ سال و ۶ ماه قبل، پنجشنبه ۲۱ فروردین ۱۳۹۳، ساعت ۰۲:۱۳

      مهمترین مشکل ابزارهای قدرتمند گزارشگیری اینه که اکثرا فقط با دستورات Sql کار می‌کنند. برای اینکه SSRS با مجموعه ای از موجودیتهای دامنه Domain Entities کار کنند چه راهی وجود داره؟ مثلا چطور میشه SSRS رو به Entity Framework متصل کرد؟

      • #
        ‫۱۰ سال و ۶ ماه قبل، پنجشنبه ۲۱ فروردین ۱۳۹۳، ساعت ۰۳:۱۰
        به هیچ وجه، انطباق خوب یک ابزار با یک پایگاه داده ازطریق SQL یک اشکال محسوب نمیشه !
        منظورتون از برقراری ارتباط بین EF و SSRS اینه که data source  انتخابی برای SSRS رو EF انتخاب کنیم ؟  
        اگر بله؛  دلیله این  کار چیه که از یک سو EF به SQL وصل بشه و از طرفی هم به SSRS... مستقیم این ارتباط رو برقرار می‌کنیم... (یعنی SSRS به SQL و با همان دستورات بدون نیاز به وجود واسطه ای به نام EF)
        هر ابزاری را با هدف خاصی پیاده سازی می‌کنند و اصلا دلیلی نداره که انتظار برقراری از طریق EF با SSRS وجود داشته باشه ! EF برای یک مقیاس و کاربرد استفاده میشه و SSRS برای یک مقیاس و کاربرد دیگر.
        و اگر نه، ممکنه بیشتر توضیح بدید؟
  • #
    ‫۱۱ سال و ۱ ماه قبل، سه‌شنبه ۱۹ شهریور ۱۳۹۲، ساعت ۱۹:۵۳

    سلام؛ مقاله خوبی بود. فقط من یه سوال دارم. چطوری از پروسیجر ای استفاده کنیم که پرامتر میگیره. ممنون

    • #
      ‫۱۱ سال و ۱ ماه قبل، سه‌شنبه ۱۹ شهریور ۱۳۹۲، ساعت ۲۱:۲۸
      سلام
      باید از Dataset استفاده کنید (+ و +  )
  • #
    ‫۱۰ سال و ۶ ماه قبل، دوشنبه ۱۸ فروردین ۱۳۹۳، ساعت ۱۷:۱۰
    سلام
    ممنون از اموزش شما .
    مراحل گفته شده را اجرا کردم . زمانی که پروژه را deploy می‌کنم خطای زیر را می‌دهد
    could not connect to the report server .verify that the target server url is valid and that you have the correct permissions to connect to the report server 
    • #
      ‫۱۰ سال و ۶ ماه قبل، دوشنبه ۱۸ فروردین ۱۳۹۳، ساعت ۱۷:۳۰
      سلام
      از صحت آدرس‌های تعریف شده اطمینان پیدا کنید.
      در قسمت Reporting Services Configuration Manager
      در زیر مجموعه‌های  Report Manager URL  و  Web Service URL
      و همچنین
      در قسمت Properties  قسمت TargetServerRUL
      احتمال دوم، عدم وجود دسترسی کافی برای تنظیمات فوق است
      با کاربر مدیر ارشد این کار را انجام دهید 
  • #
    ‫۱۰ سال و ۶ ماه قبل، یکشنبه ۲۴ فروردین ۱۳۹۳، ساعت ۰۱:۳۰
    راهی وجود داره که SSRS از Domain Objectها گزارش تهیه کنه؟