Power BI در مواجهه با مجموعههای بزرگ داده ممکن است دچار کندی اجرا و مصرف بالای حافظه شود. با بهکارگیری توابعی همچون Table.Buffer و Table.Partition در Power Query میتوان سرعت پردازش و کارایی را بهطور قابل توجهی بهبود داد. در این مقاله به شرح کاربرد این توابع، مثالهای عملی و نکات بهینهسازی میپردازیم.
مفهوم کاهش حجم داده در Power BI
Power BI برای هر کوئری در Power Query دادهها را در حافظه میخواند و پردازش میکند. هرچه حجم داده و تعداد مراحل انتقال داده بیشتر باشد، زمان و مصرف حافظه افزایش مییابد. کاهش حجم داده به دو هدف منجر میشود:
- کاهش زمان پردازش کوئری
- بهینهسازی مصرف حافظه
با تکنیکهای مناسب میتوانید هر دو هدف را همزمان محقق کنید.
Table.Buffer در Power Query
Table.Buffer تابعی است که یک کپی از جدول در حافظه (RAM) ایجاد میکند تا عملیات بعدی روی همان کپی انجام شود.
- کاربرد اصلی: جلوگیری از فراخوانی مجدد منبع داده
- مزایا:
- افزایش سرعت پردازش در تکرار عملیات
- ثبات نتایج در هر بار ارزیابی کوئری
مثال عملی
let
Source = Sql.Database("Server", "DB", [Query="SELECT * FROM Sales"]),
Buffered = Table.Buffer(Source),
Filtered = Table.SelectRows(Buffered, each [Quantity] > 100)
in
Filtered
در این مثال، با اعمال Table.Buffer روی دادههای اولیه، مرحلهی فیلتر بهجای ارسال مجدد کوئری به SQL Server روی کپی حافظه انجام میشود.
Table.Partition در Power Query
Table.Partition تابعی است که یک جدول را بر اساس یک ستون یا عبارت شرطی به چند بخش تقسیم میکند.
- کاربرد اصلی: موازیسازی و کنترل بهینهتر حجم داده
- مزایا:
- امکان پردازش همزمان بخشها
- کاهش مصرف حافظه در هر بخش
مثال عملی
let
Source = Csv.Document(File.Contents("LargeData.csv"), [Delimiter=",", Columns=5, Encoding=1252]),
Partitioned = Table.Partition(Source, each Number.Mod([ID], 4)),
ProcessedPartitions = List.Transform(Partitioned, each Table.SelectRows(_, each [Value] > 50)),
Result = Table.Combine(ProcessedPartitions)
in
Result
در این مثال دادهها بر اساس باقیمانده تقسیم بر ۴ بخش شده و روی هر بخش فیلتر جداگانه اعمال میشود.
پیشنهاد مطالعه: ساختارهای داده در Power BI راهنمای کامل لیستها، رکوردها، جداول و توالیها در Power Query
مقایسه Table.Buffer و Table.Partition
ویژگی | Table.Buffer | Table.Partition |
---|---|---|
هدف | جلوگیری از کوئریهای مکرر | تقسیم داده برای پردازش موازی |
مصرف حافظه | افزایش کلی در یک مرحله | پخش شده بین بخشها |
سناریو مناسب | زمانی که چند مرحله بعدی روی یک جدول است | زمانی که حجم داده بسیار بزرگ و قابل تقسیم باشد |
پیچیدگی پیادهسازی | ساده | متوسط تا پیشرفته |
نکات کاربردی برای بهینهسازی داده در Power BI
- مبادله عملیات فیلتر و بارگذاری: ابتدا فیلتر را انجام دهید، سپس Table.Buffer را فراخوانی کنید.
- ترکیب Partition با توابع موازیسازی: اگر منابع سختافزاری اجازه میدهد، بخشها را همزمان پردازش کنید.
- بررسی پرتفوی توابع: از توابع دیگری مثل Table.Split، Table.Combine و List.Buffer برای کنترل بیشتر استفاده کنید.
- مانیتورینگ مصرف حافظه: در Power Query Diagnostics مصرف حافظه هر مرحله را بررسی و بهینهسازی کنید.
نتیجهگیری
استفاده هوشمندانه از Table.Buffer و Table.Partition میتواند پردازش دادههای بزرگ را در Power BI بهینه کند. با جداسازی مراحلی که بیشترین بار را روی حافظه یا منبع داده وارد میکنند، عملکرد گزارشها و داشبوردها تا حد چشمگیری بهبود مییابد.
سوالات متداول (FAQ)
- چه زمانی باید از Table.Buffer استفاده کنم؟
زمانی که چند مرحله پردازشی متوالی دارید و نمیخواهید کوئری اصلی چندین بار اجرا شود. - Table.Partition برای چه سناریویی مناسب است؟
هنگام کار با مجموعههای بزرگ که امکان تقسیم آنها به بخشهای مستقل وجود دارد. - آیا ترکیب هر دو تابع کارایی بیشتری دارد؟
بله، میتوانید ابتدا داده را پارتیشن کنید، سپس هر بخش را بهصورت Buffered پردازش نمایید. - چطور مصرف حافظه را در Power Query مشاهده کنم؟
از Power Query Diagnostics استفاده کنید و در تب Memory Usage میزان مصرف هر قدم را ببینید. - آیا استفاده از این توابع روی همه منابع داده امکانپذیر است؟
اغلب منابع پشتیبانی میشوند اما بر برخی سرویسهای آنلاین مانند Web API محدودیتهایی وجود دارد.
ارتباط و مشاوره
برای اطلاعات بیشتر و مشاوره میتوانید از طریق زیر با ما در ارتباط باشید:
درمورد table partition بیشتر توضیح بدید
مفهوم Table Partition در Power BI
تقسیم جدول به بخشهای منطقی: هر پارتیشن شامل بخشی از دادههای جدول است که میتواند بهصورت مستقل بارگذاری یا بهروزرسانی شود.
افزایش عملکرد: با تقسیم دادهها، Power BI میتواند فقط پارتیشنهای موردنیاز را پردازش کند، که باعث کاهش زمان بارگذاری و مصرف منابع میشود.
پشتیبانی از Refresh جزئی (Incremental Refresh): این قابلیت از پارتیشنها استفاده میکند تا فقط دادههای جدید یا تغییر یافته را بهروزرسانی کند.
روشهای ایجاد پارتیشن
با استفاده از Power Query M:
تابع Table.Partition در Power Query برای تقسیم جدول به چند گروه استفاده میشود.
مثال ساده:
Table.Partition(Source, “Year”, 3, each Number.Mod(_, 3))
این کد جدول را بر اساس ستون “Year” به ۳ گروه تقسیم میکند.
با استفاده از Tabular Editor یا SSMS:
در مدلهای Tabular (مانند Power BI Premium)، میتوان پارتیشنها را با ابزارهایی مثل Tabular Editor یا SQL Server Management Studio مدیریت کرد.
هر پارتیشن میتواند کوئری خاص خود را داشته باشد و مستقل از دیگر پارتیشنها Refresh شود.
پارتیشنهای Hybrid (Hot & Cold):
ترکیبی از Import و DirectQuery برای دادههای قدیمی و جدید.
دادههای اخیر در حالت Import (Hot) و دادههای قدیمی در حالت DirectQuery (Cold) ذخیره میشوند تا عملکرد بهینه شود.
نکات مهم
پارتیشنها در Power BI Desktop بهصورت مستقیم قابل مشاهده نیستند، اما از طریق تنظیمات Incremental Refresh یا ابزارهای خارجی قابل مدیریت هستند.
استفاده نادرست از پارتیشنها ممکن است باعث نتایج اشتباه در گزارشها شود، پس باید با دقت طراحی شوند.