تحلیل حساسیت (What-if Analysis) و Parameter ها در محیط Power BI

بررسی تحلیل حساسیت (What-if Analysis) و Parameter ها در محیط Power BI

مقوله تحلیل حساسیت به بررسی تاثیر پذیری یک متغیر خروجی از تغییر یک متغیر ورودی میپردازد و این کار در محیط Power BI با استفاده از پارامترها صورت میگیرد و در حقیقت پارامترها به امکان تغییر مقدار متغیرهای ورودی را میدهند و ویژوال ها نیز میزان متغیرهای خروجی را نمایش میدهند. البته در نرم افزار Power BI دو مدل پارامتر داریم، یکی در محیط خود Power BI و دیگری در محیط Transform Data (Power Query) که ما در این مقاله مدل اول آن را مورد بررسی قرار میدهیم. خود پارامترهای Power BI نیز دو نوع هستند: Numeric range و .Fields پارامترها، همینطور، مانند Slicer ها ابزارهای مناسبی برای فیلتر کردن داده‌ها هستند.

دانلود فایل های همراه مقاله: (دیتابیس و فایل Pbix)

پارامتر از نوع Numeric range

چالش: فرض کنید هدف ما از ایجاد Parameter ها، بررسی تاثیر درصد تخفیف بر مقدار تعداد فروش هر کالا بر حسب Category های مختلف باشد. یعنی با تغییر درصد تخفیف مشخص شده توسط کاربر، ویژوال ها فقط تعداد کالاهایی با درصد تخفیف کوچکتر مساوی مقدار تخفیف مشخص شده توسط کاربر را نمایش دهند.

1- لود کردن دیتا

در این مقاله از جدول های Customers, Order Details، Products، Orders و Category دیتابیس Northwind استفاده میکنیم.

نیازی به Transform Data نیست و آنها را مستقیما Load میکنیم.

2- ایجاد ویژوال ها

ابتدا در صفحه ای دو ویژوال Stacked Column Chart برای نمایش میزان تعداد (Quantity) سفارشات بر حسب هر Category و Card برای نمایش میزان جمع تعداد اقلام (Quantity) سفارش داده شده، اضافه میکنیم تا نمایی از ویژوال ها را قبل از اعمال پارامترها ببینیم.

3- ایجاد Parameter

در تب Modeling بر روی گزینه New parameter و سپس روی گزینه Numeric range کلیک میکنیم.

حال بر حسب هدفی که در ابتدای مقاله ذکر شده بود، فیلد های مربوط به پارامتر را پر میکنیم.

در اینجا ما میخواهیم پارامتری را برای کنترل میزان تخفیف ها ایجاد کنیم. پس دیتا تایپ آن را روی Decimal number (عدد اعشاری)، مقدار Minimum را صفر، مقدار Maximum روی 0.50 (یعنی 50 درصد تخفیف) و همینطور مقدار افزایشی بازه (فاصله بین مقادیر) را 0.05 (5 درصد) قرار میدهیم.
بعد از کلیک بر روی Create اگر تیک Add slicer… زا زده باشید، اسلایسری برای شما برای تنظیم مقدار این پارامتر نشان داده میشود.

برای بهتر دیده شدن گزارش، اسلایسر را به بالای صفحه منتقل میکنیم.

همانطوری که میبینید، با افزایش یا کاهش مقدار اسلایسر، نمودار های ما تغییری نمیکنند و همچنان مقادیر اولیه را نشان میدهند. دلیل آن هم این است که هنوز پارامتر ایجاد شده (تخفیف)، مقدار Quantity را فیلتر نمیکند. برای حل این مشکل باید Measure جدیدی ایجاد کرد که این کار را انجام دهد. در قدم بعدی به این موضوع میپردازیم.

همچنین اگر دقت کنید بعد از ایجاد پارامتر، یک گروه داده‌ای جدیدی در بخش دیتا برای پارامتر ایجاد شده است.

حال اگر به قسمت Table View برویم، مشاهده میکنیم که یک جدول تک ستونی با مقادیر از 0 تا 0.50 با فواصل 0.05 درج شده است.

4- ایجاد Measure

برای اینکه مقدار Quantity توسط پارامتر فیلتر شود باید یک Measure جدید برای این کار ایجاد کرد.

در هنگام ایجاد مِژِر توجه داشته باشید که برای بهتر دیده شدن دیتاسِت، بر روی جدول Order Details، مژر را ایجاد کنید. (البته این مسئله مهمی نیست و صرفا از لحاظ بصری اهمیت دارد، زیرا مژر ها بدون توجه به جدول موجود در آن کار میکنند)

بر حسب چالشی که در ابتدای قسمت مطرح شد. در این قسمت باید کدی بنویسیم که ابتدا جدول Order Details را بر اساس درصد تخفیف مشخص شده توسط کاربر فیلتر کند، یعنی رکورد هایی که مقدار ستون Discount آنها بیشتر از درصد تخفیف مشخص شده باشد را حذف کند و سپس در جدول فیلتر شده مقادیر ستون Quantity جمع زده شود. برای این کار، کد زیر را درج میکنیم:

				
					Quantity By Discount = SUMX(FILTER('Order Details', 'Order Details'[Discount] <= 'Parameter For Discount'[Parameter For Discount Value]),'Order Details'[Quantity])
				
			

این قطعه کد جدول Order Details را با استفاده از تابع FILTER با شرط کوچکتر مساوی بودن مقدار تخفیف در هر سفارش (‘Order Details'[Discount]) با مقدار پارامتر (‘Parameter For Discount'[Parameter For Discount Value]) فیلتر میکند و سپس در جدول فیلتر شده، با تابع SUMX مجموع ستون تعداد فروش در هر سفارش (‘Order Details'[Quantity]) محاسبه میشود. اگر با زبان DAX آشنایی نداشته باشید، تصویر زیر میتواند راهنمایی برای شما باشد:

حال Measure ایجاد شده را در Field های نمودارها قرار میدهیم.

حال میبینیم که این پارامتر وظیفه خود را به خوبی انجام میدهد و با افزایش و کاهش آن، مقادیر ویژوال ها تغییر میکنند. این تغییرات در ویژوال Card بیشتر نمایان هستند.

5- تغییرات در Parameter

در صورتی که بخواهیم تغییراتی را در پارامتر اعمال کنیم باید در بخش Data بر روی پارامتر کلیک کرده و کد DAX آن را تغییر دهیم.

فرض کنید میخواهیم به جای افزایش 0.05 در هر بار، پارامتر ما به اندازه 0.01 افزایش پیدا کند (Increment Value). برای این کار صرفا باید آرگومان آخر تابع GENERATESERIES را به 0.01 تغییر دهیم.

حال مشاهده میکنیم که مقادیر با دقت 0.01 را میتوان به پارامتر نسبت داد.

حال اگر باز به بخش Table View برگردیم میبنیم که مقادیر با فاصله های 0.01 درج شده اند.

در حقیقت کار Slicer این است که از بین این مقادیر، مقداری را به دلخواه کاربر انتخاب کند. نکته قابل توجه این که اگر در هنگام ایجاد پارمتر فراموش کردید که گزینه ایجاد Slicer را فعال کنید، نیاز به نگرانی نیست و میتوانید بعدا در قسمت Visual یک اسلایسر اضافه کنید و از قسمت Data، پارامتر را در فیلد این اسلایسر اضافه کنید.

پارامتر از نوع Fields

چالش: فرض کنید میخواهیم همین صفحه گزارش را طوری تنظیم کنیم که در صورت نیاز مقادیر سفارش ها (Quantity) با بر حسب Category نمایش داده شوند یا برحسب Employee. این کار را میتوان با Bookmark ها نیز انجام داد ولی هدف ما در این مقاله انجام آن به طریق پارامترها است.

1- لود کردن دیتا

از همان جدول های قبلی دیتابیس Northwind استفاده میکنیم.

2- ایجاد پارامتر

همانند قسمت قبل در تب Modeling بر روی گزینه New parameter و سپس روی گزینه Fields کلیک میکنیم.

اگر گزینه Fields موجود نبود، باید آن را در تنظیمات Power BI فعال کنید.

حال بر حسب هدفی که در ابتدای این بخش ذکر شد، فیلد های مربوط به پارامتر را پر میکنیم.

باز همانند قسمت قبل یک اسلایسر برای تنظیم این پارامتر در صفحه اضافه میشود.

میتوان مانند بقیه اسلایسر ها با این اسلایسر برخورد کرد یعنی میتوان در قسمت Visual، استایل آن را به Tile تغییر داد یا اینکه رنگ پس‌زمینه آن را عوض کرد.

اگر به قسمت Data دقت کنید، متوجه میشوید که برخلاف حالت قبل، Measure جدیدی برای این پارامتر ایجاد نشد.

اکنون به قسمتTable View  مراجعه میکنیم و متوجه میشویم که همانند قسمت قبل جدول جدیدی برای این پارامتر ایجاد شده است.

ستون اول: نام نمایشی فیلد، ستون دوم: ستون مربوط به فیلد، ستون سوم: ترتیب فیلد ها در پارامتر

3- اضافه کردن پارامتر به فیلد Stacked Column Chart

در اتمام کار باید این پارامتر را در فیلد مربوط به نمودار Stacked Column Chart اضافه کرد.

حال میبینید که با تغییر اسلایسر مقادیر نمودار Stacked Column Chart نیز تغییر میکند.

4- Drill بعد از ایجاد پارامتر

در همین حین اتفاق جالبی نیز رخ میدهد. اگر در اسلایسر مربوط به Parameter For Cat & Emp هیچ گزینه‌ای را انتخاب نکنیم، گزینه Drill برای نمودار Stacked Column Chart فعال شده و میتوان از امکانات آن در نمودار استفاده کرد.

مثلا میتوانیم نمودار را در حالت سلسله مراتبی (Hierarchy) (دسته بندی بر اساس Category و Employee) نمایش دهیم.

5- تغییرات در پارامتر

فرض کنید هنگام ایجاد این پارامتر، یکی از فیلدها را فراموش کردیم که به لیست فیلد های پارامتر اضافه کنیم (در این مثال فرضا فیلد ProductName). برای حل این مشکل بر روی پارامتر کلیک میکنیم تا کد DAX آن را نشان دهد.

برای افزودن فیلد جدید دقیقا با همان قالبی که خود Power BI برای فیلدهای قبلی ایجاد کرده ابتدا نام آن، سپس تابع NAMEOF با آرگومان ستون مرتبط با فیلد و سپس ترتیب مورد نظر این فیلد در پارامتر را وارد کنید (لازم به ذکر است انتقال به خط بعدی در این محیط با Shift + Enter صورت میگیرد. Enter به تنهایی باعث اجرای کد میشود)

همانطور که مشاهده میکنید، فیلد جدید به پارامتر اضافه شده است.

مثالی واقعی‌تر!

چالش: فرض کنید شما در شرکت خیالی Northwind استخدام شده‌اید و مدیرعامل از شما میخواهد در یکی از صفحه‌ها گزارشی ایجاد کنید که مقدار فروش کالاها بر اساس بازه قیمتی را فیلتر کرده و در نموداری مقدار کل مبلغ سفارشات را به تفکیک شرکت تامین کننده یا شهر محل ارسال سفارش (به دلخواه مدیرعامل) تفکیک کند.

1- از دیتابیس Northwind جدول Suppliers را اضافه میکنیم.

2- ایجاد ستونی برای محاسبه مبلغ سفارش

در جدول Order Details ستون جدیدی را برای محاسبه مبلغ سفارش بعد از کسر تخفیف با نام Amount AD (AD: After Discount) ایجاد میکنیم.

کد زیر را درج میکنیم:

				
					Amount AD = 'Order Details'[Quantity] * ('Order Details'[UnitPrice] - 'Order Details'[UnitPrice] * 'Order Details'[Discount])
				
			

3- ایجاد پارامتر برای بازه قیمتی

مانند حالت های قبلی به قسمت ایجاد پارامتر مراجعه کرده و گزینه Numeric range را انتخاب میکنیم.

دیتاتایپ آن را بر روی Decimal number تغییر داده و مقدار مینیموم، ماکسیمم و فاصله بین اعداد بازه را موقتا به ترتیب بر روی 1، 200 و 1 قرار میدهیم (این مقادیر را بعدا تغییر خواهیم داد). مانند بقیه پارامترها، جدولی نیز در بخش دیتا برای این پارامتر ایجاد میشود. البته در این مثال ما نیازی به Measure مربوط به این پارامتر نداریم و میتوانیم آن را حذف کنیم (ولی در این مثال ما این کار را انجام نمیدهیم). در قسمت Visual مربوط به اسلایسر پارامتر، Style آن را به حالت Between تغییر میدهیم.

برای اینکه بهتر با نحوه کار این اسلایسر و پارامتر آشنا شویم، موقتا یک Table برای این پارامتر ایجاد میکنیم تا مقادیر انتخاب شده توسط اسلایسر را نمایش داده و درک مراحل بعدی کار آسانتر شود.

4- ایجاد Measure

برای اینکه مقدار ستون Amount AD توسط این پارامتر فیلتر شود باید یک مژر جدید ایجاد کنیم. کد زیر را برای این Measure وارد میکنیم:

				
					Amount AD By UnitPrice = SUMX(FILTER('Order Details','Order Details'[UnitPrice] <= MAX('Parameter For UnitPrice'[Parameter For UnitPrice]) && 'Order Details'[UnitPrice] >= MIN('Parameter For UnitPrice'[Parameter For UnitPrice])), 'Order Details'[Amount AD])
				
			

این کد ابتدا جدول Order Details را بر اساس اینکه مقدار ستون UnitPrice این جدول کوچکتر مساوی ماکسیمم مقدار انتخاب شده پارامتر (توسط اسلایسر) و بزرگتر مساوی مینیمم مقدار انتخاب شده توسط پارامتر باشد، فیلتر میکند. سپس در جدول فیلتر شده با استفاده از تابع SUMX مقادیر ستون Amount AD سطر به سطر جمع زده میشوند. به عبارت دیگر همه کار این اسکریپت این است که مبالغ هر سفارش را در صورتی که UnitPrice این سفارش در بازه انتخاب شده توسط اسلایسر پارامتر باشد را جمع میزند.

5- داینامیک کردن بازه پارامتر

با نگاهی به جدول Order Details متوجه میشویم که قیمت برخی کالاها از 200 دلاری که ما برای ماکسیمم پارامتر تعریف کردیم بیشتر است و خوب مسلما این کالاها هرگز در محاسبات ما لحاظ نمیشوند. خوب پس ما باید پارامتر را به گونه ای تنظیم کنیم که ماکسیمم مقدار آن همان ماکسیمم مقدار ستون UnitPrice و مینیمم مقدار آن نیز برابر مینیمم مقدار ستون UnitPrice باشد. برای این کار باید کد DAX مرتبط با پارامتر را ویرایش کنیم.

کد DAX موجود را به کد زیر تغییر میدهیم:

				
					Parameter For UnitPrice = GENERATESERIES(MAX('Order Details'[UnitPrice]), MIN('Order Details'[UnitPrice]), (MAX('Order Details'[UnitPrice])-MIN('Order Details'[UnitPrice]))/50)
				
			

با این کد همینطور فواصل بین اعداد بازه پارامتر به 50/1 فاصله بین بیشترین و کمترین ستون UnitPrice تنظیم میشود.

6- ایجاد پارامتر Fields

برای آنکه گزارش هم به تفکیک شرکت تامین کننده محصول (CompanyName در جدول Suppliers) و هم کشور محل ارسال (ShipCountry در جدول Orders) نمایش داده شود باید پارامتری از نوع Fields ایجاد کرده و فیلد های ShipCountry و CompanyName را به آن اضافه میکنیم.

7- ارزش افزوده!

فرض کنید میخواهیم کاربر این گزارش وقتی گزینه ShipCountry را انتخاب کرد در اسلایسر دیگری لیست همه کشورها را نیز نشان دهد یا بالعکس وقتی CompanyName را انتخاب کرد، لیست همه شرکت ها را نمایش دهد و بتواند با انتخاب هر یک آنها نیز گزارش را فیلتر کند. راه حل این کار بسیار راحت است. از اسلایسر پارامتری که ایجاد کردیم یک کپی ایجاد میکنیم.

در فیلدی که برای این اسلایسر انتخاب شده است، بر روی گزینه Show Selected Field کلیک میکنیم.

حال با انتخاب ShipCountry یا CompanyName اعضای موجود در آنها در اسلایسر پایینی نیز نمایش داده میشود

فقط در نظر داشته باشید که اگر در اسلایسر اولیه هر دو گزینه ShipCountry و CompanyName یا هیچکدام از آنها انتخاب نشده باشد اسلایسر پایین با خطا مواجه خواهد شد پس بهتر است اسلایسر بالایی را به نوع Single Select تغییر دهیم.

این مرحله یک ارزش افزوده برای گزارش شما خواهد بود زیرا مدیرعامل این قابلیت را از شما درخواست نکرده بود!

8- مرحله آخر

در نهایت کافی است Stacked Column Chart را از ویژوال اضافه کرده و گزارش را مرتب کنیم!

حال فرض کنید مدیرعامل میخواهد بداند محصولات گران قیمت شرکت بیشتر توسط کدام شرکت ها تامین میشود:

یا محصولات با رده قیمت متوسط در کدام کشور ها بیشتر به فروش میرسند:

و یا اینکه در کل بازه قیمتی و در کشور های آمریکای جنوبی (آرژانتین، برزیل و ونزوئلا) وضعیت فروش به چه صورت است:

امیدوارم به واسطه این مقاله به خوبی با موضوع پارامتر ها در محیط Power BI آشنا شده باشید.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا