فروش لایسنس Power BI

با ما داده های خود را درک کنید تا برای آینده کسب و کارتان بهتر تصمیم گیری کنید.

تابع EARLIER در DAX

تابع EARLIER در DAX

تابع EARLIER در Power BI

تابع EARLIER در زبان DAX یکی از توابع خاص و قدرتمند در Power BI است که برای ارجاع به مقدار قبلی یک ستون در سطح ردیف قبلی از محاسبه استفاده می‌شود. این تابع معمولاً در ستون‌های محاسبه‌شده (Calculated Columns) کاربرد دارد و به شما اجازه می‌دهد تا در محاسباتی که شامل چند سطح زمینه (Row Context) هستند، به مقدار قبلی بازگردید.

سینتکس تابع EARLIER

DAX
EARLIER(<column>, <level>)
  • column: ستونی که می‌خواهید مقدار قبلی آن را بازیابی کنید.
  • level (اختیاری): سطح زمینه‌ای که می‌خواهید به آن ارجاع دهید (پیش‌فرض 1).

 عملکرد چگونه است؟

تابع EARLIER زمانی مفید است که در یک محاسبه، دو زمینه ردیفی (Row Context) هم‌زمان فعال باشند — مثلاً وقتی از توابعی مانند FILTER, CALCULATE, یا SUMX در داخل ستون محاسبه‌شده استفاده می‌کنید. در این حالت، EARLIER به شما اجازه می‌دهد تا به مقدار ردیف بیرونی‌تر (قبلی‌تر) دسترسی داشته باشید.

✅ مثال ساده

فرض کنید جدول Sales دارید و می‌خواهید برای هر ردیف، تعداد سفارش‌هایی را بشمارید که مبلغشان کمتر از مبلغ همان ردیف باشد:

DAX
OrdersBelowCurrent =
CALCULATE(
    COUNTROWS(Sales),
    FILTER(
        Sales,
        Sales[Amount] < EARLIER(Sales[Amount])
    )
)

در این مثال، EARLIER(Sales[Amount]) به مقدار ستون Amount در ردیف فعلی (در زمینه بیرونی‌تر) اشاره می‌کند، در حالی که Sales[Amount] در داخل FILTER به ردیف‌های دیگر اشاره دارد.

مثالی دیگر

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

مثال زیر بر اساس این جدول ساده، ProductSubcategory، است که کل فروش برای هر ProductSubcategory را نشان می‌دهد.

جدول نهایی، شامل ستون رتبه‌بندی، در اینجا نشان داده شده است.

ProductSubcategoryKey EnglishProductSubcategoryName TotalSubcategorySales SubcategoryRanking
18 Bib-Shorts $156,167.88 18
26 Bike Racks $220,720.70 14
27 Bike Stands $35,628.69 30
28 Bottles and Cages $59,342.43 24
5 Bottom Brackets $48,643.47 27
6 Brakes $62,113.16 23
19 Caps $47,934.54 28
7 Chains $8,847.08 35
29 Cleaners $16,882.62 32
8 Cranksets $191,522.09 15
9 Derailleurs $64,965.33 22
30 Fenders $41,974.10 29
10 Forks $74,727.66 21
20 Gloves $228,353.58 12
4 Handlebars $163,257.06 17
11 Headsets $57,659.99 25
31 Helmets $451,192.31 9
32 Hydration Packs $96,893.78 20
21 Jerseys $699,429.78 7
33 Lights 36
34 Locks $15,059.47 33
1 Mountain Bikes $34,305,864.29 2
12 Mountain Frames $4,511,170.68 4
35 Panniers 36
13 Pedals $140,422.20 19
36 Pumps $12,695.18 34
2 Road Bikes $40,551,696.34 1
14 Road Frames $3,636,398.71 5
15 Saddles $52,526.47 26
22 Shorts $385,707.80 10
23 Socks $28,337.85 31
24 Tights $189,179.37 16
37 Tires and Tubes $224,832.81 13
3 Touring Bikes $13,334,864.18 3
16 Touring Frames $1,545,344.02 6
25 Vests $240,990.04 11
17 Wheels $648,240.04 8

ایجاد مقدار رتبه (Rank Value)

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

یک ستون محاسبه شده جدید، SubCategorySalesRanking، با استفاده از فرمول زیر ایجاد می‌شود.

DAX
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1

EARLIER

مراحل زیر روش محاسبه را با جزئیات بیشتری شرح می‌دهد.

  1. تابع EARLIER مقدار TotalSubcategorySales را برای ردیف فعلی جدول دریافت می‌کند. در این حالت، چون فرآیند در حال شروع است، اولین ردیف در جدول است.
  2. EARLIER([TotalSubcategorySales]) برابر با $156,167.88، ردیف فعلی در حلقه بیرونی، ارزیابی می‌شود.
  3. تابع FILTER اکنون جدولی را برمی‌گرداند که در آن همه ردیف‌ها مقدار TotalSubcategorySales بزرگتر از $156,167.88 دارند (که مقدار فعلی EARLIER است).
  4. تابع COUNTROWS ردیف‌های جدول فیلتر شده را می‌شمارد و آن مقدار را به ستون محاسبه شده جدید در ردیف فعلی به علاوه ۱ اختصاص می‌دهد. برای جلوگیری از خالی شدن بالاترین مقدار رتبه‌بندی شده، اضافه کردن ۱ لازم است.
  5. فرمول ستون محاسبه شده به ردیف بعدی منتقل می‌شود و مراحل ۱ تا ۴ را تکرار می‌کند. این مراحل تا رسیدن به انتهای جدول تکرار می‌شوند.

تابع EARLIER همیشه مقدار ستون را قبل از عملیات فعلی جدول دریافت می‌کند. اگر نیاز دارید مقداری را قبل از آن از حلقه دریافت کنید، آرگومان دوم را روی ۲ تنظیم کنید.

کاربردهای رایج

  • مقایسه ردیف فعلی با سایر ردیف‌ها در ستون‌های محاسبه‌شده
  • ساخت رتبه‌بندی‌ها، شمارش‌های تجمعی، یا تحلیل‌های مقایسه‌ای
  • استفاده در توابعی که زمینه ردیفی تو در تو ایجاد می‌کنند

⚠️ نکات مهم

  • EARLIER فقط در ستون‌های محاسبه‌شده قابل استفاده است، نه در معیارها (Measures).
  • اگر فقط یک زمینه ردیفی فعال باشد، استفاده از EARLIER باعث خطا می‌شود.
  • در مدل‌های پیچیده، استفاده زیاد از EARLIER ممکن است باعث کاهش عملکرد شود؛ در این موارد بهتر است از تابع جدیدتر VAR استفاده کنید.

جایگزین مدرن: استفاده از متغیرها (VAR)

تابع EARLIER در بسیاری از موارد با استفاده از متغیرها قابل جایگزینی است که خوانایی و عملکرد بهتری دارند:

DAX
VAR CurrentAmount = Sales[Amount]
RETURN
CALCULATE(
    COUNTROWS(Sales),
    FILTER(Sales, Sales[Amount] < CurrentAmount)
)

ملاحظات

  • اگر قبل از شروع اسکن جدول، یک زمینه ردیف وجود داشته باشد، EARLIER موفق می‌شود. در غیر این صورت، خطا برمی‌گرداند.
  • عملکرد EARLIER ممکن است کند باشد زیرا از لحاظ تئوری، ممکن است مجبور باشد تعدادی عملیات انجام دهد که نزدیک به تعداد کل ردیف‌ها (در ستون) ضربدر همان تعداد (بسته به نحو عبارت) باشد. به عنوان مثال، اگر 10 ردیف در ستون داشته باشید، تقریباً 100 عملیات ممکن است مورد نیاز باشد. اگر 100 ردیف داشته باشید، ممکن است نزدیک به 10000 عملیات انجام شود.
  • این تابع برای استفاده در حالت DirectQuery هنگام استفاده در ستون‌های محاسبه شده یا قوانین امنیتی سطح ردیف (RLS) پشتیبانی نمی‌شود.

برای خرید لایسنس نرم افزار Power BI ، می‌توانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.

فرم درخواست لایسنس Power BI

میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download

 

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا