آموزش Power BI صفر تا سکو : قسمت دهم (Table Functions در DAX)
در ادامه آموزش سریالی نرم افزار Power BI به آموزش زبان DAX و توابع جدولی یا همان Table Functions در DAX می پردازیم. توابعی که خروجی آن ها یک جدول است اما در نوشتن Measure ها کاربرد بسیاری دارند.
برای بررسی انواع Table Functions در DAX از پایگاه داده AdventureWorksDW استفاده شده است. نمایی از مدل داده را در تصویر زیر مشاهده می کنید. 4 جدول شامل اطلاعات فروش، کالا، مشتریان و تاریخ در مدل بارگذاری شده است و تشکیل یک مدل ستاره ای را داده است.
تابع FILTER
تابع FILTER همان طور که از اسم آن بر می آید وظیفه محدود کردن ردیف های یک جدول را به عهده دارد. این تابع یک جدول به عنوان ورودی دریافت می کند و یک جدول با ردیف های محدود شده را به عنوان خروجی بر می گرداند.
برای مثال فرض کنید که می خواهیم تعداد مشتریان دارای فرزند را استخراج کنیم. برای این منظور به صورت زیر عمل می کنیم. ابتدا جدول مشتریان را بر اساس فیلد Total Children محدود می کنیم، سپس تعداد ردیف های آن را شمارش می کنیم.
همان طور که می دانید، خروجی این فرمول یک جدول است و تنها با ایجاد یک جدول جدید (New Table) می توان خروجی آن را مشاهده کرد. در صورت انجام این عمل جدول به طور فیزیکی در مدل ایجاد می شود در حالی که ما نیازی به این جدول نداریم.
ما تعداد ردیف های این جدول را می خواهیم نه خود جدول را! پس آن را در قالب یک جدول مجازی به تابع COUNTROWS معرفی می کنیم. تابع COUNTROWS یک جدول را به عنوان ورودی دریافت و ردیف های آن را مورد شمارش قرار می دهد. ما به جای جدول مشتریان، جدول فیلتر شده مشتریان را به این تابع معرفی می کنیم.
بیایید به مقایسه تعداد کل مشتریان با مشتریان دارای فرزند بپردازیم. ابتدا مژری ایجاد می کنیم که تعداد کل مشتریان را به ما نشان دهد.
حال مژری ایجاد می کنیم که تعداد مشتریان دارای فرزند را برای ما شمارش کند.
حال بیایید مژر های ایجاد شده را برای شغل های مختلف مقایسه کنیم.
ALL
تابع ALL یک تابع بسیار پرکاربرد در DAX به شمار می رود. این تابع می تواند فیلترهای اعمال شده را از سمت یک ستون، جدول یا کلیه جداول را نادیده بگیرد. فرض کنید می خواهیم درصد مشتریان دارای فرزند را به مشتریان هر رده شغلی به دست آوریم.
همان طور که مشاهده می کنید در شغل های مدیریت 3075 مشتری وجود دارد که 2610 نفر آن ها دارای فرزند هستند. از تقسیم این 2 عدد به یکدیگر عدد 84.88 درصد به دست می آید که نشان می دهد حدود 85 درصد مدیران دارای فرزند هستند. این مژر به راحتی با تقسیم 2 مژر بر یکدیگر به دست آمد.
حال فرض کنید می خواهیم جدولی داشته باشیم که درصد هر ردیف شغلی را به کل حساب کند. در واقع می خواهید بدانید مشتریان شما در هر رده شغلی چه درصدی از کل مشتریان را تشکیل می دهد. اینجاست که ALL به کمک شما می آید.
در واقع شما باید با تابع ALL فیلترهای اعمال شده از سمت جدول مشتریان را نادیده بگیرید.
نتیجه به صورت زیر قابل مشاهده است.
همان طور که مشاهده می کنید تمامی عددها برای این ستون برابرند و جمع کل را نشان می دهند. شاید از خود می پرسید این نتیجه به چه دردی می خورد؟ پاسخ این است که برای به دست آوردن درصد. کافی است شما این دو مژر را بر هم تقسیم کنید.
نتیجه به صورت زیر قابل مشاهده است. به طور مثال شما متوجه می شوید که 16.64 درصد مشتریان شما در مشاغل مدیریتی مشغول به کار هستند.
VALUES
این تابع لیستی بدون تکرار از یک ستون را برمی گرداند و همان طور که قابل حدس است خروجی این تابع یک جدول است. فرض کنید می خواهیم بدانیم که چند رنگ در کالاهای ما وجود دارد.
همان طور که قابل مشاهده است 606 رنگ نتیجه نهایی است. نتیجه ای که مد نظر ما نیست. در واقع با این کار ما ردیف های ستون رنگ را شمرده ایم که 606 ردیف بوده است. ما باید هر رنگ را تنها یک بار در شمارش لحاظ کنیم. برای این کار کافیست از تابع VALUES استفاده کنیم.
در واقع با استفاده از VALUES لیستی یکتا از رنگ های موجود استخراج کرده و آن را به شمارش در آوردیم.
در تصویر زیر می توانید مژر نوشته شده به تابع ALL را نیز مشاهده می کنید.
مقایسه دو مژر نوشته شده با VALUES و ALL قابل مشاهده است. یکی به فیلتر واکنش داده و دیگری خیر! در واقع گروه دوچرخه دارای 5 رنگ است.
DISTINCT
این تابع نیز مانند VALUES لیستی یکتا از مقادیر یک ستون را بر می گرداند. اما تفاوت های کوچکی دارد که در مطالب بعد به آن اشاره خواهد شد. همان مثال قبل را با استفاده از تابع DISTINCT نیز می توان انجام داد. همان طور که مشاهده می کنید این تابع نیز با فیلتر در تعامل است.
در این مطلب با بخشی از مبحث توابع جدولی یا همان Table Functions در DAX آشنا شدید. اگر تازه به جمع ما اضافه شدید قسمت های قبلی این آموزش را از دست ندهید.
درباره حسین وثوقی
دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
نوشته های بیشتر از حسین وثوقیمطالب زیر را حتما بخوانید
-
نمونه پروژه داده های اقتصادی با Power BI
387 بازدید
-
نمونه پروژه قند مواد غذایی با Power BI
505 بازدید
-
اولین مسابقه طراحی داشبورد با Power BI
988 بازدید
-
همه چیز در باره اسلایسر Slicer در Power BI
576 بازدید
-
دوره رایگان آموزش Power BI پاوربی آی
2.06k بازدید
-
پروژه مدیریت مواد اولیه و تولید با Power BI
5.71k بازدید
سلام مهندس چرا از صفر تا سکو را ادامه نمیدین؟؟؟؟؟ یکی از بهترین مطالب سایتتون بود….. متشکر
سلام … خوشحالم که راضی بودین …
حتما ادامه میدیم
ضمن اینکه یک سری مطلب سریالی دکس هم شروع کردیم
ممنون که مطالب مفید رو به این خوبی و راحتی انتقال میدید.