قابلیتهای ویژهی enum در TypeScript
Select { [Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount] } on columns, head( [Customer].[Customer Geography].[Country], 2 )on rows From [Adventure Works]
تابع Head، تعداد مشخص شده بر اساس پارامتر اول از آن محور را بر اساس نحوهی نمایش تنظیم شده در SSAS، واکشی میکند.
حال تصور کنید بخواهیم شرط زیر را بر روی کوئری بالا اجرا کنیم
( [Measures].[Internet Sales Amount] >= '2500000' )
به عبارت دیگر ما میخواهیم دو کشوری را انتخاب کنیم که میزان فروش اینترنتی آنها بالای 2500000 باشد.
کوئری مشابه زیر میباشد
Select { [Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount] } on columns, head( [Customer].[Customer Geography].[Country], 2 )on rows From [Adventure Works] Where ( [Measures].[Internet Sales Amount] >= '2500000' )
البته خطای زیر را خواهیم داشت.
به یاد داشته باشیم در صورتیکه بخواهیم ایجاد محدودیت در نمایش دادهها را در یک محور داشته باشیم، باید از تابع Filter استفاده کنیم؛ به صورت زیر:
Select Filter( { [Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount] } , [Measures].[Internet Sales Amount] >= 2644017.71 ) on columns, head( [Customer].[Customer Geography].[Country], 3 )on rows From [Adventure Works]
تابع Filter دو پارامتر می گیرد. پارامتر اول نام ردیف یا ستونی می باشد که روی آن می خواهیم عمل فیلتر را انجام دهیم. پارامتر دوم شرط فیلترینگ می باشد که می بایست مانند T/SQL دارای یک خروجی Boolean باشد
همچنان نتیجه درست نمیباشد ! چرا؟
اگر بخواهیم شرط روی Axis ردیف (کشور ها) اعمال گردد، باید عملیات فیلترینگ در این Axis انجام شود . بنابر این خروجی بدست آمده صحیح نمی باشد زیرا ما عملیات فیلترینگ را روی ستون ها انجام داده ایم.
کوئری زیر را اجرا نمایید
Select { [Measures].[Internet Sales Amount] ,[Measures].[Internet Tax Amount] } on columns, head( Filter( [Customer].[Customer Geography].[Country] , [Measures].[Internet Sales Amount] >= 2644017.71 ), 3) on rows From [Adventure Works]
البته توجه کنید که این کوئری، سه کشور اول که در شرط زیر قرار دارند را بر می گرداند و الزاما این سه کشور از تمام کشور های دیگر بیشتر نمی باشند.
در این حالت سه کشور که بالاتر از مقدار ذکر شده، فروش اینترنتی دارند، در خروجی قرار می گیرند . البته این سه کشور دارای بالاترین فروش نمی باشند بلکه به ترتیب اسم، از بالا گزینش انجام شده است و بعد از پیدا کردن سه کشور که در شرط قرار بگیرند، جستجو تمام شده است .
اگر بخواهیم سه کشوری را که بالاترین میزان فروش را دارند پیدا کنیم و شرط هم همواره اعمال گردد، کوئری زیر درست می باشد:
Select { [Measures].[Internet Sales Amount] ,[Measures].[Internet Tax Amount] } on columns, TopCount( Filter( [Customer].[Customer Geography].[Country] , [Measures].[Internet Sales Amount] >= 2644017.71 ), 3, [Measures].[Internet Sales Amount]) on rows From [Adventure Works]
در این حالت به جای تابع Head از تابع TopCount استفاده گردیده است .این تابع سه کشوری را که بیشترین فروش اینترنتی را داشته اند و این فروش بالاتر از مقدار ذکر شده در شرط می باشد را بر می گرداند .البته در اینجا تابع topcount دارای سه پارامتر می باشد و در پارامتر سوم اعلام میکند که تعداد بالای مجموعه براساس چه شاخصی باید به دست بیاید.
حال اگر بخواهیم سه ردیف انتهایی جدول را واکشی کنیم داریم:
Select { [Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount] }on columns, tail([Customer].[Customer Geography].[Country], 3)on rows From [Adventure Works]
این تابع برعکس تابع Head کار میکند و N ردیف آ اخر مجموعه را بدست می آورد . البته در بالا فقط 3 ردیف انتهایی را
در خروجی آورده ایم و هیچ شرطی اعمال نگردیده است.
تغییرات مهم مقایسهی رشتهها در NET 5.0.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <EnableNETAnalyzers>true</EnableNETAnalyzers> </PropertyGroup> </Project>
[*.cs] # CA1304: Specify CultureInfo # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1304 dotnet_diagnostic.CA1304.severity = error # CA1305: Specify IFormatProvider # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1305 dotnet_diagnostic.CA1305.severity = error # CA1307: Specify StringComparison for clarity # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1307 dotnet_diagnostic.CA1307.severity = error # CA1308: Normalize strings to uppercase # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1308 dotnet_diagnostic.CA1308.severity = error # CA1309: Use ordinal string comparison # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1309 dotnet_diagnostic.CA1309.severity = error # CA1310: Specify StringComparison for correctness # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1310 dotnet_diagnostic.CA1310.severity = error # CA1311: Specify a culture or use an invariant version # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1311 dotnet_diagnostic.CA1311.severity = error # CA1820: Test for empty strings using string length # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1820 dotnet_diagnostic.CA1820.severity = error # CA1834: Consider using 'StringBuilder.Append(char)' when applicable # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1834 dotnet_diagnostic.CA1834.severity = error # CA1858: Use 'StartsWith' instead of 'IndexOf' # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1858 dotnet_diagnostic.CA1858.severity = error # CA2249: Consider using 'string.Contains' instead of 'string.IndexOf' # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2249 dotnet_diagnostic.CA2249.severity = error # CA2251: Use 'string.Equals' # Help link: https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca2251 dotnet_diagnostic.CA2251.severity = error