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

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

تابع WINDOW در DAX

تابع WINDOW در DAX

تابع WINDOW در Power BI

تابع WINDOW در Power BI (زبان DAX) برای انجام محاسبات روی مجموعه‌ای از ردیف‌ها در یک بازه مشخص استفاده می‌شود، مشابه window functions در SQL. این تابع امکان محاسبه میانگین متحرک، مقایسه با ردیف قبلی، جمع تجمعی و موارد مشابه را فراهم می‌کند.

 تعریف و نحوه استفاده

DAX
WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
  • from و to: محدوده شروع و پایان پنجره (window) را مشخص می‌کنند.
  • from_type و to_type: نوع موقعیت‌دهی را تعیین می‌کنند:
    • REL: موقعیت نسبی نسبت به ردیف فعلی (مثلاً -1 یعنی ردیف قبلی)
    • ABS: موقعیت مطلق از ابتدای پارتیشن (مثلاً 1 یعنی اولین ردیف)
  • orderBy: ترتیب مرتب‌سازی داده‌ها در پنجره.
  • partitionBy: تقسیم داده‌ها به گروه‌های مستقل برای اعمال پنجره.
  • blanks: نحوه برخورد با مقادیر خالی.
  • reset: بازنشانی پنجره در صورت تغییر مقدار خاصی.
✅ مثال 1: محاسبه میانگین متحرک 3 ماهه
DAX
MovingAverage3Months =
AVERAGEX(
    WINDOW(-2, REL, 0, REL, ALLSELECTED('Date'[Month]), ORDERBY('Date'[Month])),
    [Sales]
)

در این مثال:

  • WINDOW(-2, REL, 0, REL, ...) یک پنجره ۳ ماهه شامل ماه جاری و دو ماه قبل ایجاد می‌کند.
  • AVERAGEX میانگین فروش در این بازه را محاسبه می‌کند.
✅ مثال 2: measure

اقدام زیر:

DAX
3-day Average Price = 
AVERAGEX(
    WINDOW(
        -2,REL,0,REL,
        SUMMARIZE(ALLSELECTED('Sales'), 'Date'[Date], 'Product'[Product]),
        ORDERBY('Date'[Date]),
        KEEP,
        PARTITIONBY('Product'[Product])
    ), 
    CALCULATE(AVERAGE(Sales[Unit Price]))
)

میانگین قیمت واحد هر محصول را در سه روز گذشته برمی‌گرداند. توجه داشته باشید که بازه زمانی سه روزه شامل سه روزی است که محصول در آن فروش داشته است، نه لزوماً سه روز تقویمی متوالی.

 

✅ مثال 3: measure

اقدام زیر:

DAX
RunningSum =
SUMX (
    WINDOW (
        1, ABS, 0, REL,
        ALLSELECTED (
            'Date'[Fiscal Year],
            'Date'[Month Number Of Year]
        ),
        PARTITIONBY ( 'Date'[Fiscal Year] )
    ),
    [Total Sales]
)

مجموع فروش کل را بر اساس ماه، تعداد سال، برمی‌گرداند و برای هر سال مالی دوباره شروع به کار می‌کند:

Year Month Number Of Year Sales Amount RunningSum
FY2018 1 $1,327,675 $1,327,675
FY2018 2 $3,936,463 $5,264,138
FY2018 3 $700,873 $5,965,011
FY2018 4 $1,519,275 $7,484,286
FY2018 5 $2,960,378 $10,444,664
FY2018 6 $1,487,671 $11,932,336
FY2018 7 $1,423,357 $13,355,693
FY2018 8 $2,057,902 $15,413,595
FY2018 9 $2,523,948 $17,937,543
FY2018 10 $561,681 $18,499,224
FY2018 11 $4,764,920 $23,264,145
FY2018 12 $596,747 $23,860,891
FY2019 1 $1,847,692 $1,847,692
FY2019 2 $2,829,362 $4,677,054
FY2019 3 $2,092,434 $6,769,488
FY2019 4 $2,405,971 $9,175,459
FY2019 5 $3,459,444 $12,634,903
FY2019 6 $2,850,649 $15,485,552
FY2019 7 $2,939,691 $18,425,243
FY2019 8 $3,964,801 $22,390,045
FY2019 9 $3,287,606 $25,677,650
FY2019 10 $2,157,287 $27,834,938
FY2019 11 $3,611,092 $31,446,030
FY2019 12 $2,624,078 $34,070,109
FY2020 1 $3,235,187 $3,235,187
FY2020 2 $4,070,046 $7,305,233
FY2020 3 $4,429,833 $11,735,066
FY2020 4 $4,002,614 $15,737,680
FY2020 5 $5,265,797 $21,003,477
FY2020 6 $3,465,241 $24,468,717
FY2020 7 $3,513,064 $27,981,781
FY2020 8 $5,247,165 $33,228,947
FY2020 9 $5,104,088 $38,333,035
FY2020 10 $3,542,150 $41,875,184
FY2020 11 $5,151,897 $47,027,081
FY2020 12

 

✅ مثال 4: محاسبه بصری

کوئری DAX محاسبه بصری زیر:

DAX
TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])

کل فروش تجمعی را بر اساس ماه، که در طول هر سال محاسبه شده است، برمی‌گرداند. می‌توان به جای HIGHESTPARENT از مقدار ۱ استفاده کرد، با همان نتیجه.

تصویر زیر ماتریس بصری و عبارت محاسبه بصری را نشان می‌دهد:

تابع WINDOW در DAX

✅ مثال 5:محاسبه بصری

کوئری DAX محاسبه بصری زیر:

DAX
TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])
کل فروش تجمعی را بر اساس ماه، که در هر فصل محاسبه می‌شود، برمی‌گرداند. می‌توان به جای -۱ از مقدار LOWESTPARENT استفاده کرد، با همان نتیجه.

 

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

  • مقایسه با ردیف قبلی یا بعدی (مثلاً فروش این ماه نسبت به ماه قبل)
  • محاسبه میانگین متحرک یا مجموع تجمعی
  • تحلیل روندها در داده‌های زمانی
  • ایجاد شاخص‌های رتبه‌بندی یا فاصله‌ای

⚠️ نکات مهم

  • تابع WINDOW فقط در visual calculations، measures، calculated columns و calculated tables قابل استفاده است.
  • برای استفاده مؤثر، باید داده‌ها را به‌درستی مرتب‌سازی (orderBy) و پارتیشن‌بندی (partitionBy) کنید.
  • این تابع از دسامبر 2022 به DAX اضافه شده و در نسخه‌های جدید Power BI در دسترس است.

ملاحظات

به جز ستون‌هایی که توسط توابع جدول DAX اضافه می‌شوند، هر ستون مرتبط، وقتی matchBy وجود ندارد، یا هر ستون در matchBy و partitionBy، وقتی matchBy وجود دارد، باید یک مقدار بیرونی متناظر داشته باشد تا به تعریف ردیف فعلی که روی آن عمل می‌کند، کمک کند. و اگر from_type و to_type هر دو مقدار ABS داشته باشند، موارد زیر فقط برای ستون‌های partitionBy اعمال می‌شود:

  • اگر دقیقاً یک ستون بیرونی متناظر وجود داشته باشد، از مقدار آن استفاده می‌شود.
  • اگر هیچ ستون بیرونی متناظری وجود نداشته باشد:
    • WINDOW ابتدا تمام ستون‌هایی را که ستون بیرونی متناظری ندارند، تعیین می‌کند.
    • برای هر ترکیبی از مقادیر موجود برای این ستون‌ها در زمینه والد WINDOW، WINDOW ارزیابی می‌شود و ردیف‌های متناظر بازگردانده می‌شوند.
    • خروجی نهایی WINDOW ترکیبی از این ردیف‌ها است.
  • اگر بیش از یک ستون بیرونی متناظر وجود داشته باشد، یک خطا بازگردانده می‌شود.

اگر تمام ستون‌های رابطه توسط توابع جدول DAX اضافه شده باشند، خطایی برگردانده می‌شود.

اگر matchBy وجود داشته باشد، WINDOW سعی می‌کند از ستون‌های matchBy و partitionBy برای شناسایی ردیف استفاده کند. و اگر matchBy وجود نداشته باشد و ستون‌های مشخص شده در orderBy و partitionBy نتوانند به طور منحصر به فرد هر ردیف در رابطه را شناسایی کنند، آنگاه:

WINDOW function

  • پنجره سعی می‌کند کمترین تعداد ستون اضافی مورد نیاز برای شناسایی منحصر به فرد هر سطر را پیدا کند.
  • اگر چنین ستون‌هایی پیدا شوند، پنجره به طور خودکار این ستون‌های جدید را به orderBy اضافه می‌کند و هر پارتیشن با استفاده از این مجموعه جدید از ستون‌های orderBy مرتب می‌شود.
  • اگر چنین ستون‌هایی پیدا نشوند، خطایی برگردانده می‌شود.

یک جدول خالی برگردانده می‌شود اگر:

  • مقدار بیرونی متناظر ستون orderBy یا partitionBy در رابطه وجود نداشته باشد.
  • کل پنجره خارج از پارتیشن باشد، یا ابتدای پنجره بعد از انتهای آن باشد.

اگر WINDOW در یک ستون محاسبه‌شده که در همان جدول به عنوان رابطه تعریف شده است، استفاده شود و orderBy حذف شود، خطایی بازگردانده می‌شود.

اگر شروع پنجره قبل از ردیف اول باشد، روی ردیف اول تنظیم می‌شود. به طور مشابه، اگر انتهای پنجره بعد از آخرین ردیف پارتیشن باشد، روی آخرین ردیف تنظیم می‌شود.

reset فقط در محاسبات بصری قابل استفاده است و نمی‌توان آن را در ترکیب با orderBy یا partitionBy استفاده کرد. اگر reset وجود داشته باشد، می‌توان axis را مشخص کرد اما relation را نمی‌توان.

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

 

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

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

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

 

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

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

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