مقایسه Sumx ،Sum و Calculate(Sum) از تاثیر Slicerها

Thursday، ۲۰ Amordaad ۱۴۰۱

در این پست قصد داریم تا در قالب یک مثال مقایسه اثرات Slicerها بر روی توابع Sum، Sumx، Calculate(sum) رو بررسی کنیم:

برای این موضوع از یک Dataset برای پیاده‌‌سازی این توابع استفاده خواهیم کرد. این دیتاست شامل 5 ستون سال، دسته‌بندی محصول، محصول، فصل و مقدار فروش است. این Dataset را در Power BI Desktop لود کرده و نام جدول رو به Sales Target تغییر می‌دهیم. شما می‌توانید برای تمارین این پُست، این Dataset رو به همراه فایل pbix از اینجا دانلود نمایید.

مساله:

می‌خواهیم جمع تعداد لپتاپ‌هایی که در سه ماه اول سال (فصل‌ اول) فروخته شده را با استفاده از ایجاد Measureها با سه تابع ذکر شده محاسبه نماییم. پس در واقع فیلتری که می‌بایست انجام بشه روی ستون Product برای مقدار Laptop و Quarter برای مقدار Quarter 1 هست. با یک محاسبات ساده هم متوجه می‌شیم که نتیجه این کوئری عدد 665 خواهد بود.

روش اول (استفاده از تابع Sum):

یک Measure تحت عنوان Use Sum ایجاد می‌کنیم

Use Sum = sum(Sales target[Sales Quantity])

و مقدار Measure را در یک Card ایجاد می‌نماییم؛ اما از آنجایی که این تابع روی کل ستون Sales Quantity محاسبه می‌نماید، مقدار 4000 را نشان می‌دهد. لذا برای رسیدن به عدد مورد نظر از فیلترینگ یا Slicerهای جداگانه استفاده کرد.

برای ایجاد فیلترینگ در صفحه گزارش Slicerهایی برای Quarter و Product ایجاد می‌کنیم و فیلترینگ را انجام می‌دهیم و با انتخاب گزینه های Laptop و Quarter 1 به پاسخ می‌رسیم:

روش دوم (استفاده از تابع Sumx):

یک Measure دیگر تحت عنوان Sumx ایجاد می‌کنیم:

Use Sumx = sumx(FILTER(Sales target,[Prodcut]="Laptop" && [Quarter]="Quarter 1"),Sales target[Sales Quantity])

مقدار Measure را در یک Card به نام ایجاد می‌نماییم مقدار محاسبه شده صحیح است.

نکته: در صورتی که این Card با Slicerهای موجود در صفحه Interction داشته باشد با انتخاب گزینه‌های مختلف Slicer، محاسبات این Measure تغییر می‌کند. به عنوان مثال اگر در Slicer گزینه Laptop را انتخاب نکنیم، مقدار Measure Sumx محسابه‌ای را نشان نخواهد داد.

روش سوم (استفاده از تابع Calculate(sum)):

یک Measure تحت عنوان Calculate(Sum) ایجاد می‌کنیم:

Use Calculate Sum = CALCULATE(sum(Sales target[Sales Quantity]),Sales target[Quarter] ="Quarter 1" && Sales target[Prodcut]="Laptop")

مقدار Measure را در یک Card ایجاد می‌نماییم و همانطور که مشاهده می‌نماییم مقدار محسابه شده صحیح است.

نکته مهم: حال اگر مجددا گزینه‌های مختلف Slicer را انتخاب کنیم (برای مثال کالای Mobile) مشاهده خواهیم کرد که مقدار نشان داده شده در روش‌های اول و دوم تغییر می‌کنند اما مقدار روش سوم با تغییر گزینه‌های انتخابی Slicer تغییر نمی‌کند. در واقع این یکی از ویژگی‌های اصلی تابع Calculte است که فیلترهایی که درون تابع Calculte اعمال می‌شوند نسبت به فیلترها و Slicerهای روی صفحه داشبورد برتری دارد.

در واقع در سناریوهای فوق آموختیم که:

  • در صورت استفاده از تابع Sum حتما نیاز به استفاده از فیلتر یا Slicer جداگانه است و بدون استفاده از آنها به پاسخ نخواهیم رسید.
  • در صورت استفاده از تابع Sumx بدون نیاز به Slicerها به پاسخ خواهیم رسید اما باید هوشیار باشیم که Slicerها روی محاسبات بی‌تاثیر نیست.
  • در صورت استفاده از فرمول Calculate(Sum) به پاسخ خواهیم رسید و Slicerهای موجود در صفحه گزارش، هیچ تاثیری روی این روش محاسبه نخواهند داشت.

حال با توجه به روش های فوق از کدام روش برای محاسبات مشابه در گزارش های خود استفاده کنیم؟ پاسخ این سوال خیلی ساده است. در واقع هیچ‌کدام از این روش‌ها نسبت به دیگری برتری ندارند و شما صرفا می‌بایست با توجه به شرایط و محدودیت‌های گزارش و کاربران تصمیم‌گیری نمایید که از کدام تابع استفاده کنید.