تابع ROWNUMBER در Power BI
تابع ROWNUMBER در Power BI یکی از توابع جدید زبان DAX است که فقط در محاسبات تصویری (Visual Calculations) قابل استفاده است. این تابع برای شمارهگذاری ردیفها در یک محور تصویری استفاده میشود و عملکردی مشابه تابع ROW_NUMBER() در SQL دارد.
تعریف تابع ROWNUMBER
ROWNUMBER ( [<relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
پارامترها:
- axis یا relation (اختیاری): محور تصویری یا جدول مرجع که ردیفها از آن گرفته میشوند.
- orderBy (اختیاری): نحوه مرتبسازی ردیفها (مثلاً بر اساس تاریخ یا مقدار فروش).
- partitionBy (اختیاری): گروهبندی دادهها برای شروع شمارش از ۱ در هر گروه.
- matchBy (اختیاری): تعیین ردیف فعلی برای مقایسه.
- reset (اختیاری): بازنشانی شمارش در شرایط خاص.
عملکرد چگونه است؟
تابع ROWNUMBER به هر ردیف در محور تصویری یک عدد اختصاص میدهد که موقعیت آن را در ترتیب مشخصشده نشان میدهد. اگر از PARTITIONBY استفاده شود، شمارهگذاری در هر گروه از نو شروع میشود.
✅ مثال 1: شمارهگذاری ردیفها بر اساس تاریخ
ROWNUMBER(
ORDERBY(Sales[Date])
)
در این مثال، ردیفها بر اساس تاریخ بهصورت صعودی شمارهگذاری میشوند.
✅ مثال 2: ستون محاسبه شده
کوئری DAX زیر:
EVALUATE
ADDCOLUMNS(
'DimGeography',
"UniqueRank",
ROWNUMBER(
'DimGeography',
ORDERBY(
'DimGeography'[StateProvinceName], desc,
'DimGeography'[City], asc),
PARTITIONBY(
'DimGeography'[EnglishCountryRegionName])))
ORDER BY [EnglishCountryRegionName] asc, [StateProvinceName] desc, [City] asc
جدولی را برمیگرداند که به طور منحصر به فرد هر منطقه جغرافیایی را با نام انگلیسی CountryRegionName یکسان، بر اساس StateProvinceName و City آنها رتبهبندی میکند.
✅ مثال 3: محاسبه بصری
کوئریهای DAX محاسبه بصری زیر:
SalesRankWithinYear = ROWNUMBER(ORDERBY([SalesAmount], DESC), PARTITIONBY([CalendarYear]))
SalesRankAllHistory = ROWNUMBER(ORDERBY([SalesAmount], DESC))
دو ستون ایجاد کنید که هر ماه را به طور منحصر به فرد بر اساس کل فروش، چه در هر سال و چه در کل تاریخچه، رتبهبندی کنند.
تصویر زیر ماتریس بصری و اولین عبارت محاسبه بصری را نشان میدهد.
✅ مثال پیشرفته: شمارهگذاری در هر منطقه
ROWNUMBER(
ORDERBY(Sales[Amount], DESC),
PARTITIONBY(Sales[Region])
)
در این مثال، ردیفها در هر منطقه بهصورت جداگانه و بر اساس فروش نزولی شمارهگذاری میشوند.
کاربردهای رایج
- نمایش شماره ردیف در جدول یا ماتریس تصویری
- ساخت رتبهبندی ساده بدون نیاز به
RANK - تحلیل موقعیت نسبی ردیفها در گروههای مختلف
- ساخت KPIهای تصویری با موقعیت ردیف
⚠️ نکات مهم
- فقط در Visual Calculations قابل استفاده است.
- اگر ترتیب مشخص نشود، Power BI از ترتیب پیشفرض استفاده میکند.
- استفاده از
ORDERBYوPARTITIONBYبرای کنترل دقیقتر توصیه میشود. - این تابع در معیارها (Measures) یا ستونهای محاسبهشده پشتیبانی نمیشود.
ملاحضات
هر ستون orderBy، partitionBy و matchBy باید یک مقدار بیرونی متناظر داشته باشد تا به تعریف ردیف فعلی که قرار است روی آن عمل کند، با رفتار زیر کمک کند:
- اگر دقیقاً یک ستون بیرونی متناظر وجود داشته باشد، از مقدار آن استفاده میشود.
- اگر هیچ ستون بیرونی متناظری وجود نداشته باشد، آنگاه:
- ROWNUMBER ابتدا تمام ستونهای orderBy، partitionBy و matchBy را که هیچ ستون بیرونی متناظری ندارند، تعیین میکند.
- برای هر ترکیبی از مقادیر موجود برای این ستونها در زمینه والد ROWNUMBER، ROWNUMBER ارزیابی شده و یک ردیف بازگردانده میشود.
- خروجی نهایی ROWNUMBER ترکیبی از این ردیفها است.
- اگر بیش از یک ستون بیرونی متناظر وجود داشته باشد، یک خطا بازگردانده میشود.
اگر matchBy وجود داشته باشد، ROWNUMBER سعی میکند از ستونهای matchBy و partitionBy برای شناسایی ردیف فعلی استفاده کند. اگر ستونهای مشخص شده در orderBy و partitionBy نتوانند به طور منحصر به فرد هر ردیف مرتبط را شناسایی کنند، آنگاه:
- تابع ROWNUMBER سعی میکند کمترین تعداد ستونهای اضافی مورد نیاز برای شناسایی منحصر به فرد هر سطر را پیدا کند.
- اگر چنین ستونهایی یافت شوند، تابع ROWNUMBER
- سعی میکند کمترین تعداد ستونهای اضافی مورد نیاز برای شناسایی منحصر به فرد هر سطر را پیدا کند.
- این ستونهای جدید را به طور خودکار به عبارت orderBy اضافه میکند.
- هر پارتیشن را با استفاده از این مجموعه جدید از ستونهای orderBy مرتب میکند.
- اگر چنین ستونهایی یافت نشوند و تابع در زمان اجرا یک تساوی را تشخیص دهد، یک خطا برمیگرداند.
reset فقط در محاسبات بصری قابل استفاده است و نمیتوان آن را در ترکیب با orderBy یا partitionBy استفاده کرد. اگر reset وجود داشته باشد، میتوان axis را مشخص کرد اما relation را نمیتوان.
اگر مقدار reset مطلق باشد (یعنی یک عدد صحیح مثبت، HIGHESTPARENT یا یک مرجع فیلد) و محاسبه در سطح هدف یا بالاتر از آن در سلسله مراتب ارزیابی شود، محاسبه برای هر عنصر جداگانه بازنشانی میشود. یعنی تابع در یک پارتیشن که فقط شامل آن عنصر خاص است، ارزیابی میشود.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download

