PDA

View Full Version : گزارش گرفتن از چند دیتابیس



taknavaz123
شنبه 20 آبان 1391, 14:12 عصر
با سلام.
من چند تا دیتابیس دارم که دارای ساختارهای یکسانی هستن.اما داده های متفاوتی در table های اون وارد شده.
میخواستم ببنیم آیا میشه با استفاده از ابزاری یک report درست کرد که بره و داده های مورد نظر منو از جداول مورد نظر من در دیتابیس ها مختلف برداره و به کاربر تحویل بده؟؟؟

baktash.n81@gmail.com
شنبه 20 آبان 1391, 15:59 عصر
سلام

شما در لایه های مختلف برنامتون می تونید این کارو انجام بدید ... بستگی به نوع معماری که استفاده کردید ...
اما در لایه SQL شما می تونید از Linked Server استفاده کنید ... به شرطی که سرور های SQL همدیگرو ببینند ... و توی فیلدهای جدولتون نوع XML نداشته باشید ... بعد از اینکه روی یکی از سرور ها Linked Server رو ایجاد کردید یه ویو بسازید و از جداول مورد نظرتون رو Union کنید ...

fakhravari
شنبه 20 آبان 1391, 16:03 عصر
بهتر است شما Query مورد نظر را بنویسید . و به برنامه ریپورت بدهید

taknavaz123
شنبه 20 آبان 1391, 16:19 عصر
بهتر است شما Query مورد نظر را بنویسید . و به برنامه ریپورت بدهید

میشه بگید چه جوری باید query نوشت برای این؟ و چه جوری به برنامه ریپورت داد؟
یکم جزئی تر توضیح میدید؟

mohssen_mz
یک شنبه 21 آبان 1391, 09:36 صبح
برای ریپورت گرفتن هم میتونی از Report Builder خود مایکروسافت (بدون نیاز به ابزار دیگه) استفاده کنی

taknavaz123
یک شنبه 21 آبان 1391, 10:22 صبح
برای ریپورت گرفتن هم میتونی از Report Builder خود مایکروسافت (بدون نیاز به ابزار دیگه) استفاده کنی

ممنون از جوابتون.اما جواب ها خیلی مختصره.
مثلا همین report bulider کجاست؟ نرم افزار جدای؟
نحوه استفاده از اون برایگ گزارش گرفتن از داده ها در sql چه جوریه؟

حمیدرضاصادقیان
یک شنبه 21 آبان 1391, 12:45 عصر
سلام.
بهترین راهنمایی در پست 2 هست.
شما به صورت معمولی نمیتوانید داده هایی رو از سرورهای مختلف فراخوانی کنید.
مگر اینکه از روشهای زیر استفاده کنید.
1- Linked Server
2- Replication
3- Import/Export

بهترین راه برای کار شما استفاده از Linked Server هست.
در این روش ابتدا شما یک Connection با سرور مورد نظر برقرار میکنید بعد به راحتی میتوانید با استفاده از دستورات T-SQL داده های مورد نظر رو فراخوانی کرده و به کاربر گزارش تحویل بدین.
Report Builder یک ابزار گزارش سازی هست ولی تا زمانی که شما نتوانید داده هارو فراخوانی کنید این ابزار به کارتون نمیاد. مشابه این ابزار Crystal Report , Fast Report,.. هست.
منظور از Report Builder مایکروسافت نیز همون Reporting Service !! هست که البته بیشتر برای منظورهای دیگه مانند استفاده در OLAP به کار میره ولی ابتدای کار شما با استفاده از Linked Server ارتباط را برقرار کرده و بعد از اون میتوانید با هر ابزاری گزارش مورد نظر رو ایجاد کنید.

taknavaz123
دوشنبه 22 آبان 1391, 10:18 صبح
سلام.
بهترین راهنمایی در پست 2 هست.
شما به صورت معمولی نمیتوانید داده هایی رو از سرورهای مختلف فراخوانی کنید.
مگر اینکه از روشهای زیر استفاده کنید.
1- Linked Server
2- Replication
3- Import/Export

بهترین راه برای کار شما استفاده از Linked Server هست.
در این روش ابتدا شما یک Connection با سرور مورد نظر برقرار میکنید بعد به راحتی میتوانید با استفاده از دستورات T-SQL داده های مورد نظر رو فراخوانی کرده و به کاربر گزارش تحویل بدین.
Report Builder یک ابزار گزارش سازی هست ولی تا زمانی که شما نتوانید داده هارو فراخوانی کنید این ابزار به کارتون نمیاد. مشابه این ابزار Crystal Report , Fast Report,.. هست.
منظور از Report Builder مایکروسافت نیز همون Reporting Service !! هست که البته بیشتر برای منظورهای دیگه مانند استفاده در OLAP به کار میره ولی ابتدای کار شما با استفاده از Linked Server ارتباط را برقرار کرده و بعد از اون میتوانید با هر ابزاری گزارش مورد نظر رو ایجاد کنید.

با سلام خدمت استاد صادقیان.

داده های من روی چند سرور نیســــت.همه روی یک سرورن.
ببینید من چند تا دیتابیس دارم که همه روی یک سرور هستن.
پس عملا من نه به linked server احتیاج دارم نه به چیز دیگه ای.
من فقط میخوام از چند دیتابیسی که همه روی یک سرور قرار دارن و همه این دیتابیس ها دارای ساختارهای یکسان ولی داده های متفاوت هست گزارش های تجمیعی درست کنم.
الان با این تعاریف راه حل چیه؟

حمیدرضاصادقیان
دوشنبه 22 آبان 1391, 12:33 عصر
خوب دوست عزیز اینکه کاری نداره.
مثال :

Select T1.*,T2.*
From Database1.dbo.Table1 T1
Inner join Database2.dbo.table1 T2
On T1.id=t2.id

taknavaz123
دوشنبه 22 آبان 1391, 14:55 عصر
خوب دوست عزیز اینکه کاری نداره.
مثال :

Select T1.*,T2.*
From Database1.dbo.Table1 T1
Inner join Database2.dbo.table1 T2
On T1.id=t2.id


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

taknavaz123
سه شنبه 23 آبان 1391, 12:09 عصر
خوب دوست عزیز اینکه کاری نداره.
مثال :

Select T1.*,T2.*
From Database1.dbo.Table1 T1
Inner join Database2.dbo.table1 T2
On T1.id=t2.id



راستی این قطعه کد زمانی که بخواهیم اطلاعات 2 جدول هم نام و هم ساختار رو که در دو دیتابیس متفاوت (روی یک سرور) قرار دارند به صورت تجمیعی داشته باشیم کار نمیکنه!با ارور همراه

baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 15:34 عصر
Select f1,f2 from Db1.Table1
Union all
Select f1,f2 from Db2.Table2

حمیدرضاصادقیان
سه شنبه 23 آبان 1391, 15:47 عصر
این کدی که من نوشتم برای Join بین دو جدول هست ، برای گزارش تجمیعی به روش گفته شده در پست12 باید عمل کنید.
در ضمن برای تهیه گزارش شما میتونید این رو داخل یک Sp بنویسید بعد فایل گزارش رو ایجاد کرده از این Sp یا View استفاده کنید.

taknavaz123
سه شنبه 23 آبان 1391, 16:08 عصر
این کدی که من نوشتم برای Join بین دو جدول هست ، برای گزارش تجمیعی به روش گفته شده در پست12 باید عمل کنید.
در ضمن برای تهیه گزارش شما میتونید این رو داخل یک Sp بنویسید بعد فایل گزارش رو ایجاد کرده از این Sp یا View استفاده کنید.

ممنون از جواب شما و آقای بکتاش.
الان ّبر فرض من sp یا view رو ایجاد کردم.
حالا چطوری میتونه کاربر بنا بر نیازش از داده های این sp یا view استفاده کنه.
من دنبال یه واسط هستم.مثلا یه نرم افزار گزارش ساز.
که بره این sp یا view رو ببینه و بر حسب نیاز کاربر ،اطلاعات رو بهش بده

baktash.n81@gmail.com
سه شنبه 23 آبان 1391, 16:16 عصر
بسته به اینکه شما با چه ابزاری راحت تر کار می کنید می تونید از اون استفاده کنید ... من معمولا اگه شرکت نیاز به گزارشات اینچنینی داشته باشه گزارش رو در SSRS درست می کنم (Reporting Service) خوش گزارش ها رو Deploy هم می کنه روی وب و به راحتی می شه در اختیار کاربر قرارشون داد ... چون مباحث مربوط به سطوح دسترسی و اینا هم روی خودش هست ... و تنها نقطه ضعفش عدم امکان استفاده از تاریخ شمسی به عنوان پارامتر ورودی هست ... که اونم راه حل داره

taknavaz123
چهارشنبه 24 آبان 1391, 08:13 صبح
بسته به اینکه شما با چه ابزاری راحت تر کار می کنید می تونید از اون استفاده کنید ... من معمولا اگه شرکت نیاز به گزارشات اینچنینی داشته باشه گزارش رو در SSRS درست می کنم (Reporting Service) خوش گزارش ها رو Deploy هم می کنه روی وب و به راحتی می شه در اختیار کاربر قرارشون داد ... چون مباحث مربوط به سطوح دسترسی و اینا هم روی خودش هست ... و تنها نقطه ضعفش عدم امکان استفاده از تاریخ شمسی به عنوان پارامتر ورودی هست ... که اونم راه حل داره

بازم ممنون از جوابتون.
فقط چند تاچیز.اول اینکه آیا ابزار دیگه ای هم هست به جز reporting servise?
بعد اینکه من با reporting servise اصلا آشنایی ندارم.شما منبعی برای یادگیریش میتونی معرفی کنی؟
اصلا این Reporting servis که ظاهرا تو خود بسته sql هست از کجا قابلیت اجرا داره؟
و آیا گزارش ها رو میشه به صورت فایل exe درآورد .چون رو وب قرار نیست پابلیش بشه

baktash.n81@gmail.com
چهارشنبه 24 آبان 1391, 11:40 صبح
اگه از نسخه 2008 R2 استفاده کنید ... می تونید SQL Server Business Intelligence Development Studio رو باز کنید و یه پروژه جدید از نوع Reporting Server ایجاد نمایید ... برای آموزش هم من پیشنهاد می کنم مجموعه آموزشی App-dev در مورد SSRS رو تهیه کنید ... برای Publish به صورت Exe هم خود مایکروسافت یه کامپونتنت به اسم Report Viewer داره که این گزارشی که شما ساختی رو می تونی تو وب یا ویندوز app اجرا کنی ... البته خیلی از دوستان اسرار داشتن این روش مناسبی نیست اما برای من خوب بود ... چون میزان کد نویسیش خیلی کمه و یه بار که یه Report server راه بندازین هر گزارشی رو که بخواین می تونید باهاش بسازید و Publish کنید مهم هم نیست که به SQL Local وصل بشید یا SQL روی یه سرور دیگه باشه یا روی چند تا سرور دیگه باشه ...