تابع All
تابع all برای برداشتن تاثیر فیلترهای درونی و خارجی بر محاسبات Measure می باشد. این تابع بسیار مهم و کاربردی می باشد به ویژه برای زمانی که می خواهیم در محاسبات measure ، فیلتر از برخی از جدولها یا ستونها بی تاثیر شود. در مبحث interaction می توانستیم نحوه اتصال ویژوال ها را مدیریت کنیم، در زبان dax برای جداولی که بهم مرتبط هستن اگر بخواهید فیلتر برخی را بردارید یعنی تاثیر برخی جداول را از روی فرمول dax بردارید می توانید از توابع all و allexcept و allselected استفاده کنید. این سه تابع برای مبحث فیلترینگ می باشد. البته به یاد داشته باشید که برای جداول مرتبط استفاده می شوند زیرا جداولی که ارتباطی با هم ندارند روی هم تاثیری ندارند.
حالا برای نشان دادن این Measure از یک table استفاده می کنیم. با تعریف این مژر قرار شد که SumSaleAllDate از جدول dimdate تاثیر نگیرد. ولی از SalesTerritoryCountry فیلتر میگیرد.
بنابراین برای مشاهده تاثیر تابع all که نوشته ایم در تعریف measure ، باید از ستوهای جدول dimdate در ویژوال استفاده کرد. همانطور که در شکل زیر می بینید در ستون SumSaleAllDate تکرار اطلاعات داریم. زیرا وقتی فیلتری از جدول dimdate اعمال می شود با توجه به تابع all که نوشته ایم، measure هیچ فیلتری از این جدول را قبول نمی کند. یعنی هر فیلتری از ستونهای dimdate آمد تاثیری از آن نمی گیرد و جمع ستون گفته شده یعنی FactInternetSales را محاسبه می کند.
تابع all را می توان بصورت پیشرفته تر هم تعریف کرد یعنی می توان ستون مورد نظر از جدول مورد نظر را مشخص کرد و دقیقا در تعریف تابع مشخص کنید که از کدام ستون جدول مورد نظرتان تاثیر نگیرد. بعنوان مثال در شکل زیر در تعریف تابع all گفته می شود که از ستون سال مالی جدول dimdate تاثیر نگیر و هیچ فیلتری لحاظ نکن.
بنابراین تاثیر تابع all را وقتی در ویژوال میتوانید ببینید که جدول و یا ستونی که در تابع all نام برده اید را در ویژوال خود قرار داده باشید زیرا این تابع برای فیلدهای دیگر که در تعریف تابع نام برده نشده است هیچ تاثیری ندارد فقط می گوید measure شما از جدول و یا ستونی که در تابع all نام برده شده است تاثیر نگیرد و هیچ فیلتری را قبول نکند.
در جدول زیر می بینید که با توجه به تعریف measure از سال فیلتر قبول نمی کند و از ماه فیلتر قبول می کند. در واقع در ویژوال زیر گفته شده از ستون FiscalYear تاثیری نگیرد و هیچ فیلتری را قبول نکند ولی از ستون EnglishMonthName تاثیر بگیرد و اگر فیلتری دارد اعمال کند.
در واقع این تابع filter context که روی measure تاثیر می گذارد را تغییر می دهد. البته دقت کنید که می توانید نام چندین ستون را در این تابع بنویسد و محدودیتی ندارید.
تابع AllExcept
این تابع عکس تابع all میباشد یعنی می گوید از هیچ جایی فیلتر نگیر بجز ستونهایی که نام میبریم. در measure زیر گفته شده است که محاسبه کن جمع ستون SaleAmount از جدول FactInternetSales و در محاسبات این جمع هیچ فیلتری را قبول نکن بجز جدول DimSalesTerritory و ستون SalesTerritoryCountry
یعنی فقط از این جدول و ستونهایی که در تابع AllExcept نام برده می شود می تواند تاثیر بگیرد و فیلتر شود. در تعریف پارامترهای این تابع باید ابتدا نام جدولشان و سپس نام ستون را نوشت. و اگر بخواهید نام چند جدول را بنویسید باید مجدد با AllExcept نام ببرید.
فقط در صورتی از جدول DimSalesTerritory فیلتر قبول می کند که ستون Country باشد. یعنی فقط فیلتر Countryرا لحاظ می کند.