Dax
زبان Dax زبان تحلیل اطلاعات و داده ها در مایکروسافت پاور بی آی می باشد. لینک مایکروسافت جهت آموزش زبان Dax عبارت است از Introduction to Dax-Power BI و کتاب Beginning Dax with Power BI جهت مطالعه پیشنهاد میگردد.
Dax مخفف Data Analysis Expressions می باشد. و یک زبان کوئری و functional محسوب می شود. یعنی کدی که می نویسید یک خروجی برمیگرداند، این خروجی ممکن است تک مقدار باشد و یا ممکن است مجموعه ای از رکوردها را به ما برگرداند.
هدف زبانDax این است که کمک می کند تا فهم بهتری نسبت به اطلاعات داشته باشیم و قدرت آنالیز و گزارشات خود را افزایش دهید. زبان Dax داخل پاور بی آی در مدل import استفاده می شود و همچنین در مدل Live conection مدل تبولار و مدل direct query هم استفاده می شود. داخل SSAS تبولار هم می توانید از زبان Dax استفاده کنید.
بنابراین زبان Dax در سه جا قابل استفاده می باشد که عبارت است از power bi، power pivot excel و SSASتبولار
زبان Dax یک زبان برنامه نویسی نیست بلکه فقط دیتا را می خواند و تحلیل انجام می دهد و در نهایت نتیجه را برمیگرداند. همانطور که گفتیم یک زبان functional language می باشد یعنی از طریق فراخوانی توابع کار خود را انجام می دهد و خروجی را تولید می کند. این توابع شامل دسته بندی زیر می باشند.
Date Time
Filter
Logical
Info
Mathtrig
ParentChild
Statistical
Text
دقت کنید در زبان Dax فقط باید از توابعی که قلا تعریف شده استفاده کنید. و نمیتوانید خودتان تابع تعریف کنید. مایکروسافت در ارائه ورژن جدید خود گاهی توابع جدیدی معرفی میکند ولی این توابع جدید در SSAS تبولار وجود ندارد.
زبان Dax این امکان را به شما نمی دهد که بتوانید روی فایل اولیه (دیتا سورس) تغییرات بدهید یعنی نمیتواند insert، delete و update کند.
دیتا مدل در زبان Dax شامل Data، Table، Columns، Relationships، Measure می باشد.
برای آموزش مطالب از دیتای AdventureworkDW از اسکیوال سرور استفاده می کنیم و مدل import را انتخاب می کنیم.
جداول مورد نیاز را انتخاب کرده و به صفحه model view رفته تا ارتباطها را مشاهده کنید. همانطور که گفته شد سعی کنید جداول fact پایین و جداول dimension بالا باشند تا خوانایی بهتر شود. در اسلایسرها همیشه فیلدی از جداول dimenssionها را قرار می دهیم. با توجه به شکل از آنجاییکه دیتا را از database اسکیوال سرور خواندیم خود پاور بی آی ارتباطها را رسم کرده است ولی همیشه این ارتباطها را خودتون بررسی کنید و به پاور بی آی اعتماد نکنید.
همانطور که میبینید بین دو جدول dimdate و factinternetsales سه ارتباط وجود دارد که یکی فعال و مابقی غیرفعال هستند. ارتباط فعال همان تاریخ سررسید فاکتور می باشد برای تغییر این ارتباط بهتر است این ارتباط فعال را delete کرده و ارتباطی که برمبنای orderdatekey می باشد را فعال می کنیم بدین ترتیب که روی ارتباط مورد نظر دوبار کلیک کرده تا صفحه edit باز شود.
بعد از اصلاح کردن ارتباط فعال بین این دو جدول دیتا مدل به شکل زیر می شود.
بعد از اینکه دیتا مدل را به درستی تعریف کردید می توانید وارد report view شده و از ویژوالها جهت تهیه گزارشات استفاده کنید.
به کمک زبان dax سه نوع محاسبات می توانیم ایجاد کنیم :
Calculated columns یا ستون محاسباتی
Calculated measures یا مژرهای محاسباتی که سنجه آماری هم گفته می شود.
Calculated tables یا جدول محاسباتی
در زبان dax اطلاعات را می خوانیم و تحلیل می کنیم بنابراین باید نام جدول و نام ستون مورد نظر را داشته باشید. که به دو صورت می توانید نام جدول و ستون را تعیین کنید.
اگر نام جدول شما دارای فاصله بود باید آن را داخل ‘ ‘ قرار داده و نام ستون را داخل براکت بنویسید.
اما اگر نام جدول فاصله نداشت فقط باید نام جدول را نوشته و نام ستون را داخل براکت قرار دهید.
بنابراین بهتر است همیشه در نام دادن به ستونهای جداول از فاصله استفاده نکنید. در مثال زیر یک ستون محاسباتی ایجاد می کند همانطور که میبینید از جدول sales دو ستون unitprice و quantity را نیاز دارد. از آنجایی که هر دو ستون برای یک جدول است می توانید نام جدول را فقط یکبار بنویسد ولی توصیه می شود همیشه در کنار نام ستون نام جدول را بنویسد.
نکته بسیار مهم : هیچوقت در نامگذاری جداول از فاصله استفاده نکنید. تا حد امکان از اسامی معنادار استفاده کنید.
برای ایجاد ستون محاسباتی وارد صفحه data view شده روی جدول مورد نظر کلیک کرده تا ستونهای آن جدول را نشان دهد. از تب modeling گزینه new column را بزنید. می خواهیم در ایت ستون بعنوان مثال نام و فامیلی مشتری را کنار هم قرار دهیم. ترجیحا سعی کنید نام ستون هم بدون فاصله باشد. فرمول را به شکل زیر می نویسید. ترکیب رشته ها در زبان dax به کمک کارکتر & انجام می شود.
به این ترتیب یک ستون جدید در این جدول (DimCustomer ) با نام FullName ایجاد شد که شامل firstName و یک فاصله و LastName می باشد.
در جدول FactInternetSales از مشخصات کالا فقط ProductKey را داریم فرض کنید بخواهیم درون این جدول رنگ هر محصول را هم قرار دهیم، بعبارت دیگر می خواهیم در جدول فروش یک ستون بنام productColor ایجاد کنیم.
دقت کنید فیلد ProductColor در یک جدول دیگر قرار دارد. (DimProduct )
وارد صفحه data view شده و روی جدول فروش گزینه new column را بزنید. با توجه به دیتا مدل مشاهده می کنید که جدول dimproduct سمت one و جدول factinternetsales سمت many رابطه می باشد.
هدف ما این است که رنگ محصولات را از جدول محصول بیاوریم و داخل جدول فروش قرار دهیم یعنی اطلاعاتی از سمت one می خواهیم بخوانیم و در سمت many قرار دهیم. برای این کار از تابع Related استفاده می کنیم.
تابع related به ما کمک می کند که اطلاعاتی از سمت one ارتباط بیاوریم.