summarization و aggregation با استفاده از توابع DAX

تجمیع و خلاصه کردن داده ها یا به عبارت دیگه aggregation و  summarization از جمله کارهای پر تکرار کار با دادست که ابزارها و روش های و کدهای مختلفی وجود داره. در مجموعه توابع DAX به طور اختصاصی به غیر از امکان aggregation در ویزوال ها امکان اضافه کردن جداول در قابل جداول تجمیعی یا ستون ها وجود داره که برای محاسبات چند سطحی بسیار پر کاربرد هستن. در این پست به چند مورد در قالب مثال های آموزشی اشاره می کنم.

در مجموع مهم ترین این توابع عبارتند از summarize، summarizecolumns و groupby که در ادامه توضیح مختصری داده میشه. داده های مثال عبارتند از :

Price Quantity ProductGroup
1000 10 Group-A
1000 20 Group-A
1000 30 Group-A
1000 40 Group-A
1000 50 Group-B
2000 60 Group-B
2000 70 Group-B
2000 80 Group-C
2000 90 Group-C
2000 100 Group-C

نام جدول فوق رو data گذاشته ام. همه کدهای مثال های زیر در یک new table استفاده می شود. چون خروجی توابع زیر جدول خواهند بود البته می تونید در متغیر ها هم استفاده کنید.

شکل کلی تابع به این صورته :

که به ترتیب نام جدول و ستونی اولی که قراره براساس اون گروه بندی بشه و ستون های بعدی برای گروه بندی آورده میشه (جدول و ستون اول اجباریه و مابقی اختیاری). بعد از نام ستون ها، نام ستون یا ستون هایی که قراره خروجی aggregation رو در اون داشته باشیم در داخل “” قرار می دهیم و در آخر پس از نام تابع aggregation مثله sum یا max رو قرار می دهیم. این روند تقریبا در همه این سه تابع مشابه است با کمی تفاوت.

به طور مثال مجموع و میانگین گروه های جدول مثال بالا را به این صورت محاسبه می کنیم :

خروجی :

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

خروجی :

البته هم میشه جدول ورودی به تابع رو فیلتر کرد هم این که فیلتر رو در هنگام محاسبات جدول اعمال کرد با استفاده از تابع CALCULATETABLE به این صورت خواهد شد :

خروجی هم که دقیقا خروجی بالا خواهد شد.

 

تابع بعدی SUMMARIZECOLUMNS، که میشه گفت ورژن جدیدتر و البته پرسرعت تر تابع SUMMARIZE و البته تابع GROUPBY هستش. چند تفاوت بین این تابع با SUMMARIZE وجود داره تابع SUMMARIZECOLUMNS جدولی به عنوان ورودی دریافت نمیکنه و ستون های مورد نظر برای گروه بندی رو از جداول مختلف میتونه دریافت کنه و لزومی به ورود جدولی برای این کار نیست همچنین همونطور که در شکل کلی تابع می بینید تابع امکان دریافت پارامتری به عنوان جدول فیلتر رو داره. شکل کلی تابع :

اما اگه بخواهیم دو مثال بالا رو با این تابع حل کنیم کدها عبارت خواهند بود از :
و
 

ولی در آخر تابع GROUPBY که ساختار کلیش کمی متفاوته. در کل میشه گفت فرق اساسی این تابع با دو تابع قبل انجام چند لایه aggregation هستش که این امکان رو میده که در یک مجموعه کد تو در تو یا nested محاسبات تجمیعی صورت بگیره. همچنین در این تابع از توابع xFunctions یا iterators مثل SUMX استفاده میشه که فرقشون با توابع معمولی مثه SUM ، امکان سطر به سطر محاسبه کردن و لوپ زدن بین رکورد هاست. به طور مثال با SUMX ابتدا میشه ستون قیمت و تعداد رو نظیر به نظیر ضرب و سپس حاصل ضرب مقادیر رو جمع کنید. توجه کنید این با جمع یک ستون و ضرب در جمع ستون دیگه متفاوته! پس این دو رو میشه از مهم ترین مزیت های این تابع به حساب اورد و البته که محاسبات پیچیده تر و زمان بیشتری میبره برای ارایه خروچی! شکل کلی تابع به این صورته :

 

مثال اول رو اگه بخواهیم با این تابع حل کنیم به این صورت خواهد شد (به عبارت CURRENTGROUP دقت کنید که اشاره به گروه بندی خود تابع GROUPBY داره)

در پست های بعد در مورد این تابع بیشتر مثال خواهم زد.

۱ دیدگاه. ترک جدید

درود بر شما ؛ مطلب مفیدی بود . سپاس.

پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست