You are on page 1of 24

‫به نام خدا‬

‫خدایا کمکم کن‬

‫تاریخ ‪01/09/18 :‬‬


‫فهرست‬

‫جلسه اول‬

‫جلسه دوم‬

‫جلسه سوم‬

‫جلسه چهارم‬

‫جلسه ‪5‬‬
‫جلسه ‪2‬‬

‫بیل اینمون‬
‫‪Integrated …. Time variant … non volatile … subject orient‬‬

‫فرم نرمالسازی‬
‫عالوه افزونگی ‪ ،‬مشکل ‪ update insert delete‬را حل میکند‪.‬‬
‫اگرنرمال نکنیم مثال اگر چیزی رو دیل کنیم یهو کل اطالعات اون رکورد پریده یا اپدیت‬
‫کنیم باید کل حداول بگردیم پیداش کنیم اپدیت کنیم درحالی ک با نرمالسازی براحتی انجام‬
‫میدهیم‪.‬‬

‫‪va junction table…1:17‬‬


‫ایدی گذاشتن در سطح اپ راحته ولی در سلکت دیتابیس ؟‬
‫بسته ب شرایط بیزینس داره ‪ ...‬سلکت و کوئری ها زیاد جوینی ولی اگراینزرت= اپدیت‬
‫ایدی روش بهتریه برای پرایمری کی‬
‫درصد تغییرات زیاد سیستم های ‪ oltp‬یا ترنس اکشنال وسیستم های گزارشی بیشتر‬
‫ریپورتینگ‬

‫در ‪ DW‬دو دسته حدول داریم ‪ ...‬دایمنشن و فکت‬


‫فکت جدول رویدادها و تراکنس و بطورکلی عملیاتی‬
‫دایمنشن جدول تعریف خوده انتیتی ها ‪ +‬ویژگی هایشان (اون ‪ 4‬دسته)‬
‫‪ Dice‬تفکیک ‪...‬‬
‫در جدول دایمنشن چ ستونایی داریم؟‬
‫‪Suto key .. bus key .. att key .. meta data … dime key‬‬
‫در فکت چ ستونایی داریم؟‬
‫‪Pr key … dim key … meta data … measure‬‬
‫بیزینس کی ستون حوینی‬
‫متادیتا ‪ :‬ستونایی ک تاریخی ان‬
‫دایمنشن کی ؟ ستونی ک ب وسیله اون فکت را ب جداول دیگر ‪ Dw‬جوین میزنیم‬
‫درواقع در فکت ‪ BK %99‬های جدول اصلی وجود دارد ک بوسیله ان ب جداول دایمنشن‬
‫رفته(جوین میزنیم)‬

‫‪..Full adetive….sum count‬‬


‫‪Semi additive … baya dba shive digwri mohasbe konimeshan‬‬
‫‪Non additive‬‬

‫الگوی ‪star‬‬
‫اگر جداول دایمنشن مستقیم و بی واسطه ب جدول فکت متصل شن بوسیله دایمنشن کی البته‬

‫الگوی ‪snow flake‬‬


‫اگر نشد همه جداول مستقیم وصل شن ب فکت و حدولی ب وسیله حدول دیگر ب فکت‬
‫برسد در این الگو هستیم‬

‫دیقه ‪ 39‬دیاگرام‬
‫باید در ساخت ‪ dw‬حواسمان باشد که ممکن است برای بعضی از دسته ها مقداری هنو‬
‫نباشد و وقتی کوئری میزنیم یا داشبورد میسازیم دیگر ان نال هارا از دست میدهیم لرا‬
‫همین درست باید طراحی کنیم و درواقع در این حالت نمیتوان همه را یک جا دریک جدول‬
‫اورد و در واقع الگویمان اسنو فلیک میشود‪.‬‬

‫همچنین باید حواسمان باشد جدولی باشد که جامع باشد! صرفا نیایم بهم بچسبانیم بریم چرا‬
‫ک اگر وقتی دشبوردی میسازیم وقتی فیلتر میکنیم ممکن است ان وقت همه ی جدولمان را‬
‫فیلتر نکند ک این مربوط ب ان است ک اطالعات بعضی از جداول فقط در اسالیسر است‬
‫ک همه را فیلتر نمیکند پس در این صورت باید جدولی بسازی همه ی اون اطالعات ان تا‬
‫جدول را در بر گیرد‪.‬‬
‫دوطرفه ببین‪...‬یک مشتری چند ادرس هر ادرس ب چند مشتری؟‬
‫جلسه ‪3‬‬

‫‪Time variant‬‬
‫جدول دیم دیت فقط و فقط به جداول فکت متصل هست(برای جلوگیری از لوپ)‬

‫‪Role playing dimension‬‬


‫جدولی که به چند نقش مختلف اشاره میکند ب کمک اتریبیوت هایش‬
‫این حدول رول با هر جدولی رول پلینگ نمیباشد باید دید وقتی با جدولی ارتباط دارند‬
‫میتواند نقش های مختلف برای ان جدول بازی کند‬
‫مانند دیم دیت که هم زمان ارسال را دارد هم سفارش هم سررسید‬
‫به این جویند یا جانک دایمنشن گویند؟؟‬

‫تاریخ دراکثر جداولمان بیاید بهتره تا هی جوین دهیم‬

‫مهم‬
‫باید حواسمان به ارتباط جدول فکت و دیم باشد ک چند به چند نباشد ‪ ...‬اگر چند به چند بود‬
‫باید جدول واسط درست کرد ک کلید طرفین را در ان اورده ‪ ...‬ک ب این فکت لس فکت‬
‫گوییم ‪ ...‬فکت لس فقط بین جدول دیم و فکت ک بدلیل رفع چن ب چن درست شده‬
‫ایدی ندهیم برای پرایمری کی‬
‫‪ ... Shared dim … conformed dim‬کانفورد در واقع متحدالشمل و درست ترش‬
‫ابتدا شیر را درست را میکردیم و سپس کانفورد‬
‫جدولی ک بین دو فکت میاید ک تاریخ است باید اتریبیوت های هرجدول را شامل شود‬
‫فقط بین جداول فکت مفهوم دارد‬

‫دیتامارت در واقع همان دپارتمان ها و بخش های مختلف سازمان است‬

‫‪ Bus matrix‬بسیار مهم‬


‫یکی از راه های رسیدن ‪ shared dim‬درست کردن این ماتریکس است‬
‫اینده نگری کنید!‬

‫ترس اشکنال فکت‬


‫جداولی فکتی به جداول دیم وصلند و چنتا دایم‪..‬کی دارند‬
‫‪Snapshot‬‬
‫ب نوعی همون جداول دیتابیسیه معموال هم دایمشن کی ندارند و ترتبی است‬
‫‪Cumulative fact‬‬
‫جداولی ک ریزدانه ترین سطح را نداریم دران (یا اهمیت ندارد یا نداریم واقعا یا فضای‬
‫ذخیره سازی نداریم)‬
‫‪...‬جلسه ‪...4‬‬

‫دیتا دیکشنری ‪:‬‬


‫توضیحات و دفترچه راهنمای دیتااپرینش اون بیزینس ک معموال طراح دیتابیس نوشته اس‬
‫‪ Detaedo‬برای سنددیتا یا دیتا دیکشنری‬
‫ب کمک این سند از اون دیتابیس سردراورده میفهمیم چی چیه کجاس‪=+...‬‬

‫دیتاپروفایلر چ چیزایی مورد توجه‬


‫تایپ دیتا ک مناسب باشد ‪ ...‬زیاد بود درستش کرده‬
‫میزان توزیع و تنوع دیتا‬
‫مینیمم و مکسیمم ولیو هر ستون‬
‫میزان و مقدار نال ‪ ....‬اگر نال ها نیاز نبود نبر‪ 30 =...‬تا ستون ‪ 10‬تا نال بدردنخور‬
‫دیتا پروفایل بابت چیه ؟ شناخت بیزینس کی ینیک و‪...‬انتخاب بیزینس کی‬
‫تولز اپشن تم‬

‫کانکشن راستی در سطح پروژه ‪ ...‬در پایین در سطح پکیج‬

‫‪Data profile‬‬
‫از پیش نیازهای ساخت انبارداده میباشد‬
‫برای هرجدولی ک نیاز داریم از ‪ OPD‬دی پی را تهیه کرده‬
‫در ‪ ssis‬در تب کنترل فلو باید ایجادش کرد‪.‬‬
‫ابتدا رو کلیک کرده بهش مسیر تولید داده ‪ ...‬سپس در کوییک پروفایل کانکشنش را باید‬
‫مشخص کرد ک ب کدام دیتابیس وصل شود ‪ =...‬حال جدولی ک میخواهیم ببینیم چی ب چیه‬
‫انتخاب کرد ‪ ...‬در همون جا کلید یونیک هم میدهد ک میتوان ازش حواس کامپوزیت کی ای‬
‫بدهد‬
‫اکزکیوت باال کل پکیج ‪ ...‬اگز خودش تسک فقط همون اجرا میشه‬
‫در ویو با دبل کلیک میبینیم گزارش را‬
‫دیستبریوشن ‪ ...‬توزیع دیتا مینیمم و مکس ‪ ،‬طول‬

‫‪Data flow task‬‬


‫اساسا برای ‪ E T l‬بکار میرود ‪ =...‬ینی استخراج دیتا از منابع مختلف و چکش کاری آن و‬
‫در نهایت ب مسیری جایی ریختنش انتقال دادنش برای لود کردن و کار کردن روی ان‬
‫برای کوئری گرفتن امار و تحلیل دراوردن‬
‫دیتافلو تسک میتوان چنتا انداخت ‪..‬‬
‫اگر در قایل ‪ csv ya text‬مقادیر تسکمون داخل دبل یا سینگل کوتیشن بودند ب اصطالح‬
‫تکست کوالیفایر گوییم داریم‬
‫سایت ‪Kaggle‬‬
‫اگر فایل تکسمون فارسی بود تیک ‪ Unicode‬را زده‬
‫اگر فایلمان تک یا دبل کوت داشت در قسمت کوالیفایر دبل یا تک کوت را گذاشته تا فایلمان‬
‫را درست بارگذاری کند(البته در ادونس میتوان فقط اونی ک دارد ترو کرد بقیه رو فالس‬
‫گذاشت)‬
‫اگر فایلمان چند سطر الکی یا اضافی داشت ک باید پاک میکردیم تا ب هدر برسیم میتوان‬
‫ان را مشخص کرد‬
‫اگر در فلت فایلمان با چند نوع جداکننده رو برو بودیم در ادونس میتوان تنظیم کرد ‪ ...‬این‬
‫گزینه در ‪ sql‬نی کصمیخ‬
‫حواست ب دیتاتایپ های فلت فایل باش حتما‬
‫حتما اخر ب کالم هم برو‬
‫‪Ole db dest‬‬
‫ب منظور ریختن دیتا در ‪ sql‬ب کار میرود ( البته چنتا کامپونت دیگر هست ک میگیم )‬
‫توجه ‪ =...‬ابتدا جریان ورودی بهش مشخص کرده سپس روش کلیک کن‬
‫تو کانکشن کجا بره کدوم دیتابیس بره مشخص کرده‬
‫سپس کدوم جدول ازون دیتابیس بیس بره مشخص کرده ‪ ...‬میتوان یا جدول دیگر نیو کرد‬

‫ترفند‬
‫کامپوننت ‪multi task‬‬
‫ابتدا قبل وصل کردن مبدا به مقصد این را استفاده کرده ببینیم چی داریم میاریم‬
‫ابتدای مسیر وصلش= کرده و روی مسیرش زده و فعال کرده‬
‫‪ N‬تا ازین میتوان گذاشت مثال هر کاری کردیم چک کنیم کصشر درست نکرده باشیم‬
‫هدف ‪ :‬پیش نمایشی از دیتا‬

‫توجه مهم کانکشن های اضافی را حتما پاک کن‬

‫اگر ‪ data flow‬ها بهم وصل بودند مرحله ای اجرا میشدند ولی اگر از هم جدا بودند وصل‬
‫نبوند موازی اجرا میشدند‬
‫ادامه ساخت ‪DW‬‬

‫نکته ‪ ...‬جدول فکت نباید ب جزئیات و‪..‬تقسیم شود ‪ ...‬باید یدونه باشد ‪ ...‬اگر چنتا بود یکی‬
‫کرده با جوین‬

‫حال ب سراغ جداول دیم رفته‬


‫نکته ‪ :‬بعضی جداول دیم را از جدول فکت(درواقع از ‪ )DBO‬باید بفهمیم‬
‫مانند ‪ date‬ها و ادرس ها‬

‫کلید های دیت را اگر ‪ int‬بگیریم خیلی بهتر‬


‫‪...‬جلسه ‪...5‬‬

‫نکته‬
‫در جدول فکت دیتاورهوس ستون تفسیر شدنی به هیچ وجه نباید داشته باشیم‬
‫ینی مثال در ستونی ‪ 1‬ینی این اینترنتیه ‪ 0‬ینی این حضوری ‪ =...‬اینجوری نباید باشد‬
‫پس اینو باید به دو جدول فکت در دیتاورهوس تبدیل کرده‬

‫جوین در ‪ssis‬‬

‫اون ستونایی ک نیاز نداریم نیاریم بهتره‬


‫توجه‬
‫برای انتخاب ستونا در ‪ old dest‬از ‪ sql command‬انتخاب کرده نه بخش کالمن ک باگ‬
‫داره! دیقه ‪ 15‬توجه‬
‫اسم ستونارو در جدول جدید میتوان عوض کرد‬
‫از کامپوننت ‪ sort‬استفاده نمیکنیم بشدت کند میکند تسک را‬
‫از خوده جوین سرت میکنیم ‪ =...‬پراپرتیری ایز سرت را ان کرده ‪ =...‬البته خودمان حتما باید‬
‫سرت کنیم اینو صرفا ان بزنی اوکی نیس باز‬
‫اگر خواستیم جدولی به چند جدول تبدیل شود طی شرط هایی از ‪conitional split‬‬
‫حال ب ازای اون تعداد حدولی ک میخواهیم انشعاب یابد ا ال دست میزاریم‬
‫در مرحله بعدی باید اون ا ال دست هارا کانفیگ کنیم و حواسمان باشد ستون هایی ک‬
‫نمیخواهیم حذف کنیم (نیو کن)‬
‫تیونینگ دیقه ‪40‬‬
‫از همون جریان داده ای سورس مرتب باید کرد ایز سورتد ‪ ...‬همونجام باید مشخص کنی‬
‫ک برحسب چی مرتب میکنی‬
‫برای استفاده از ‪ look up‬ابتدا یکی از جداولی ک بهم میخوایم جوین کنیم اول اول اول ا ال‬
‫سورس اورده سپس کامپوننت لوک اپ را اورده و جدول دوم را باید در لوک اپ انتخابو‬
‫اینا کرده‬
‫دیقه ‪70‬‬
‫اگر عامل اتصال یک ستون نبود فقط باید اونارم مشخص کنی ینی کامپوزیت کی باشه‬
‫لوک آپ هارا میتوان پشت سرهم اورد‬

‫مهم‬
‫برای گرفتن فایل ‪ xml‬در سورس کامپوننت جدا داریم باید با اون بگیری فایل را‬
‫‪??In line schema‬‬
‫‪ Xsd‬را خودت درست کن ن با جنریت‬
‫‪Conditional split‬‬
‫شرط گذاشتن رو جدولی برحسب چیزی میخوایمش ‪ ...‬مثال فالن ستون یک بود میخوایم یا‬
‫فالن ستون نال هارا نمیخواهیم دیقه ‪ 19‬مهم‬

‫توجه !‬
‫کامپوننت ‪ agg‬هم داریم مثال جمع بزنیم گروپ بایش کنی اینا‬
‫خب توجه مهم‬
‫با همین ‪ SSIS‬هم میتوان اگری گیت کرد هم سرت کرد!‬
‫ب این صورت ک ابتدا باید فایل را حتما از سورس بگیریم ‪ ...‬سپس اگر خواستیم برحسب‬
‫ی سری شرط ها فایلمان را بگیریم از کاندیشمال اسپلیت ساتفاده کرده سپس اگری گیت‬
‫سپس اگر خواستیم سرت ! این پایان کار نیست در نهایت باید حتما ان را ب مقصدی تحویل‬
‫دهیم‬

‫حواست باشه هر کامپوننتی را در جای درستش بیاری‬


‫یکیش مثال دراوید کالمن‬

‫کامپوننت درایود کالمن‬


‫شبیه همون ‪ select‬ای ک میزنی رو ستونا ‪ ...‬با این کامپوننت ستون مشتق شده داریم ک‬
‫حاصل عملیاتیه‬
‫در اکسپرشن باید مشخص کنی چی کار کنه ‪ ...‬همچنین میتوانی از فانکشن هایی ک خودش‬
‫گذاشته است استفاده کنی‬

‫تقدم تاخر کلی گویی‬


‫به نام خدا‬ ‫جلسه ‪6‬‬

‫مهم‬
‫بیایم فرض کنیم از چنتا دیتابیس مختلف بخوایم داده بگیریم چیکار کنیم حاال؟!‬
‫میتوان سنتی کار کرد کلی ‪ DF‬گذاشت‬
‫یه راه دیگ هم هست ک ی جدول درست کنیم دیتا بیس ها و جداولی ک میخواهیم را در ان‬
‫جدول نوشته ‪ +‬اکتیو یا غیراکتیو بودنش‬
‫سپس با ‪ for each container‬لوپ ‪ado‬زده روش‬
‫برای استفاده ازین کانتینر باید ابتدا یک اگزتسک هم بنویسیم (در اس کیو ال تسک) ک بگیم‬
‫سلکت کن این جدولو با ایز اکیتوش و این اگز تسک را باید در متغیر ابجکت انداخت‬
‫در قسمت ریزالت ست تنظیمات اسمو انواع متغیرش را باید مشخص کنی‬
‫اگر دوتا ایکس تا سلکت داشتیم باید برای تک تکشون متغیر تعریف کرد‬
‫این اگزتسک خروجی اش یک جدول است پس باید ‪ result set‬فول باشه‬
‫ریزالت ست مجموعه ای از جداول یا جدول است‬

‫از انجایی ک این جداول در سرور و دیتابیس های مختلف است باید در پراپرتیع سورس‬
‫‪ Intial va server name‬را تغییر دهیم ‪ =...‬دیقه ‪35‬‬
‫هم چنین در همون سورس باید قسمت جدول را متغیر کرده حتما ‪ ...‬مقدار دهی اولیه حتما‬
‫انجام شود‬

‫تکنیک اپدیت جدولی ک از جدول دیگر دارد ورودی میگیرد‬


‫مثال ‪ 9-1‬جدولی بشیند جای ‪ 9-1‬جدول دیگر‬

‫حواست به تغییر کدپیج حین خواندن فایلی و ریختن ب جدولی باشد که باید یکی باشد چراکه‬
‫عوض میشود مقدار اشغال فضا و دیتاتایپش‬
‫این کدپیج در پراپرتیز سمت مقصد و مبدا است ک باید بسته ب شرایط یکیش را تغییر دهی‬
‫(دیقه ‪)70-60‬‬
‫کامپوننت ‪ comversion‬برای تغییر دیتاتایپ‬

‫توجه‬
‫پارامتر‬
‫دیقه ‪70‬‬
‫تمرین دیقه ‪ 90‬جالب‬

‫‪Incremental load‬‬
‫‪SCD‬‬
‫سه نوع دارد‬
‫‪ : 0‬بعضی از ستون ها هنگام بروزرسانی ب هیچ وجه نباید تغییر کند!میشه فیکسد‬
‫اتریبیوت ک تایپ یک‬
‫‪ : 1‬هرتغییری داشته باشیم تغییر میدهد هیستیکال نداریم‬
‫‪ : 2‬قبلی را نگه میدارد و یک سطر جدید با همون ایدی ویژگی ها میدهد البته ساروگیت‬
‫متفاوته‬
‫با اینکار هیستریکال رعایت شده‬

‫برای بروزروسانی‬
‫برای جداول دایم از ‪ scd‬استفاده میشود‬
‫‪ Update insert‬اک ولی دیل نه‬

‫ابتدا سورس را انتخاب کرده ‪...‬‬


‫کامپوننت ‪ scd‬را انتخاب کرده‬
‫سورس را ب بهش وصل کرده‬
‫کانکشن این ‪ scd‬را حواست باشد باید ورهوس باشد نه سورس!‬
‫حال باید بهم عامل جوینی مقایسه انتخاب شود ک میتواند کامپوزیت کی باشد‬
‫مرحله بعد باید تایپ تغییر را مشخص کنی‬
‫وقتی هیستروکیال میزاریم برای هیستریکال نوع نگه داریه تاریخو دومی گذاشته‬
‫البته توجه شود دوتا ستون هم باید اضافه شود‬
‫یوزر استارت هم بزار‬

‫‪Changing attributes‬‬
‫برای وقتی است ک اتریبیوتی را تغییر میدهیم و هیستریکال گرفته ایمش و حاال میپرسد‬
‫مقدار اتریبیوت در تاریخ قبل هم تغیییر کند یا خیر ‪ =...‬بستگی ب اون بیزنس و اتریبیوت‬
‫داره‬
‫‪Intramded memer‬‬
‫برای وقتی ک مشتری چیزی جدیدی در جدول دیم باید بیاید ولی هنو وقت اپدیتش نشده پس‬
‫نمیاید حال اون مشتری ی تراکنشی انجام داده در فکت میخواهیم بیاید‪.‬‬
‫وقتی اینو بزنیم دیگ مشکلی نداریم‬
‫تیکشو حواست باشه بزنی پس‬
‫این ویژگی برای لحظه ی آنی است!‬
‫وقتی جدولی هیستریکال داریم بقیه رو چنج باید بگیریم چرا ک اینفرد داشته باشیم و فیکس‬
‫باشه دیگ نال میده و چنج نمیکنید!!‬

‫بروزرسانی دیم ها خارج وقت اداری فکت وقت اداری‬


‫جلسه ‪6‬‬

‫مهم‬
‫در جدول فکت ستون تفسیر شدنی نداریم‬
‫ینی مثال بگیم ‪ 0‬ایناس ‪ 1‬ایناس ‪ ...‬پس باید جدا کنیم اگر اینجوری بودن‬

‫توجه‬
‫وقتی ک داریم در سورس دیتا مشخص میکنیم اگر ازون جدول ی سری ستونش مدنظرمون‬
‫بود ن همه اش از ‪ build query‬استفاده کرد ‪ ...‬از بخش کالم بری کیر میشی‬
‫در کامپوننت ‪ sort‬عامل اتصالو باید درش مشخص کنی‬

‫‪Conditional split‬‬
‫انشعاب دادن یک جریان(ورودیش در اصل باید یک جدول باشد مثل مرج)‬
‫میتوان رو متغیرها ستون اعمالش کرد یا ‪ n‬تا خروجی داشته باشد‬

‫توجه‬
‫وقتی مرج میکنی در ‪ ssis‬باید یا سرتش کنی با کامپوننت یا دستی تو همون سورس در‬
‫ادونس سرتش کنیم بعد بدیمش مرج‬

‫کامپوننت ‪lookup‬‬
‫چرایی استفاده؟!‬

You might also like