در مقاله قبلی با موتور شگفتانگیز VertiPaq آشنا شدیم و دیدیم که چگونه با معماری ستونی و فشردهسازی بینظیرش، قوانین بازی را در دنیای دادهها تغییر میدهد. اما یک سوال مهم پیش می آید : آیا Power BI همیشه دادهها را به درون رم (RAM) کامپیوتر شما میکشد؟ پاسخ کوتاه این است: خیر!
تصور کنید با یک دیتابیس عظیم روبرو هستید که دهها ترابایت حجم دارد و هر ثانیه هزاران رکورد جدید به آن اضافه میشود. در این حالت، وارد کردن تمام این دادهها به Power BI نه منطقی است و نه امکانپذیر. اینجاست که Power BI قابلیت انعطافپذیری خود را نشان میدهد و مفهومی به نام حالتهای ذخیرهسازی (Storage Modes) را به میان میآورد.
بیایید نگاهی به این ۴ حالت ذخیرهسازی بیندازیم تا ببینیم Power BI چگونه با منابع داده مختلف رفتار میکند.

این همان حالتی است که در مقاله قبل مفصل دربارهاش صحبت کردیم. در این حالت، شما کل دادهها را از منبع اصلی میخوانید، فشرده میکنید و درون خود فایل داشبورد (همان فایل با پسوند pbix.) ذخیره میکنید.
چه اتفاقی میافتد؟
ارتباط دادهها با منبع اصلی قطع شده و تمام آنها وارد حافظه (RAM) سیستم شما میشوند. حالا موتور VertiPaq کنترل کامل را در دست دارد.
سرعت بیرحمانه بالا است چون دادهها روی رم هستند، پیچیدهترین فرمولهای تحلیلی (DAX) در کسری از ثانیه محاسبه میشوند. در این حالت هیچ محدودیتی برای تغییر شکل دادهها و مدلسازی ندارید.
اما دوست من
هیچ ناهار مجانی ای وجود ندارد ....
شما محدود به میزان رم سیستم خود و محدودیتهای فضای ابری Power BI هستید. همچنین دادههای شما ایستا (Static) هستند؛ یعنی برای دیدن دادههای جدید باید حتماً فرآیند بهروزرسانی را اجرا کنید.

حالا فرض کنید یک دیتابیس 50 ترابایتی جلوی شماست که دائماً در حال تغییر است. در این شرایط، DirectQuery وارد میدان میشود. در این حالت، Power BI دادههای اصلی را درون فایل خود ذخیره نمیکند. فایل گزارش شما بیشتر شامل مدل، روابط و طراحی بصری نمودارها است، نه خود دادهها.
چه اتفاقی میافتد؟
Power BI در این حالت مانند یک مترجم عمل میکند. وقتی کاربر با گزارش تعامل دارد (مثلاً روی یک نمودار کلیک میکند)، Power BI آن تعامل را به یک کوئری مناسب (مثلاً SQL) تبدیل کرده و به سرور داده ارسال میکند. سرور پردازش را انجام میدهد و فقط نتیجه نهایی برای نمایش به Power BI برمیگردد.
پس بسیار مناسب برای دادههای بسیار بزرگ. از آنجا که دادهها مستقیماً از منبع خوانده میشوند، اطلاعات معمولاً بهروزتر از حالت Import هستند و نیاز به فرآیند بروزرسانی دورهای وجود ندارد.
اما یک سؤال مهم پیش میآید: اگر گلوگاه سیستم، خودِ سرور داده یا کوئریهای بهینهنشده باشد چه؟
در چنین شرایطی، دیگر نمیتوان با اطمینان گفت «DirectQuery برای دادههای بزرگ بسیار مناسب است». اگر دیتابیس کند باشد، ایندکسها درست طراحی نشده باشند یا کوئریها سنگین و غیربهینه باشند، هر کلیک کاربر در داشبورد میتواند به یک انتظار طولانی تبدیل شود. در واقع در این حالت، داشبورد شما فقط آینهای از همان کندی در سمت دیتابیس خواهد بود.

ر بسیاری از سازمانهای بزرگ، تیم داده از قبل یک مدل تحلیلی استاندارد ساخته است. آنها دادهها را پاکسازی کردهاند، روابط بین جداول را تعریف کردهاند و محاسبات تحلیلی را در یک سرور بوسیلهSQL Server Analysis Services (SSAS) آماده کردهاند.
چه اتفاقی میافتد؟
در این حالت شما به جای ساختن یک مدل جدید، فقط گزارش خود را به آن مدل آماده متصل میکنید. در نتیجه، Power BI بیشتر نقش یک ابزار طراحی گزارش را ایفا میکند.
از مزایای آن میتوان به ایجاد یک منبع حقیقت واحد (Single Source of Truth) در سازمان اشاره کرد . همه گزارشها به یک مدل مشترک متصل میشوند و بنابراین احتمال اختلاف در اعداد و محاسبات بین گزارشهای مختلف بسیار کمتر میشود.
اگر در طراحی داشبورد یاد یک معیار یا جدول مهم برای کسب و کار افتادیم چه می شود ؟؟
امکان تغییر مدل داده در داخل فایل گزارش بسیار محدود است. معمولاً نمیتوانید جدول جدیدی اضافه کنید یا روابط بین جداول را تغییر دهید؛ این تغییرات باید در همان مدل مرکزی انجام شوند.

تا چند سال پیش، شما عملاً باید بین Import و DirectQuery یکی را انتخاب میکردید. اما با معرفی Composite Models این محدودیت از بین رفت.
در این حالت میتوانید در یک مدل واحد، ترکیبی از جداول Import و DirectQuery داشته باشید. برای مثال:
جداول تاریخی بزرگ را به صورت Import نگه دارید تا تحلیلها سریع انجام شوند.
در کنار آن، یک جدول عملیاتی را به صورت DirectQuery نگه دارید تا دادههای جدید تقریباً بهصورت لحظهای قابل مشاهده باشند.
قابلیتی به نام Dual Mode نیز وجود دارد که معمولاً برای جداول Dimension استفاده میشود. در این حالت، Power BI بسته به نوع کوئری تصمیم میگیرد که دادهها را از مدل درون حافظه بخواند یا مستقیماً به منبع DirectQuery مراجعه کند تا بهترین عملکرد ممکن به دست آید.
اگر سرعت تحلیل برای شما مهمتر است، Import معمولاً بهترین انتخاب است ولی اگر حجم داده بسیار بزرگ است یا دادهها دائماً تغییر میکنند، DirectQuery یا مدلهای ترکیبی میتوانند گزینه مناسبتری باشند.