بهینه سازی Blank در Dax نرم افزار Power Bi

این مقاله توضیح می دهد که چگونه مقادیر خالی در نظر گرفته شده در یک عبارت شرطی DAX می تواند بر طرح پرس و جو تأثیر بگذارد و چگونه می توان از بهینه سازی های احتمالی برای بهبود عملکرد در این موارد استفاده کرد.

 

روش اول : در این قطعه کد میبنید که با استفاده از IF  به عنوان شرط جستجو در حجم دیتای بالا ابتدا هر آیتم جمع فروش را با صفر مقایسه میکند که ببیند مساوی و یا بزرگتر از آن است و اگر محقق شود نتیجه اجرا میشود این روش کند ترین روش به دلیل استفاده از عملگر =< به صورت همزمان در ابتدای محاسبات است.

 

DEFINE
    MEASURE Sales[SimpleIf] =
    IF (
        SUM ( Sales[Quantity] ) >= 0,
        SUM ( Sales[Quantity] )
    )
EVALUATE
{
    COUNTROWS (
        SUMMARIZECOLUMNS (
            'Date'[Date],
            Customer[Company Name],
            'Product'[Color],
            "Test", [SimpleIf]
        )
    )
}

روش دوم :از آنجاییکه صفر و خالی در دکس را با بزرگتر از صفر میتوانیم نشان دهیم فرمول زیر نسبت به روش اول بهینه تر است. و عملگر مساوی حذف میگردد.

 

DEFINE
    MEASURE Sales[SimpleIf] =
        IF (
            SUM ( Sales[Quantity] ) > 0,
            SUM ( Sales[Quantity] )
        )
EVALUATE
{
    COUNTROWS (
        SUMMARIZECOLUMNS (
            'Date'[Date],
            Customer[Company Name],
            'Product'[Color],
            "Test", [SimpleIf]
        )
    )
}

روش سوم : حذف مقادیر صفر از شرط با کمک NOT ISBLANK به طور کلی ، افزودن کمی کد برای حذف صریح مقادیر خالی از محاسبه ، به بهینه سازی کمک می کند تا بهترین مسیر را پیدا کند.

 

DEFINE
    MEASURE Sales[SimpleIf] =
        IF (
            NOT ISBLANK ( SUM ( Sales[Quantity] ) ),
            IF (
                SUM ( Sales[Quantity] ) > 0,
                SUM ( Sales[Quantity] )
            )
        )
EVALUATE
{
    COUNTROWS (
        SUMMARIZECOLUMNS (
            'Date'[Date],
            Customer[Company Name],
            'Product'[Color],
            "Test", [SimpleIf]
        )
    )
}

روش چهارم : در نهایت ، شایان ذکر است که نتایج مشابهی را می توان با استفاده از متغیرها (تعریف Var ) به دست آورد. متغیرها تا حد زیادی به بهینه ساز کمک می کند تا کد ما را نویسنده درک کند و مسیرهای بهینه ای را در برنامه اجرا ایجاد کند. این آخرین نسخه از پرس و جو در بین تمام نسخه های مختلف تجزیه و تحلیل سریع ترین است:

DEFINE
    MEASURE Sales[SimpleIf] =
        VAR S = SUM ( Sales[Quantity] )
        RETURN IF ( S >= 0, S )
EVALUATE
{
    COUNTROWS (
        SUMMARIZECOLUMNS (
            'Date'[Date],
            Customer[Company Name],
            'Product'[Color],
            "Test", [SimpleIf]
        )
    )
}

 

نتیجه :

درک دلیل حل مشکل توسط یک متغیر کمی پیچیده تر است. با استفاده از یک متغیر ، ما به بهینه ساز می گوییم که می خواهیم همه سطرها را با استفاده از SUM جمع آوری کنیم ، صرف نظر از اینکه شرایط در تابع IF برآورده شده است یعنی مقادیر در بلوک محاسبه می شوند و سپس از شرط IF برای افزودن فقط نتایج مثبت استفاده می شود.

ما نمی خواهیم هیچ قانون طلایی را به اشتراک بگذاریم ، عمدتا به این دلیل که ما واقعاً می دانیم هیچ قانونی وجود ندارد. با این وجود ، هنگام بهینه سازی کد ، همیشه به تعداد ردیف های تکرار شده توسط موتور فرمول توجه کنید. تکرارهای بزرگ اغلب در اثر برخورد رفتار نادرست ایجاد می شود ، که اغلب به دلیل عدم وجود دایمنشن موجود در موتور وجود دارد که موتور باید آن را تکرار کند تا معادل بین BLANK و صفر را تضمین کند.

 

0 پاسخ

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

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

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

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