یکی از اولین سؤالاتی که من از علاقمندان به حوزه هوش تجاری و به طور خاص کار با ابزار پاور بی آی می پرسم اینست که چه فرقی بین توابع SUM و SUMX وجود دارد. پاسخ درست به این سؤال محک خوبی برای سنجش میزان دانش واقعی این افراد است. هنوز سردرگمی زیادی در مورد تفاوت بین SUM و SUMX در Power BI وجود دارد.
هر دو عملکرد را می توان در سناریوهای مختلف استفاده کرد، اما مواردی وجود دارد که یکی از آنها کارآمدتر از دیگری است. من در اینجا با یک مثال ساده، تمایز بین این دو را نشان می دهم. می توانید فیلم کامل این آموزش را در انتهای این مقاله مشاهده کنید.
در DAX دو نوع محاسبه انجام می شود. توابعی مانند SUM، COUNT، AVERAGE و MIN مقادیر را تجمیع (Aggregate) می کنند و در قالب یک عدد نمایش می دهند. از طرف دیگر، توابع تکرار شونده که غالباً در انتهای آنها X وجود دارد نظیر SUMX، به ازای هر ردیف (Iteration) از ستون جدول مورد نظر، محاسبات را انجام می دهند. پس به زبان ساده توابع تجمیع کننده مقادیر یک ستون را در یک عدد خلاصه می کنند و توابع تکرار شونده ابتدا به ازای تک تک ردیف ها محاسبه انجام می دهند و سپس خروجی مورد نظر را برمی گردانند. با یک مثال ساده این تفاوت بیان می شود.
در جدول زیر میزان فروش، میزان هزینه و سود حاصل از هر فروش که از تفاضل فروش و هزینه به دست می آید نشان داده شده است. ستون سود در ابتدا وجود نداشت و یک ستون محاسباتی یا به عبارت دیگر یک Calculated Column است که از تفاضل فروش و هزینه حاصل شده است. فراموش نکنید که ستون محاسباتی به طور ذاتی یک Iterator است و محاسبات را ردیفی انجام می دهد. این موضوع در مقالات قبلی با عنوان های زمینه فیلتر، زمینه ردیف و مقایسه Measure و Calculated Column به تفصیل مورد بحث قرار گرفته است.
با استفاده از تابع SUM شما می توانید میزان سود را محاسبه کنید.
Profit Margin = Sales[Sales Amount] - Sales[Total Cost TotProfit = SUM(Sales[Profit Margin])
سؤال اینجاست که آیا هربار باید با اضافه کردن یک ستون و با کمک تابع SUM محاسبات اینچنینی را انجام دهیم؟ اگر دیتاست ما 20 ستون داشته باشد و محاسبات ما قرار باشد 20 ستون دیگر به این دیتاست اضافه کند تکلیف چیست؟ اضافه شدن ستون با توجه به اینکه محاسبات را برای میلیون ها ردیف انجام می دهد، چه اثری روی Performance دارد و چه طور باید آن را مدیریت کرد؟
شما با استفاده از توابع تکرارشونده یا همان Iterator ها می توانید با ساخت یک Measure و بدون اضافه کردن ستون، همان محاسبات را انجام دهید. در واقع به نوعی می توان گفت که یک ستون مجازی به دیتاست خود اضافه می کنید و محاسبات را بر روی آن ستون مجازی انجام می دهید. تابع SUMX آرگومان جدول را دریافت می کند و محاسبات شما را برای تک تک ردیف های جدول انجام می دهد و در نهایت مجموع را به شما برمی گرداند.
TotProfitX = SUMX( Sales, Sales[Sales Amount]-Sales[Total Cost] )
تصور کنید که آرگومان جدول برای انجام محاسبات در توابعی نظیر SUMX، فیلتر شده باشد تا بتوانید محاسبات خاص را انجام دهید. چنین قابلیتی باعث شده تا زبان DAX برای انجام محاسبات در پاور بی آی عملکرد بی نظیر از خود نشان دهد! در آینده بیشتر از این قابلیت ها صحبت خواهیم کرد.
دو تابع SUM و SUMX محاسبه جمع را انجام می دهند. SUMX حاصل عملیات بر روی یک جدول است که این جدول می تواند پویا باشد و الزاماً جداول موجود در دیتاست شما نیستند. توابع تکرار شونده، یک عملکرد عمومی و قدرتمند هستند و معمولاً تازه کارها به دلیل عدم آشنایی با این مفهوم، چندان به آن نمی پردازند. نقطه شروع ایجاد تمایز بین شما و کارآموزهای هوش تجاری که به ساخت داشبورد می پردازند، از اینجاست.
منبع: Businesstomy