نحوه استفاده از RANKX در DAX، که Power BI

RANKX در DAX، که برای Power BI استفاده می‌شود، یک تابع رتبه‌بندی است که برای مرتب سازی و رتبه‌بندی داده‌ها بر اساس معیار خاصی به کار می‌رود. این تابع به شما این امکان را می‌دهد که هر عنصر در یک جدول یا یک گروه از داده‌ها را بر اساس ارزشی که دارد، رتبه‌بندی کنید.

در مثالی که قبلاً ارائه دادم، RANKX برای ایجاد یک شماره ترتیبی برای هر ورودی/خروجی (enter/exit) هر کارمند در هر روز استفاده شد. این امر به شما امکان می‌دهد که ترتیب ورود و خروج هر کارمند را بر اساس زمان وقوع آن‌ها (مشخص شده توسط time_asli) شناسایی کنید.

نحوه عملکرد RANKX
مجموعه داده‌ها: RANKX نیاز به تعیین یک مجموعه داده دارد که می‌خواهید در آن رتبه‌بندی انجام دهید. این می‌تواند کل جدول یا یک زیرمجموعه از داده‌ها باشد.

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

ترتیب: می‌توانید ترتیب صعودی یا نزولی را برای رتبه‌بندی انتخاب کنید.

مدل رتبه‌بندی: RANKX امکان انتخاب بین رتبه‌بندی پیوسته (Dense) یا معمولی را می‌دهد. در حالت Dense, رتبه‌ها بدون وقفه و به صورت متوالی اختصاص می‌یابند، حتی اگر چندین عنصر همان ارزش را داشته باشند.

مثال در متن شما
در مورد داده‌های شما، RANKX برای اختصاص دادن یک شماره ترتیبی به هر ورود یا خروج بر اساس زمان (time_asli) استفاده می‌شود. این امکان را می‌دهد که بتوانید ورودی‌ها و خروجی‌های متوالی یک کارمند در یک روز خاص را شناسایی کنید.

 

SequenceNumber = 
RANKX(
    FILTER(
        YourTable, 
        YourTable[EmployeeCode] = EARLIER(YourTable[EmployeeCode]) 
        && YourTable[date_asli] = EARLIER(YourTable[date_asli])
        && YourTable[FinalRecordIOType] = EARLIER(YourTable[FinalRecordIOType])
    ), 
    YourTable[time_asli], 
    , 
    ASC, 
    Dense
)
Enter_1 = IF(YourTable[FinalRecordIOType] = 1 && YourTable[SequenceNumber] = 1, YourTable[time_asli], BLANK())
Enter_2 = IF(YourTable[FinalRecordIOType] = 1 && YourTable[SequenceNumber] = 2, YourTable[time_asli], BLANK())
Exit_1 = IF(YourTable[FinalRecordIOType] = 2 && YourTable[SequenceNumber] = 1, YourTable[time_asli], BLANK())
Exit_2 = IF(YourTable[FinalRecordIOType] = 2 && YourTable[SequenceNumber] = 2, YourTable[time_asli], BLANK())