DAX 101: معرفی Rankx در DAX

ساخت وبلاگ

Rankx یک تابع ساده است که برای رتبه بندی یک مقدار در لیستی از مقادیر استفاده می شود. استفاده از آن ساده است ، اما می تواند منبع ناامیدی برای تازه واردان باشد. در این مقاله عملکرد Rankx را با چند مثال معرفی می کنیم.

26 سپتامبر 2022

رتبه بندی یکی از شایع ترین محاسبات در گزارش های BI است. نیاز به تعیین محصولات برتر ، کشورها ، مشتریان و مواردی از این دست بسیار رایج است. Rankx روشی قدرتمند و بسیار سریع برای تولید رتبه ارائه می دهد. با این وجود ، استفاده از آن درک می کند.

در این مقاله عملکرد Rankx را معرفی می کنیم و چند نمونه جالب از نحوه استفاده از آن را ارائه می دهیم. Rankx یک عملکرد پیچیده برای یادگیری نیست. با این وجود ، اکثر تازه واردان آن را مرعوب می کنند زیرا آنها داخلی آن را کاملاً درک نمی کنند. هنگامی که آنها دقیقاً یاد بگیرند که Rankx چگونه کار می کند ، استفاده از آن بسیار ساده می شود.

برای اهداف آموزشی ، ما یک رویکرد غیرمعمول را در نشان دادن استفاده از Rankx دنبال می کنیم: ابتدا نمونه ای با الگوی متداول. سپس بر اساس آن الگوی ، دلایل انتخاب توابع مورد استفاده را توضیح می دهیم. سرانجام ، ما دانش جدید شما را با ملاحظات بیشتر گسترش می دهیم.

ما می خواهیم رتبه بندی در اندازه گیری برند را که در شکل زیر به تصویر کشیده شده است ، ایجاد کنیم که رتبه بندی مارک های مختلف را بر اساس مبلغ فروش آنها محاسبه می کند.

الگوی استفاده به شرح زیر است:

اندازه در جدول فروش

رتبه بندی در برند: = if (isinscope ("محصول" [برند]) ، Rankx (Allselected ("محصول" [مارک]) ، [مبلغ فروش]))

در این فرمول سه جزئیات مهم وجود دارد:

  • استفاده از isinscope برای جلوگیری از نشان دادن ارزش در سطح بزرگ و اطمینان از محاسبه دقیق این رتبه بندی.
  • حضور Allselected به عنوان اولین استدلال Rankx ، برای بازیابی لیست مارک های قابل مشاهده در ماتریس.
  • عملکرد Rankx ، برای محاسبه رتبه بندی استفاده می شود.

درک دلیل هر یک از این جزئیات مهم است. ما با توصیف آنچه Rankx انجام می دهد ، شروع می کنیم و سپس توضیح می دهیم که چرا Isinscope و Allselected مرتبط هستند.

Rankx با پیروی از سه مرحله کار می کند:

  1. این جدول جستجوی را با تکرار بیش از اولین استدلال خود و ارزیابی استدلال دوم در زمینه ردیف ایجاد شده توسط تکرار ایجاد می کند. جدول جستجوی آن به ترتیب نزولی طبقه بندی می شود (به طور پیش فرض ، این قابل تغییر است).
  2. این آرگومان دوم را در خارج از تکرار ، در متن فیلتر که در آن فرمول محاسبه می شود محاسبه می کند.
  3. این مکان را جستجو می کند که در آن می توان نتیجه (2) را در جدول جستجوی محاسبه شده در طول (1) ، به دنبال ترتیب مرتب سازی شده در طول (1) قرار داد.

ممکن است برای خواننده تعجب آور باشد که چنین الگوریتم پیچیده ای را بخواند تا روند رتبه بندی را توصیف کند. اگر می خواهیم بهترین ها را از Rankx بدست آوریم ، الگوریتم را به خوبی درک کنیم. بگذارید الگوریتم موجود در ماتریس را که قبلاً به تصویر کشیده شده بود ، دنبال کنیم ، با تمرکز بر ارزش Contoso که در رتبه 2 قرار دارد.

کد اجرا شده قطعه زیر است که فقط روی Rankx متمرکز شده است:

Rankx (Allselected ("محصول" [برند]) ، [مبلغ فروش])

استدلال اول Rankx Allselected (محصول [برند]) است. Allselected یک جدول حاوی مقادیر ستون مارک قابل مشاهده در ماتریس را برمی گرداند ، بنابراین یک جدول با تمام مارک های ممکن تولید می کند ، که به Rankx بازگردانده می شود.

Rankx شروع به تکرار جدول با تمام مارک ها می کند و برای هر ردیف اندازه گیری مبلغ فروش را محاسبه می کند. در حین تکرار ، یک متن ردیف فعال وجود دارد و از آنجا که مبلغ فروش یک معیار است ، به طور خودکار با محاسبه احاطه می شود. محاسبه انتقال متن را انجام می دهد ، بنابراین زمینه ردیف را به یک زمینه فیلتر تبدیل می کند. بنابراین ، در طول تکرار ، Rankx مبلغ فروش را برای هر مارک محاسبه می کند. جدول حاصل به این شکل است:

در جدول که به دست آوردیم چند جزئیات جالب وجود دارد. اول ، جدول هدر ندارد. حاوی ستونی بدون نام است. به عبارت دیگر ، این فقط لیستی از مقادیر است. دوم ، جدول مرتب نشده است. تاکنون نظم مرتب سازی تعریف نشده است. Rankx مرتب سازی جدول را به عنوان آخرین قسمت از اولین قدم خود انجام می دهد. یکی از استدلال های Rankx تعریف می کند که آیا مرتب سازی صعود یا نزولی است ، و همانطور که بعداً خواهیم دید که نتیجه Rankx را تغییر می دهد. ما فعلاً از سفارش نزولی پیش فرض استفاده می کنیم.

اولین مرحله از Rankx به اتمام رسیده است ، جدول جستجوی آماده است. زمان اجرای مرحله دوم. Rankx استدلال دوم (مبلغ فروش) را در خارج از تکرار محاسبه می کند. بنابراین ، مبلغ فروش را در زمینه فیلتر سلول فعلی ، که در حال فیلتر کردن Contoso است ، اجرا می کند. بنابراین ، ارزش مبلغ فروش را برای Contoso محاسبه می کند: 2،227،244. 32.

مرحله سوم جستجوی موقعیت 2،227،244. 32 در جدول جستجوی قبلاً مرتب شده است. معلوم است که کاملاً در جایگاه دوم قرار دارد. از این رو ، نتیجه 2.

همانطور که قبلاً قول داده شد ، بگذارید اکنون دریابیم که چرا دو ماده دیگر مهم هستند. اول ، Allselected. اولین استدلال Rankx نیاز به تولید یک جدول دارد که شامل تمام ارزشهایی است که می خواهیم رتبه بندی کنیم. اگر فراموش نکنید که زمینه فیلتر را نادیده بگیرید و از مقادیر به جای Allselected استفاده کنید ، در پایان می توانید اندازه گیری اشتباه رتبه بندی (1) را تأیید کنید:

اندازه در جدول فروش

رتبه بندی اشتباه (1): = if (isinscope ('محصول' [برند]) ، Rankx (مقادیر ("محصول" [مارک]) ، [مبلغ فروش]))

نتیجه یک مقدار ناگوار و ثابت 1 است.

دلیل اصلی مقدار ثابت 1 این است که مقادیر ، برای هر سلول ، یک جدول را فقط با یک ردیف واحد برمی گرداند. بنابراین ، جدول جستجو فقط شامل یک ردیف با میزان فروش این برند در حال حاضر قابل مشاهده است. از این رو ، نتیجه همیشه 1 است.

ما می توانستیم به جای Allselected از همه استفاده کنیم. Allselected رفتار بهتری را در حضور برش هایی که باعث کاهش تعداد مارک های قابل مشاهده در ماتریس می شود ، تضمین می کند.

جنبه مهم دیگر محافظت از کد با Isinscope است. اگر ما از کد با Isinscope محافظت نمی کردیم ، می توانستیم مقدار کل را نیز محاسبه کنیم. در کل بزرگ ، جدول جستجوی هنوز به درستی محاسبه می شود ، به دلیل انتقال متن. با این حال ، ارزش مرحله (2) کل مبلغ فروش است که 12،337،640. 39 است. تعدادی که در مقایسه با سایر مقادیر شما که با آنها کار می کنید بسیار زیاد است ، همیشه در رتبه اول قرار خواهد گرفت ، زیرا مطمئناً از هر مقدار در جدول جستجوی بزرگتر است. در اینجا آنچه ماتریس به نظر می رسد در صورت عدم محافظت از کد با Isinscope است.

علاوه بر این ، در این مثال ما از Isinscope استفاده کردیم زیرا انتظار می رفت که عملکرد Rankx توسط برند از برند استفاده شود. شما همیشه باید از Rankx با حداقل HasoneValue محافظت کنید ، تا مطمئن شوید که مقدار محاسبه شده در (2) در واقع دارای دانه بندی مشابه مقادیر محاسبه شده در مرحله (1) است. اگر چنین اتفاقی بیفتد که مقدار محاسبه شده در (2) شامل چندین مارک باشد ، رتبه بندی اشتباه خواهد بود. محافظت از کد خود به گونه ای که اقدامات شما هرگز تعداد نادرست را محاسبه نمی کند ، بخش مهمی از مهارت های DAX شما است.

ما Rankx را با دو آرگومان نشان داده ایم ، که بیشترین استفاده از الگوی استفاده شده است. Rankx سه استدلال دیگر را می پذیرد:

  • آرگومان سوم یک عبارت اختیاری است که در مرحله (2) استفاده می شود. به طور پیش فرض ، Rankx از همان عبارت برای ساخت جدول جستجو و مقدار برای جستجوی استفاده می کند. در برخی از سناریوهای پیشرفته ، این دو عبارت ممکن است متفاوت باشد - برای مثال هنگام رتبه بندی مبلغ فروش در برابر جدول پیکربندی معین.
  • استدلال چهارم ترتیب مورد استفاده در انتهای مرحله (1) است: می تواند صعودی یا نزولی باشد. به طور پیش فرض ، سفارش در حال نزول است.
  • استدلال پنجم می تواند پرش (به طور پیش فرض) یا متراکم باشد. هنگامی که پرش است ، جدول جستجوی محاسبه و از آن استفاده می شود. هنگامی که متراکم مشخص شده است ، در پایان مرحله (1) DAX نسخه های کپی را از جدول جستجو خارج می کند. اثر خالص این است که وقتی جدول جستجوی حاوی نسخه های کپی است ، اینها فقط به عنوان یک مقدار شمارش می شوند.

بگذارید مثالی را ببینیم که استدلال سوم می تواند مفید باشد. تصور کنید که ما می خواهیم بخشی را که میزان فروش یک برند متعلق به آن است ، با استفاده از یک جدول تقسیم بندی مانند نمونه ای که در اینجا به نام بخش های فروش به تصویر کشیده شده است ، پیدا کنیم.

اگر می خواهیم از این جدول به عنوان جدول جستجوی استفاده کنیم ، باید از "بخش های فروش" [فروش] به عنوان استدلال دوم (که در طول ساختمان جدول جستجوی استفاده می شود) و مبلغ فروش برای محاسبه ارزش برای جستجوی:

اندازه در جدول فروش

بخش: = if (isinscope ("محصول" [برند]) ، Rankx ("بخش های فروش" ، "بخش های فروش" [فروش] ، [مبلغ فروش]))

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

برای قدردانی از استفاده از آخرین استدلال Rankx (متراکم یا پرش) ، باید برای دستیابی به نسخه های کپی در جدول جستجوی ، پیوندهایی را در رده بندی معرفی کنیم. ما می توانیم از یک معیار جدید ، فروش گرد استفاده کنیم که ارزش فروش آن را به 500000 نفر با استفاده از mround نشان می دهد:

اندازه در جدول فروش

فروش گرد: = mround ([مقدار فروش] ، 500000)

به دلیل گرد شدن ، جدول جستجوی اکنون شامل چندین نسخه کپی است و می توانید کنترل کنید که آیا آنها را در جدول جستجوی (پرش) نگه دارید یا در انتهای مرحله 1 (متراکم) آنها را حذف کنید. در اینجا دو اقدام برای آزمایش رفتار آورده شده است:

اندازه در جدول فروش

رتبه بندی متراکم: = if (isinscope ("محصول" [برند]) ، Rankx (Allselected ("محصول" [مارک]) ، [فروش گرد] ، ، ، متراکم))

اندازه در جدول فروش

Skip Skip: = if (isInscope ("محصول" [برند]) ، Rankx (Allselected ("محصول" [مارک]) ، [فروش گرد] ، ، ، پرش))

همانطور که می بینید ، نتایج در نحوه مقادیر Fabrikam و در زیر متفاوت است ، به دلیل تکثیر در جدول جستجوی.

Rankx یک عملکرد بسیار قدرتمند و سریع در DAX است. یادگیری نحوه کار داخلی ، تسلط لازم برای نوشتن DAX را با تمام اطمینان که مقادیر محاسبه شده صحیح است ، به شما ارائه می دهد. این نه تنها برای Rankx درست است. در واقع ، Rankx به مفاهیم انتقال متن ، تکرارها ، متن ردیف و زمینه فیلتر متکی است. اینها مباحث اساسی DAX است که در همه جا پیدا خواهید کرد ، و بنابراین باید یاد بگیرید و تسلط پیدا کنید تا به یک توسعه دهنده ماهر DAX تبدیل شوید.

اگر هنوز با این مفاهیم آشنا نیستید ، می توانید با خواندن سری مقالات و فیلم های DAX 101 ما شروع کنید ، یا مستقیماً به آموزش های جامع تری که در SQLBI ارائه می دهیم بروید تا به خانواده متخصصان DAX بپیوندید.

درجه

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

Rankx (، [،] [،] [،]) isinscope

هنگامی که ستون مشخص شده سطح در سلسله مراتب سطوح باشد ، درست برمی گردد.

isinscope () Allselected

اصلاح کننده را محاسبه کنید

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

انتقال متن

یک عبارت را در زمینه اصلاح شده توسط فیلترها ارزیابی می کند.

مقادیر ([، [، [، ...]]]]) را محاسبه کنید

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

اصلاح کننده را محاسبه کنید

تمام ردیف ها را در یک جدول یا تمام مقادیر موجود در یک ستون باز می گرداند ، و از فیلترهایی که ممکن است اعمال شده باشد ، غافل می شود.

هنگامی که فقط یک مقدار در ستون مشخص شده وجود دارد ، درست برمی گردد.

hasonevalue () mround

یک عدد گرد به چند مورد دلخواه باز می گردد.

مقالات در سری DAX 101

  • محاسبه کل در حال اجرا در DAX
  • شمارش روزهای کاری در DAX
  • خلاصه مقادیر برای کل
  • روزهای فیلتر سال به روز در DAX
  • ایجاد یک جدول تاریخ ساده در DAX
  • اطلاعات زمان اتوماتیک در Power BI
  • با استفاده از Concatenatex در اقدامات
  • سال قبل تا یک تاریخ خاص
  • مرتب سازی ماه ها در تقویم های مالی
  • با استفاده از UserElationship در DAX
  • به عنوان جدول تاریخ علامت گذاری کنید
  • متن ردیف در DAX
  • زمینه فیلتر در DAX
  • معرفی محاسبه در DAX
  • درک انتقال متن در DAX
  • با استفاده از نگهدارنده در DAX
  • متغیرهای DAX
  • با استفاده از مرتبط و مرتبط در DAX
  • معرفی Allselected در DAX
  • معرفی Rankx در DAX
گزینه های باینری...
ما را در سایت گزینه های باینری دنبال می کنید

برچسب : نویسنده : هایده حائری بازدید : <-PostHit-> تاريخ : پنجشنبه 16 شهريور 1402 ساعت: 16:47