برگردان مقادیر سطرهای پیشین در power bi

احتمالا با گزارش های مقایسه ای زیادی برخورد داشته اید! در برخی گزارش ها لازم میشه شما رکورد پیشین از رکورد جاری رو برگردونید و مقابل رکورد متناظر از نظر کد کالا، تاریخ و غیره قرار دهید. در این مقاله چند نمونه مختلف از این سناریو را با استفاده از DAX مرور می کنیم تا شاید کارگشا بود و در مسائل مشابهی که مواجه می شوید ایده بگیرید.

مثال های این مقاله، مثال تمرینی می باشند و این مقاله صرفا روند کلی روش را نشان می دهد!


مثال اول : داده هایی مانند جدول زیر رو در نظر بگیرید که می خواهید مقادیر سطر پیشین را با استفاده از مقدار ستون id محاسبه کنید و خروجی مشابه ستون آخر جدول زیر باشد.

 

 

  • یک روش استفاده از تابع EARLIER خواهد بود که با نوشتن فرمول زیر خروجی مد نظر حاصل می شود. در مواردی که یک رابطه منحصر به فرد وجود دارد و مقادیر مشابه در ستون مورد بررسی نداریم (در این مثال id) از تابع SUM می توان استفاده کرد. اگر تعداد بیشتری وجود داشت، می توان از توابعی همچون LASTNONBLANK یا FIRSTNONBLANK استفاده کرد.
previousQty = CALCULATE(SUM('Table'[Qty]),FILTER('Table','Table'[Id]=EARLIER('Table'[Id])-1))

 

  • یک روش دیگه استفاده از تابع LOOKUPVALUE برای جستجو مقدار و بازگرداندن مقدار مورد نظره.
previousQty2 = LOOKUPVALUE('Table'[Qty],'Table'[Id],'Table'[Id]-1)

مثال دوم : بر خلاف مثال قبل، خبری از id های به صورت مرتب و پشت سر هم و بازگشت با “یک منهای ساده” نیست. به طور مثال داده های همانند جدول زیر در اختیار دارید و قصد دارید مقدار کوچکترین id از id جاری رو مقابل id جاری قرار دهید.

 

 

previousQty = 
VAR previousRow =
    TOPN (
        ۱,
        FILTER (
            'Table','Table'[Id] < EARLIER ( 'Table'[Id] )
        ),
        'Table'[Id] , DESC
    )
VAR previousValue =
    MAXX ( previousRow, 'Table'[Qty] )
RETURN
    previousValue

 

در قسمت اول این فرمول تمام ستون های کم تر از id هر سطر فیلتر می شود و ستون id به صورت نزولی مرتب و اولین رکورد از مجموعه داده فیلتر شده در متغیر previousRow ذخیره می شود. و در نهایت مقدار ستون Qty با استفاده از تابع MAXX از جدول تک رکوردی previousRow باز گردانده می شود.

 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.