بعد انتخابی (Dynamic Axis) در Power BI
در این مطلب قصد داریم با نحوه ایجاد بعد انتخابی (Dynamic Axis) در Power BI آشنا شویم. خیلی اوقات پیش می آید که شما نیاز دارید روی یک نمودار تمام اطلاعات را نشان دهید و به کاربر اجازه دهید که شخصا بعد مورد نظر خود را تغییر دهد. در واقع به جای ایجاد 3 نمودار مختلف برای نمایش فروش بر اساس سال، گروه کالا و تحصیلات، همه آن ها را بر روی یک نمودار نشان دهیم.
اگر هنوز نمی دانید هدف این مطلب چیست، تصویر متحرک زیر را مشاهده کنید.
بارگذاری مدل
برای ایجاد بعد داینامیک روش های مختلفی وجود دارد. اما در این مطلب از زبان DAX استفاده می کنیم. برای پیاده سازی این عمل از پایگاه داده AdventureworksDW2017 استفاده می کنیم. طبق تصویر زیر جداول را بارگذاری کرده و مدل داده خود را ایجاد می کنیم.
هدف
هدف ما این است که کاربر بتواند بر حسب نیاز، بعد نمودار را تغییر دهد. در واقع اسلایسری در اختیار کاربر قرار می دهیم تا بعد مورد نیاز خود را انتخاب کرده و مقادیر را بر اساس آن مشاهده کند. پس قابل حدس است که نیاز ما ایجاد جدولی است که تمام ابعاد را در خود داشته باشد.
می خواهیم اسلایسری حاوی 3 بعد را در اختیار کاربر قرار دهیم. بُعد سال، زیر گروه کالا و سطح تحصیلات. پس جدول ما نیز باید شامل اطلاعات این 3 جدول باشد.
ایجاد جدول مورد نظر
برای انجام این عمل باید از 2 تابع CROSSJOIN و ROW استفاده کنیم. باید از New Table استفاده کنیم و مقدمات ایجاد یک جدول جدید را فراهم آوریم.
حال با استفاده از زبان DAX، کد زیر را ایجاد می کنیم.
CROSSJOIN (
ROW ( “Dim”, “Education” ),
VALUES ( DimCustomer[EnglishEducation] )
)
بیایید قدری در مورد این کد صحبت کنیم. از درونی ترین تابع شروع می کنیم. درونی ترین تابع ROW است. این تابع 2 ورودی دریافت می کند. یک اسم و یک Expression. اولین ورودی Dim است که نام ستون را ایجاد می کند و دومی مقدار است. بدیهی است ROW(“Dim”,”Education”) یک جدول یک ردیف و یک ستونه (یک سلول) ایجاد می کند که در تصویر زیر آن را مشاهده می کنید.
اما تابع بیرونی CROSSJOIN است که عمل ضرب را انجام می دهد. در واقع این تابع 2 ستون را دریافت می کند و جدولی از ترکیبات احتمالی آن ها را به وجود می آورد. حاصل ضرب ستون سطح تحصیلات و ستون ایجاد شده در مرحله قبل جدولی به شکل زیر است. توجه کنید که نیازی نیست این کد را بنویسید. این کد تنها برای آموزش کد بود.
حال شما باید برای هر تعداد بعد خود که نیاز دارید کد قبل را تکرار کنید. حال باید 3 متغیر برای 3 بعد مختلف ایجاد کرده و در نهایت با استفاده از تابع UNION آن ها را تحت یک جدول ایجاد کنیم. کافیست کد زیر را نوشته و آن را اجرا کنید تا جدول مورد نظر ایجاد شود.
خروجی زیر نتیجه کد فوق الذکر می باشد. در واقع با استفاده از ترکیب توابع ROW و CROSSJOIN، نام بعد را در کنار مقادیر آن قرار می دهیم و با تابع UNION آن ها را به یک جدول واحد تبدیل می کنیم.
حال باید نام ستون اول را تغییر دهیم چرا که نام ستون را از جدول اول به ارث برده است. نام این ستون را به Values تغییر نام می دهیم.
حال جدول مورد نیاز ما ایجاد گشته است. می توانیم از ستون Dim در اسلایسر استفاده کنیم. اما اگر فکر می کنید کار تمام شده است سخت در اشتباهید!
ایجاد بعد انتخابی (Dynamic Axis) در Power BI
تا اینجای کار زیرساخت مورد نیاز را ایجاد نمودیم. حال باید کد مورد نیاز خود را ایجاد کنیم. پس مژری به ترتیب زیر ایجاد کنید. این مژر در واقع می گوید اگر از اسلایسر هر کدام از مقادیر انتخاب شود کدام بعد نمایش داده شود.
SWITCH (
VALUES ( ‘Table'[Dim] ),
“Education”,
CALCULATE (
[Sales],
TREATAS ( VALUES ( ‘Table'[Values] ), DimCustomer[EnglishEducation] )
),
“Years”,
CALCULATE (
[Sales],
TREATAS ( VALUES ( ‘Table'[Values] ), DimDate[CalendarYear] )
),
“Category”,
CALCULATE (
[Sales],
TREATAS ( VALUES ( ‘Table'[Values] ), DimProductCategory[CategoryName] )
)
)
در نهایت نتیجه به صورت زیر خواهد بود. با انتخاب Year میزان فروش بر اساس سال نمایش داده می شود.
با انتخاب زیر گروه کالا میزان فروش بر اساس زیرگروه کالا نمایش داده می شود.
و با انتخاب سطح تحصیلات میزان فروش بر اساس سطح تحصیلات نمایش داده می شود.
نکته این جا است که اگر هیچ گزینه ای را در اسلایسر انتخاب نکنیم تمامی مقادیر و همه ابعاد نمایش داده می شود. برای رفع این مشکل می توان کد را به صورت زیر تغییر داد. با این کد می گوییم تنها اگر یک گزینه از اسلایسر انتخاب شود، مژر در راستای آن بعد نمایش داده شود و در غیر این صورت چیزی نمایش داده نشود.
درباره حسین وثوقی
دانش آموخته مهندسی صنایع و مدیریت فناوری اطلاعات دانشگاه تهران، علاقه مند به تحلیل و ارائه راه حل برای مسائل و بهینه سازی راه حل ها هستم ...
نوشته های بیشتر از حسین وثوقی
عالیییی
ارادت جناب سجادیان
[…] بعد انتخابی (Dynamic Axis) در… تنظیم مقدار پیش فرض برای Slicer در Power BI […]
[…] بعد انتخابی (Dynamic Axis) در… تنظیم مقدار پیش فرض برای Slicer در Power BIعنوان سفارشی برای ویژوال در Power BI […]
فوق العاده است و چقدر میتونه فضای استفاده صفحه داشبورد رو مدیریت کنه
عالی بود و مرسی از زحمات
ممنون از لطفتون جاب وفایی بزرگوار
خیلی مفید و کاربردی بود ممنون
ممنون از اینکه ما رو دنبال می کنید
ممنون میشم کد ها رو در قالب text بزارید چون عکس ها لوود نمیشن
سلام بله حتما
فوق العاده بود.