تابع INDEX در Power BI
تابع INDEX در Power BI برای بازیابی یک ردیف خاص از یک جدول یا محور تصویری استفاده میشود، بر اساس موقعیت عددی آن در یک مجموعه مرتبشده. این تابع فقط در محاسبات تصویری (Visual Calculations) قابل استفاده است.
تعریف تابع INDEX
INDEX(<position>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>])
- position: عددی که موقعیت ردیف را مشخص میکند (مثلاً 1 برای اولین ردیف، -1 برای آخرین).
- سایر پارامترها اختیاری هستند و برای کنترل نحوه مرتبسازی، گروهبندی، و رفتار در برابر مقادیر خالی استفاده میشوند.
عملکرد چگونه است؟
تابع INDEX یک ردیف خاص را از یک مجموعه داده بر اساس موقعیت عددی آن بازمیگرداند. این موقعیت میتواند مثبت (از ابتدا) یا منفی (از انتها) باشد. این تابع در محاسبات تصویری مانند ماتریسها یا جدولهای تعاملی کاربرد دارد و در معیارها (Measures) یا ستونهای محاسبهشده قابل استفاده نیست.
✅ مثال ساده
فرض کنید در یک ماتریس تصویری، ستون Month دارید و میخواهید مقدار ماهی را که در موقعیت دوم قرار دارد نمایش دهید:
INDEX(2, Month)
این تابع مقدار دومین ماه را در محور Month بازمیگرداند، بسته به ترتیب مرتبسازی و فیلترهای اعمالشده.
کاربردهای رایج
- بازیابی ردیف خاص از یک مجموعه مرتبشده
- ساخت محاسبات پویا در ویژوالها مانند ماتریس یا جدول
- تحلیل مقایسهای بین ردیفهای خاص (مثلاً اول و آخر)
نکات مهم
- تابع
INDEXفقط در Visual Calculations قابل استفاده است. - اگر موقعیت خارج از محدوده باشد یا برابر صفر یا BLANK باشد، خروجی خالی خواهد بود.
- برای مرتبسازی دقیقتر، میتوان از پارامترهای
orderBy,partitionBy, وmatchByاستفاده کرد. - این تابع در معیارها یا ستونهای محاسبهشده پشتیبانی نمیشود.
تفاوت با توابع مشابه
| تابع | عملکرد | قابل استفاده در |
|---|---|---|
INDEX |
بازیابی ردیف خاص بر اساس موقعیت | فقط Visual Calculations |
RANKX |
رتبهبندی ردیفها بر اساس مقدار | Measures و Calculated Columns |
TOPN |
بازگرداندن چند ردیف برتر | Measures و Calculated Tables |
ملاحضات
هر ستون partitionBy و matchBy باید یک مقدار بیرونی متناظر داشته باشد تا به تعریف “پارتیشن فعلی” که روی آن عمل میکند، با رفتار زیر کمک کند:
- اگر دقیقاً یک ستون بیرونی متناظر وجود داشته باشد، از مقدار آن استفاده میشود.
- اگر هیچ ستون بیرونی متناظری وجود نداشته باشد:
-
- تابع INDEX ابتدا تمام ستونهای partitionBy و matchBy که ستون بیرونی متناظری ندارند را تعیین میکند.
- برای هر ترکیبی از مقادیر موجود برای این ستونها در زمینه والد INDEX، تابع INDEX ارزیابی شده و یک ردیف بازگردانده میشود.
- خروجی نهایی INDEX، اتحادی از این ردیفها است.
- اگر بیش از یک ستون بیرونی متناظر وجود داشته باشد، یک خطا بازگردانده میشود.
اگر matchBy وجود داشته باشد، INDEX سعی میکند از ستونهای matchBy و partitionBy برای شناسایی ردیف استفاده کند. اگر matchBy وجود نداشته باشد و ستونهای مشخص شده در orderBy و partitionBy نتوانند به طور منحصر به فرد هر ردیف را در رابطه شناسایی کنند:
- تابع INDEX سعی میکند کمترین تعداد ستون اضافی مورد نیاز برای شناسایی منحصر به فرد هر سطر را پیدا کند.
- اگر چنین ستونهایی پیدا شوند، تابع INDEX به طور خودکار این ستونهای جدید را به orderBy اضافه میکند و هر پارتیشن با استفاده از این مجموعه جدید از ستونهای OrderBy مرتب میشود.
- اگر چنین ستونهایی پیدا نشوند، خطایی برگردانده میشود.
INDEX
یک جدول خالی برگردانده میشود اگر:
- مقدار بیرونی متناظر یک ستون PartitionBy در رابطه وجود نداشته باشد.
- مقدار موقعیت به موقعیتی اشاره دارد که در داخل پارتیشن وجود ندارد.
اگر INDEX در یک ستون محاسبهشده که در همان جدول به عنوان رابطه تعریف شده است استفاده شود و orderBy حذف شود، یک خطا برگردانده میشود.
reset فقط در محاسبات بصری قابل استفاده است و نمیتوان آن را در ترکیب با orderBy یا partitionBy استفاده کرد. اگر reset وجود داشته باشد، میتوان axis را مشخص کرد اما relation را نمیتوان.
اگر مقدار reset مطلق باشد (یعنی یک عدد صحیح مثبت، HIGHESTPARENT یا یک مرجع فیلد) و محاسبه در سطح هدف یا بالاتر از آن در سلسله مراتب ارزیابی شود، محاسبه برای هر عنصر جداگانه بازنشانی میشود. یعنی تابع در یک پارتیشن که فقط شامل آن عنصر خاص است ارزیابی میشود.
مثال ۱ – ستون محاسباتی
کوئری DAX زیر:
EVALUATE INDEX(1, ALL(DimDate[CalendarYear]))
جدول زیر را برمیگرداند:
| DimDate[CalendarYear] |
|---|
| 2005 |
مثال ۲ – ستون محاسباتی
کوئری DAX زیر:
EVALUATE
SUMMARIZECOLUMNS (
FactInternetSales[ProductKey],
DimDate[MonthNumberOfYear],
FILTER (
VALUES(FactInternetSales[ProductKey]),
[ProductKey] < 222
),
"CurrentSales", SUM(FactInternetSales[SalesAmount]),
"LastMonthSales",
CALCULATE (
SUM(FactInternetSales[SalesAmount]),
INDEX(-1, ORDERBY(DimDate[MonthNumberOfYear]))
)
)
ORDER BY [ProductKey], [MonthNumberOfYear]
جدول زیر را برمیگرداند:
| FactInternetSales[ProductKey] | DimDate[MonthNumberOfYear] | [CurrentSales] | [LastMonthSales] |
|---|---|---|---|
| 214 | 1 | 5423.45 | 8047.7 |
| 214 | 2 | 4968.58 | 8047.7 |
| 214 | 3 | 5598.4 | 8047.7 |
| 214 | 4 | 5073.55 | 8047.7 |
| 214 | 5 | 5248.5 | 8047.7 |
| 214 | 6 | 7487.86 | 8047.7 |
| 214 | 7 | 7382.89 | 8047.7 |
| 214 | 8 | 6543.13 | 8047.7 |
| 214 | 9 | 6788.06 | 8047.7 |
| 214 | 10 | 6858.04 | 8047.7 |
| 214 | 11 | 8607.54 | 8047.7 |
| 214 | 12 | 8047.7 | 8047.7 |
| 217 | 1 | 5353.47 | 7767.78 |
| 217 | 2 | 4268.78 | 7767.78 |
| 217 | 3 | 5773.35 | 7767.78 |
| 217 | 4 | 5738.36 | 7767.78 |
| 217 | 5 | 6158.24 | 7767.78 |
| 217 | 6 | 6998 | 7767.78 |
| 217 | 7 | 5563.41 | 7767.78 |
| 217 | 8 | 5913.31 | 7767.78 |
| 217 | 9 | 5913.31 | 7767.78 |
| 217 | 10 | 6823.05 | 7767.78 |
| 217 | 11 | 6683.09 | 7767.78 |
| 217 | 12 | 7767.78 | 7767.78 |
مثال ۳ – محاسبه بصری
کوئریهای DAX محاسبه بصری زیر:
SalesComparedToBeginningOfYear = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, ROWS, HIGHESTPARENT))
SalesComparedToBeginningOfQuarter = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, , -1))
جدولی را طوری تنظیم کنید که برای هر ماه شامل موارد زیر باشد:
– کل مبلغ فروش؛
– اختلاف با ماه اول سال مربوطه؛
– و اختلاف با ماه اول فصل مربوطه.
تصویر زیر ماتریس بصری و اولین عبارت محاسبه بصری را نشان میدهد:
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download

