بهینه‌سازی عملکرد Power BI | افزایش سرعت

بهینه‌سازی عملکرد Power BI | افزایش سرعت

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۱۵ اسفند ۱۴۰۳
آخرین بروزرسانی: 15 اسفند 1403
زمان مطالعه: 12 دقیقه
۰
(۰)

در محیط Power BI که از قدرتمندترین ابزارهای هوش تجاری در سازمان‌های داده‌محور است، کاربران می‌توانند به طراحی و پیاده‌سازی داشبوردهای تعاملی بپردازند؛ با این ‌حال، چالش‌هایی که در این فرایند با آن‌ها مواجه می‌شوند، از جمله کندی بارگذاری گزارشات، پردازش داده‌های سنگین و تأخیر در اجرای کوئری‌های پیچیده، بهره‌وری این ابزار را کاهش می‌دهند.

بهینه‌سازی عملکرد در Power BI مستلزم اتخاذ رویکردهای پیشرفته‌ای است که در این مطلب به آن‌ها می‌پردازیم؛ برای اینکه بتوانید عملکرد Power BI را بهینه‌سازی کنید، از منابع سخت‌افزاری بهتر استفاده کنید و تجربه کاربری سریع‌تر و روان‌تری داشته باشید، لازم است این استراتژی‌ها را یاد بگیرید.

بهینه‌سازی مدل داده‌ها: اصول طراحی کارآمد برای کاهش سربار پردازشی

کارایی کلی داشبوردها تا حد زیادی به مدل داده‌ای در Power BI بستگی دارد؛ یک مدل غیربهینه و آشفته زمان پردازش کوئری‌ها را افزایش می‌دهد، حافظه (RAM) بیشتری مصرف می‌کند و افت کارایی را به دنبال دارد. استراتژی‌های زیر برای طراحی یک مدل داده‌ای بهینه هستند:

انتخاب ساختار مدل داده‌ای مناسب: Star Schema در مقابل  Snowflake Schema

در Power BI، توصیه می‌کنیم از مدل ستاره‌ای (Star Schema) به‌جای مدل دانه‌برفی (Snowflake Schema)  استفاده کنید.

        » ویژگی‌های مدل ستاره‌ای  (Star Schema)

    • شامل یک جدول مرکزی (Fact Table) و چندین جدول بُعد (Dimension Tables) است.
    • افزایش سرعت پردازش کوئری‌ها به دلیل تعداد ارتباطات و پیوندهای کمتر بین جداول.
    • مناسب برای پردازش‌های تحلیلی با داده‌های حجیم.

        » ویژگی‌های مدل دانه برفی  (Snowflake Schema)

      • جداول ابعادی به چندین جدول کوچک‌تر نرمال‌سازی می‌شوند.
      • مناسب برای مدل‌هایی که در آن‌ها صرفه‌جویی در فضای ذخیره‌سازی اولویت دارد.

 

بهینه‌سازی عملکرد Power BI

 

بهینه‌سازی جداول Fact و Dimension برای کاهش حجم داده‌ها

یکی از رایج‌ترین دلایل کُندی پردازش در Power BI، حجم زیاد جداول و داده‌های غیرضروری است؛ برای بهینه‌سازی، موارد زیر را رعایت کنید:

  • حذف ستون‌های غیرضروری: هر ستون اضافی در جدول، در مصرف حافظه و پردازش داده‌ها نقش دارد؛ با حذف ستون‌های غیرضروری، فقط ستون‌های ضروری برای تحلیل‌ها را باقی بگذارید.
  • کاهش Granularity (دقت داده‌ها): اگر جزئیات بیش از حدی در جدول Fact ذخیره شود، پردازش کوئری‌ها به‌شدت کند می‌شود؛ به‌عنوان مثال، اگر تحلیل‌ها را به‌صورت ماهانه انجام می‌دهید، ذخیره داده‌های روزانه احتمالا غیرضروری است و فرایند را طولانی می‌کند.
  • جلوگیری از ذخیره مقادیر محاسباتی در جداول: به جای ذخیره مقادیر محاسبه‌شده (مثل کل فروش)، بهتر است از توابع DAX در سطح داشبورد استفاده شود.

مدیریت مصرف حافظه با استفاده از Encoding و Aggregation

Power BI  از VertiPaq Engine  برای فشرده‌سازی و پردازش داده‌ها استفاده می‌کند؛ دو راهکار کلیدی برای کاهش مصرف حافظه عبارتند از:

        » Encoding Columnar Storage

    • هر چه تعداد مقادیر منحصربه‌فرد  (Cardinality)  یک ستون برای فشرده‌سازی کمتر باشد، عملیات روی آن کارآمدتر و سریع‌تر است.
    • ستون‌های دسته‌بندی‌شده (Categorical) که مقدارهای کمی دارند، سریع‌تر پردازش می‌شوند.
    • ستون‌های عددی پیوسته (مانند قیمت یا شناسه یکتا) ممکن است مصرف حافظه را افزایش دهند؛ اما تبدیل آن‌ها به String یا نوع Categorical همیشه بهترین راهکار نیست. در صورتی که شناسه عددی دارای مقادیر واقعاً منحصربه‌فرد و فراوان باشد (نظیر شناسه‌های ترتیبی با دامنه مقادیر گسترده)، پیش از هر اقدامی بررسی کنید که آیا می‌توانید از روش دسته‌بندی (Bucketing) یا گروه‌بندی منطقی بهره ببرید. تبدیل مستقیم این مقادیر به String گاه منجر به افزایش حجم داده‌ها و کاهش کارایی فشرده‌سازی می‌شود. پس بهتر است این کار را با احتیاط انجام دهید و توجه داشته باشید که تعداد رکوردها، نوع فشرده‌سازی VertiPaq، و میزان تکرار داده‌ها در تصمیم‌گیری نهایی نقش مهمی دارند.

        » ایجاد Aggregation Tables (جداول تجمیعی)

    • برای کاهش حجم پردازش داده‌ها، از جداول تجمیعی (Aggregation Tables) استفاده کنید.
    • Power BI  قابلیت Automatic Aggregation Detection  دارد که می‌تواند پردازش روی داده‌های بزرگ را بهینه کند.

بهینه‌سازی DAX و کوئری‌های محاسباتی

DAX  زبان محاسباتی Power BI است که نقش کلیدی در پردازش داده‌ها، ایجاد معیارها (Measures)  و محاسبات دارد؛ استفاده از DAX به شکل غیربهینه و غیراصولی منجر به افزایش زمان پردازش، مصرف بالای منابع و کاهش سرعت داشبوردها می‌شود.

بهینه‌سازی Context Evaluation در DAX

یکی از مهم‌ترین چالش‌های عملکردی در DAX، نحوه مدیریت Context Evaluation (ارزیابی بستر محاسباتی) است.

 DAX دو نوع بستر اصلی برای محاسبات دارد:

  1. Row Context (بستر سطری): در محاسباتی که در سطح ردیف‌های داده اجرا می‌شوند، مانند ستون‌های محاسباتی (Calculated Columns).
  2. Filter Context (بستر فیلتر): هنگام استفاده از Measuresکه داده‌ها را بر اساس فیلترهای اعمال‌شده پردازش می‌کنند.

جایگزینی  Calculated Columns  با  Measures

استفاده از ستون‌های محاسباتی (Calculated Columns) باعث افزایش حجم داده‌ها و مصرف بالای RAM می‌شود، زیرا این محاسبات در هنگام بارگذاری مدل ذخیره می‌شوند؛ به‌جای ستون‌های محاسباتی، از Measures استفاده کنید، زیرا Measures فقط در زمان اجرا محاسبه می‌شوند و نیازی به ذخیره‌سازی ندارند.

مثال غیربهینه:

SalesAmount = Sales[Quantity] * Sales[UnitPrice]

 

جایگزین بهینه:

SalesAmount = SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])

 

استفاده از VAR برای کاهش تعداد پردازش‌های مکرر

اجرای چندباره یک تابع در یک Measure باعث افت کارایی خواهد شد؛ برای ذخیره‌سازی مقادیر محاسبه‌شده و جلوگیری از محاسبه مجدد، از VAR استفاده کنید.

مثال بهینه:

TotalSales =
VAR SalesValue = SUM(Sales[Amount])
RETURN SalesValue

 

بهینه‌سازی عملکرد Aggregation Functions: SUMX|AVERAGEX و استفاده بهینه از CALCULATE

در محاسبات سطری به‌جای SUM از SUMX استفاده کنید؛ زیرا SUMX داده‌ها را به ‌صورت سطری پردازش کرده و عملکرد بهتری در ارزیابی داده‌های پیچیده دارد.

مثال غیربهینه:

TotalSales = SUM(Sales[Quantity] * Sales[UnitPrice])

 

جایگزین بهینه:

TotalSales = SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])

 

کاهش استفاده از CALCULATE برای بهینه‌سازی فیلترها

اگرچه استفاده بی‌مورد از CALCULATE در کوئری‌های پیچیده ممکن است منجر به پردازش غیرضروری شود، اما در بسیاری از موارد، CALCULATE ابزار اصلی برای اعمال فیلترها و ارزیابی Context در DAX است. پیش از حذف یا جایگزینی آن، حتماً ساختار مدل، نیازمندی‌های فیلترگذاری و میزان داده‌ها را بررسی کنید.

مثال غیربهینه:

FilteredSales = CALCULATE(SUM(Sales[Amount]), Sales[Category] = "Electronics")

 

جایگزین بهینه:

FilteredSales =
VAR CategoryFilter = FILTER(Sales, Sales[Category] = "Electronics")
RETURN SUMX(CategoryFilter, Sales[Amount])

 

کاهش Cardinality برای بهبود سرعت پردازش  DAX

یکی از عواملی که در کندی پردازش DAX نقش دارد، بالا بودن Cardinality (تعداد مقادیر منحصربه‌فرد در یک ستون) است. راهکارهای کاهش Cardinality عبارت‌اند از:

 

بهینه‌سازی عملکرد Power BI

 

استفاده از دسته‌بندی‌های از پیش تعیین‌شده

به‌جای ذخیره مقادیر عددی پیوسته (مثل قیمت دقیق)، مقدارهای مشابه را دسته‌بندی کنید؛ به عنوان مثال، به‌جای ذخیره قیمت دقیق، از محدوده‌های قیمتی (Low, Medium, High) استفاده کنید.

حذف ستون‌های غیرضروری از محاسبات  DAX

در صورتی که یک Measure نیازی به تمام داده‌ها ندارد، داده‌ها را از قبل فیلتر کنید تا Cardinality  کاهش یابد.

کاهش Precision مقادیر عددی

اگر تحلیل شما دقت بسیار بالایی نیاز ندارد (به‌ویژه در سناریوهای غیرمالی یا علمی حساس)، می‌توانید با کاهش Precision (مثلاً گرد کردن به تعداد اعشاری کمتر) حجم داده و میزان پردازش DAX را کاهش دهید؛ اما در تحلیل‌های مالی یا علمی که دقت بالا حیاتی است، این کار را با احتیاط انجام دهید و پیش از هر تصمیمی، نیازمندی‌های کسب‌وکار یا پروژه را به دقت بررسی کنید.

جایگزینی Measures تو در تو با Table Variables برای کاهش زمان پردازش

تعریف یک Table Variable باعث می‌شود که Power BI داده‌ها را یک‌بار پردازش کرده و مجدداً استفاده کند، درحالی‌که در روش اول، FILTER  چندین بار پردازش می‌شود.

مثال غیربهینه:

FinalSales = SUMX(FILTER(Sales, Sales[Category] = "Electronics"), Sales[Amount])

 

مثال بهینه:

FinalSales =
VAR FilteredTable = FILTER(Sales, Sales[Category] = "Electronics")
RETURN SUMX(FilteredTable, Sales[Amount])

 

در بسیاری از سناریوها، استفاده از VAR و ذخیره‌سازی موقت داده‌ها یا نتایج محاسبات می‌تواند به بهبود عملکرد و جلوگیری از محاسبه چندباره منجر شود؛ اما نباید این موضوع را به‌عنوان یک قانون کلی در نظر گرفت که همیشه باید FILTER را حذف کرد. اگر FILTER به‌درستی در سطح محدودی از داده‌ها اعمال شود یا با شاخص‌های مناسب (Indexing) همراه باشد، می‌تواند عملکرد مطلوبی داشته باشد؛ بنابراین بهتر است پیش از اعمال این تغییرات، سناریوی داده و حجم آن را بررسی کنید و تنها در صورت مشاهدهٔ افت کارایی، از روش معرفی‌شده با VAR استفاده کنید.

بهینه‌سازی بصری و افزایش سرعت رندر داشبوردها

بهینه‌سازی بصری در Power BI  یکی از مهم‌ترین جنبه‌های افزایش کارایی داشبوردها است. یک داشبورد کارآمد هم باید از نظر بصری جذاب باشد، هم به ‌سرعت رندر شود و تجربه تعاملی بی‌نقصی ارائه دهد. در این بخش، به روش‌های بهینه‌سازی تعداد ویژوال‌ها، استفاده هوشمندانه از Aggregations  و مدیریت  Conditional Formatting می‌پردازیم.

کاهش تعداد ویژوال‌ها و بهینه‌سازی تعاملات

هر ویژوال در پاور بی آی مستقیماً بر مصرف CPU ،RAM  و زمان رندر تأثیر می‌گذارد؛ هنگام بارگذاری داشبورد، هر ویژوال باید Query خود را اجرا کرده و داده‌های لازم را پردازش کند. افزایش تعداد ویژوال‌ها منجر به افزایش زمان پردازش و کاهش نرخ فریم (FPS) رندر می‌شود.

روش‌های کاهش تعداد ویژوال‌ها و افزایش کارایی

  1. ترکیب چند ویژوال در یکی
    • به جای استفاده از چندین Card یا KPI  جداگانه، می‌توان یک Matrix  یا Table  را برای نمایش چندین مقدار کلیدی به کار گرفت.
  2. کاهش تعداد Slicerها
    • Slicer از روش‌های دیگر فیلترینگ است که زیادبودن آن پردازش داده‌ها را کند می‌کند. استفاده ازParameter Field Parameters به‌جای Slicer، عملکرد را بهبود می‌دهد.
  3. بهینه‌سازی تعاملات (Interactivity Optimization)
    • در قسمت Edit Interactions، تعامل‌های غیرضروری را غیرفعال کنید تا از پردازش بیهوده جلوگیری شود.
    • Cross-filtering در حجم بالای داده می‌تواند زمان واکنش داشبورد را افزایش دهد، بنابراین باید محدود شود.

استفاده از Aggregations برای کاهش بار پردازشی

Aggregation  یک روش پیشرفته برای بهینه‌سازی عملکرد Power BI است که با کاهش حجم داده‌های پردازش‌شده، پاسخ‌دهی به کوئری‌ها را تسریع می‌کند؛ در حجم‌های بزرگ داده، هر Query به پایگاه داده فشار وارد کرده و به کندی عملکرد منتهی می‌شود.

 

بهینه‌سازی عملکرد Power BI

 

مراحل پیاده‌سازی Aggregations در  Power BI

  1. شناسایی معیارهای کلیدی
    • انتخاب فیلدهایی که معمولاً در فیلترها و تحلیل‌ها استفاده می‌شوند.
  2. ایجاد جدول Aggregation
    • یک جدول از داده‌های تجمیع‌شده (مثلاً ماهانه به‌جای روزانه) ایجاد کنید و از آن در گزارش‌ها استفاده کنید.
  3. اتصال Aggregation به مدل اصلی
    • با استفاده از ویژگی Manage Aggregations، داده‌های Aggregated را به مدل داده‌ای متصل کنید تا Power BI هنگام Query، به‌جای داده‌های خام، از Aggregation  استفاده کند.
  4. بهینه‌سازی DirectQuery با Aggregation
    • در صورت استفاده از DirectQuery، ترکیب Aggregation با داده‌های Import Mode به افزایش سرعت اجرای کوئری‌ها منجر می‌شود.

بهینه‌سازی Conditional Formatting برای جلوگیری از کندی

Conditional Formatting  در Power BI قابلیت بسیار مفیدی برای نمایش داده‌ها به ‌صورت بصری است، اما استفاده بیش‌ازحد از آن می‌تواند باعث کاهش سرعت پردازش و افزایش زمان رندر داشبورد شود.

نکات مهم برای بهینه‌سازی  Conditional Formatting

  1. محدود کردن استفاده از Conditional Formatting روی مقادیر زیاد
    • اعمال Conditional Formatting روی داده‌های Aggregated (مثلاً خلاصه گروهی) به‌جای تک‌تک رکوردها، باعث بهبود عملکرد می‌شود.
  2. اجتناب از DAX پیچیده در Conditional Formatting
    • استفاده از توابع پیچیده در DAX (مانند IFهای تو در تو) برای Conditional Formatting می‌تواند کاهش سرعت پردازش را در پی داشته باشد. توصیه می‌شود از Calculated Columns  پیش‌محاسبه‌شده استفاده شود.
  3. استفاده از رنگ‌های محدود و ساده
    • کاهش تعداد رنگ‌های مختلف و استفاده از یک پالت رنگی ساده باعث افزایش سرعت رندر می‌شود.
  4. جایگزینی Conditional Formatting با Pre-Processed Data
    • در برخی موارد، می‌توان Conditional Formatting را در سطح پایگاه داده یا Power Query اعمال کرد تا بار پردازشی روی Power BI کاهش یابد.

سخن پایانی

برای دستیابی به عملکردی بهینه در Power BI، رویکردی چندوجهی لازم است که شامل کاهش بار پردازشی ویژوال‌ها، بهینه‌سازی تعاملات، بهره‌گیری از Aggregations و مدیریت هوشمندانه Conditional Formatting  باشد.

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

سوالات متداول بهینه‌سازی عملکرد Power BI

 

  ۱.چرا هنگام طراحی مدل داده، تأکید زیادی بر ساختار ستاره‌ای (Star Schema) می‌شود؟

در مدل ستاره‌ای تعداد ارتباطات بین جداول کمتر است و این موضوع باعث می‌شود کوئری‌ها سریع‌تر پردازش شوند؛ همچنین در پروژه‌هایی با داده‌های حجیم، ساختار ستاره‌ای باعث ساده‌تر شدن روابط و کاهش سربار پردازشی در Power BI می‌شود.

۲.آیا همیشه تبدیل اعداد به دسته‌بندی (Bucketing) یا تبدیل شناسه‌های عددی به String بهترین روش برای کاهش Cardinality است؟

خیر؛ این کار به شرایط داده و نیازمندی‌های تحلیلی بستگی دارد. اگر تعداد شناسه‌های منحصربه‌فرد خیلی زیاد باشد و امکان گروه‌بندی منطقی وجود داشته باشد، Bucketing می‌تواند به کاهش حجم پردازش کمک کند. در غیر این صورت، تبدیل مستقیم به String ممکن است حتی باعث افزایش حجم داده شود و کارایی را کاهش دهد.

۳.چطور بدانیم باید از کالکیولیت (CALCULATE) استفاده کنیم یا روش‌های جایگزین مانند FILTER و VAR را به کار ببریم؟

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

 

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
دانلود مقاله
بهینه‌سازی عملکرد Power BI | افزایش سرعت
فرمت PDF
صفحه
حجم مگابایت
دانلود مقاله
دوره Power Bi مقدماتی
title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
414 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
دیدگاه کاربران

دانلود رایگان فیلم: مسیر اجرای پروژه‌های هوش تجاری

چگونه یک پروژه هوش تجاری از صفر تا صد اجرا می‌شود؟

پاپ آپ | هوش تجاری

  • این قسمت برای اهداف اعتبارسنجی است و باید بدون تغییر باقی بماند.