در این قسمت در خصوص توابع مرتبط با ساختار سلسله مراتبی
صحبت خواهد شد.
Select { [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006], cousin( [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006], [Date].[Calendar].[Calendar Year].[CY 2007] ) } on columns, [Measures].[Reseller Sales Amount] on rows From [Adventure Works]
تابع عمو زاده به این صورت کار می کند که دو پارامتر می گیرد . پارامتر اول سطح فعلی را مشخص می کند . پارامتر دوم سطح بالاتر از سطح اول را مشخص می کند در ساختار سلسله مراتبی و خروجی برابر است با سطحی برابر سطح پارامتر اول در زیر مجموعه ی پارامتر دوم و هم تراز پارامتر اول .
خروجی به صورت زیر میباشد:
خوب حالا به ساختار زیر دقت کنید (ساختار سلسله مراتبی Date )
همانطور که مشخص میباشد تاریخها از 2005 تا 2008 و سال 2010 میباشند و فصول عبارتند از دو فصل پایانی سال 2005 و تمامی فصول سال 2006 و 2007 و سه فصل اول سال 2008 و فصل چهارم سال 2010 . حال دوباره به کوئری نوشته شده دقت کنید. در کوئری بالا فصل همسطح فصل اول سال 2006 در سال 2007 مورد واکشی قرار گرفته است که همان فصل اول در سال 2007 میباشد.
حال به بررس کوئری زیر خواهیم پرداخت:
Select { [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006], cousin( [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006], [Date].[Calendar].[Calendar Semester].[H2 CY 2006] ) } on columns, [Measures].[Reseller Sales Amount] on rows From [Adventure Works]
در این کوئری ما ابتدا ستون فصل اول سال 2006 را بر می گردانیم . سپس در تابع پسر عمو در نیم فصل دوم سال 2006 به دنبال هم سطح فصل اول 2006 می گردیم .
نمودار درختی زیر توضیح کاملی به ما خواهد داد:
حال برای ادامهی مطلب کار بر روی ساختارهای سلسله مراتبی، ابتدا باید در خصوص نحوهی ایجاد Range توضیحاتی ارایه گردد. دو کوئری زیر را در نظر گرفته و خروجی آنها را با هم مقایسه نمایید
Select { [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006], [Date].[Calendar].[Calendar Quarter].[Q2 CY 2006], [Date].[Calendar].[Calendar Quarter].[Q3 CY 2006] } on columns, [Measures].[Reseller Sales Amount] on rows From [Adventure Works]
و
Select [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006]: [Date].[Calendar].[Calendar Quarter].[Q3 CY 2006] on columns, [Measures].[Reseller Sales Amount] on rows From [Adventure Works]
خروجیها به صورت زیر میباشد :
و
مشخص میباشد که از علامت <:> برای ایجاد یک محدوده و جلوگیری از تولید کدهای بلند و طولانی استفاده میشود.
حال کوئری زیر را اجرا کنید:
Select [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006] : cousin( [Date].[Calendar].[Calendar Quarter].[Q1 CY 2006], [Date].[Calendar].[Calendar Semester].[H2 CY 2006] ) on columns, [Measures].[Reseller Sales Amount] on rows From [Adventure Works]
در این کوئری در ابتدا تابع پسر عمو اجرا می گردد، سپس تابع رنج اجرا می گردد و در نتیجه، فاصله ی بین Q1 CY 2006 تا Q3 CY 2006 را بدست میآورد.
نمودار درختی زیر توضیح کاملی به ما خواهد داد :
خروجی به صورت زیر میباشد
در قسمتهای بعدی دیگر توابع MDX Queryها را بررسی میکنیم.