گاهی اوقات ممکن است نیاز داشته باشیم در یک عدد، آخرین رقم (ارقام) غیر صفر را بدست بیاوریم. برای مثال دو عدد 185005035 و 56056502 را در نظر بگیرید، با اجرای کوئری زیر نتیجه عدد اول برابر 35 و نتیجه عدد دوم 2 میباشد.
declare @t table (num int) insert into @t select 185005035 union all select 56056502 select num, right(num,case when string_len=0 then total_len else string_len-1 end) as new_num from ( select num,len(num) as total_len, patindex('%[0]%',cast(reverse(num) as varchar(100))) as string_len from @t ) as t |
برای پیاده سازی مدلهای داده کاوی در SSAS از دو نوع دادهای استفاده میشود. یک نوع فیزیکی که در ساختار دادهکاوی کاربرد دارد و دیگری نوع منطقی است که برای ستونهای مورد استفاده در مدل بکار میرود. به زبان سادهتر در زمان ایجاد یک مدل دادهکاوی برای ستونهای انتخاب شده از جداول دو نوع دادهای Data Type و Content Type خواسته میشود که اولی به عنوان نوع فیزیکی و دومی به عنوان نوع منطقی برای SSAS شناخته میشود.
در ادامه به شرح هر یک از آنها خواهم پرداخت اما قبل از آن به عبارات و تعارف زیر توجه کنید.
Data Type: از آن به عنوان نوع دادهای نام برده میشود که نشان دهنده نوع رکوردهای یک ستون خاص در جدول است.
Content Type: از آن به عنوان نوع محتوایی نام برده میشود که بیانگر شرح حالت و نوع منطقی رکوردهای ستون است.
Column: ستونهای هر جدول است.
Row: به سطرهای هر جدول گفته میشود.
Case Table: منظور از آن جدول اصلی و پایه است.
Nested Table: منظور از آن جدول کمکی یا تودرتو است.
Input: به ستونهای ورودی انتخاب شده برای مدل گفته میشود.
Predictable: به ستونهایی که باید پیش بینی بر اساس آنها انجام شود گفته میشود. از آنها به عنوان ستونهای قابل پیشبینی نیز یاد میشود.
در زمان ساخت مدل، نوع دادهای هر ستون در قسمت Data Type مشخص میشود که این کار باعث میشود تا الگوریتم اطلاعاتی از دادههای هر ستون بدست آورد و در پردازش آنها بکار گیرد. در دادهکاوی هر نوع دادهای یک یا چند نوع محتوایی را پشتیبانی میکند. Content Type رفتار محتوای ستونها را به SSAS توصیف میکند. برای مثال اگر دادههای یک ستون در وقفههای زمانی خاصی مانند روزهای هفته تکرار شوند میتوان نوع محتوایی مربوط به آن ستون را برابر با Cyclical قرار داد.
برخی از الگوریتمهای دادهکاوی برای اینکه به خوبی کار کنند حساسیت زیادی به مشخص بودن این انواع دارند مانند الگوریتم بیز که نمیتواند از نوع محتوایی Continus برای مقادیر ورودی استفاده کند.
Data Type
هنگام ساخت مدل دادهکاوی در SSAS باید نوع دادهای هر ستون مشخص شود. در واقع نوع دادهای مشخص کنندهی متنی یا عددی بودن دادههای موجود در ستون است. موتور دادهکاوی از این اطلاعات برای مشخص کردن نحوه پردازش استفاده میکند.
هر نوع دادهای یک یا چند نوع محتوایی را پشتیبانی میکند. برای مثال اگر دادههای موجود در یک ستون عدد باشند میتوانید در قسمت Data Type آن نوع Numeric یا Text را انتخاب کنید. اگر نوع Numeric را انتخاب کنید در آن صورت برای Content Type نوعهای Continuous و Discretize قابل انتخاب هستند.
جدول زیر نوعهای دادهای و محتوایی قابل پشتیبانی را نشان میدهد.
نوع محتوایی (Content Types) نوع دادهای (Data
Type) Cyclical,
Discrete, Discretized, Key Sequence,Ordered, Sequence Text Continuous,
Cyclical, Discrete, Discretized, Key, Key Sequence, Key Time, Ordered, Sequence Long Cyclical, Discrete, Ordered Boolean Continuous, Cyclical, Discrete, Discretized, Key, Key Sequence, Key
Time, Ordered, Sequence Double Continuous, Cyclical, Discrete, Discretized, Key, Key Sequence, Key
Time, Ordered Date
Content Type
همانطور که پیشتر گفته شد نوع محتوایی برای SSAS به عنوان یک نوع منطقی شناخته میشود که بیانگر رفتار محتوای ستونها است. در ادامه به شرح هر یک از انواع Content Type میپردازم.
Discrete: این نوع نشان دهنده این است که ستون مورد نظر شامل تعداد محدودی از مقادیر است. برای مثال ستون جنسیت را در نظر بگیرید، مقادیر این ستون یا مرد است یا زن، به ستونهایی که این نوع مقادیر را در خود دارند Discrete گفته میشود. این نوع مقادیر نظم و ترتیب خاصی ندارند و نمیتوانند حاکی از مسئلهای باشند و با اینکه ممکن است گاهی اوقات عددی هم باشند، نمیتوانند ما را به مقصود خاصی برسانند. مثل شماره تلفن که عدد است اما کاربردی در محاسبات ندارند.
Continuous: این نوع بیانگر دادههای عددی نامحدود است که در یک مقیاس خاصی میان مقادیر وجود دارد. همانطور که در مورد نوع Discreteمتوجه شدید، این نوع محدود و قابل شمارش است اما مقادیر Continuous مقادیر عددی در رنج بزرگ و نامحدود میباشند. یک ستون با رکوردهایی از درجه حرارت مثال مناسبی برای این نوع است.
Discretized: این نوع بیانگر فرایند قرار دادن یک مجموعه از تعداد محدودی از مقادیر Continuous در یک گروه است. به عبارت دیگر نوع discretized گروهی از دادههای مشتق شده از ستون Continuous را شامل میشود. میتوان دادهها را به صورت دستی discretized کرد.
Key: همانطور که از نام این نوع مشخص است، به معنای یونیک بودن رکوردها در هر سطر است. معمولا در جداول اصلی (Case Tables) کلید به صورت عددی یا متنی مشخص میشود. انتخاب نوع Key برای ستون به معنای عدم آنالیز برروی آن ستون است و فقط جهت پیگیری رکوردها استفاده میشود.
جداول تودرتو (Nested Tables) نیز ستون کلید دارند اما معنای Key در این جداول کمی متفاوت با قبلی است. در جداول تودرتو زمانی یک ستون را به عنوان Key معرفی میکنیم که قصد داشته باشیم تا از خصوصیات آن ستون برای آنالیز استفاده کنیم. با این حال مقادیر ستون این جدول باید جدول اصلی یونیک باشد. برای مثال اگر قصد آنالیز محصولات خریداری شدهی مشتریان را دارید، باید در قسمت Content Type مربوط به ستون CustomerID در جدول اصلی نوع Key را انتخاب کنید و همین کار را برای ستون PurchasedProducts در جدول تودرتو انجام دهید.
key sequence: از این نوع فقط در الگوریتم خوشه بندی زنجیرهای استفاده میشود و بیانگر و توصیف کنندهی رویدادهای پیوسته و زنجیرهای در ستون است.
key time: از این نوع فقط در الگوریتم سری زمانی استفاده میشود و به معنای این است که مقادیر این ستون در واحد زمان نمایش داده میشوند.
Cyclical: رکوردهای موجود در این نوع بیانگر وجود یک مجموعهی گردشی است برای مثال روزهای هفته یک مجموعه گردشی است زیرا هفت روز هفته مرتبا تکرار میشود. ستونهای cyclical را با نوعهای ordered discrete نیز مشخص میکنند.
Ordered: این نوع معمولا مشخص کنندهی ستونهایی است که مقادیر آنها به صورت زنجیرهای است.
در لینک زیر میتوانید این مطلب را مطالعه کنید.
توسط رویه زیر میتوانید n عدد تصادفی در یک باز مشخص بدست آورید.
Create Procedure
RandomNumbers ( @min
bigint ,@max
bigint ,@count
int ) as Set Nocount On Declare @t table (num bigint) Declare @start bigint Declare @End bigint While @min<=@max Begin Insert into @t values(@min) set @min=@min+1 End Set Rowcount @count Select num from @t order by newid() Set Rowcount 0
برای اجرا کردن رویه ابتدا و انتهای بازه و تعداد اعداد تصادفی را مشخص کنید.
Exec RandomNumbers 100,300,10
پیشتر اینجا مطلبی در مورد مدیریت رخدادها به صورت دستی نوشته بودم. در این پست قصد دارم به نحوه ثبت رخدادها به صورت خودکار در هنگام اجرای کامپننتها بپردازم. در واقع در این روش نیازی نیست که جدول جداگانهای داشته باشیم و یا پارمتری تنظیم کنیم، فقط کافیست یکسری تنظیمات اولیه انجام دهیم و همه چیز را به خود SSIS بسپاریم.
برای اینکار مراحل زیر را انجام دهید.
1- پس از آنکه پکیج مورد نظر را ایجاد کردید از نوار ابزار ابتدا SSIS و سپس Loging را انتخاب کنید.
2- مطابق شکل زیر تنظیمات مربوط به Log را انجام دهید.
از پنل سمت چپ میتوانید تمام پکیج و یا یک کامپننت خاص را انتخاب کنید. در صورتی که پکیج انتخاب شده باشد، رویدادی که در مرحله بعد انتخاب خواهید کرد از تمام کامپننتهای پکیج Log میگیرد.
در قسمت Providers and Logs نوع Provider خود را انتخاب کنید. از آنجایی که ما قصد داریم Log را در SQL و به صورت جدولی داشته باشیم از SSIS log provider for SQL Server استفاده میکنیم.
در Configuration محل ذخیره Log را انتخاب کنید.
از قسمت Details میتوانید تنظیمات مربوط به Log و نحوه آن را مشخص کنید.
3- بر روی Ok کلیک کرده و پکیج را اجرا کنید.
از دستور زیر برای مشاهده Log استفاده کنید.
SELECT * FROM dbo.sysssislog