Window Columns به Perspective اضافه شد
خلاصهٔ کاملتر
تو پولریکوئست ۳۲۰۷ پروژهٔ Perspective، نویسنده (texodus) قابلیت Window Columns رو اضافه کرده و همون روز مرجش کرده. این تغییر همزمان موتور اصلی، سرورهای مجازی یعنی DuckDB و ClickHouse و Polars، و رابط کاربری perspective-viewer رو پوشش میده؛ یعنی مهم نیست داده از کجا میاد، رفتار همهجا یکسانه.
منطق کار اینه که تو ViewConfig یک فیلد جدید به اسم windows اضافه شده. برای هر ستون مشتقشده میگی روی کدوم ستون کار کنه، با چه تابعی (sum، avg، count، min، max، stddev، var، lag/lead، diff، rate، ema) و روی چه پنجرهای: rows (تعداد ردیف)، range (بازهٔ عددی یا زمانی) یا حالت cumulative. دو گزینهٔ اختیاری partition_by و order_by هم برای گروهبندی و ترتیب هست.
مثلاً برای میانگین متحرک ۱۰ ردیف آخر روی ستون Sales، کل تعریف همینه:
{
"columns": ["10-tick avg Sales"],
"windows": {
"10-tick avg Sales": {
"column": "Sales",
"aggregate": "avg",
"rows": 10
}
}
}اگه به جای rows مقدار range بدی، پنجره بر اساس بازه حساب میشه (مثلاً ۵۰۰۰ برای پنج ثانیه)، و اگه هیچکدوم رو ندی و فقط order_by بذاری، خروجی یک جمع تجمعی میشه.
به گفتهٔ نویسنده، Window Columnها دقیقاً مثل Expression Columnها رفتار میکنن؛ یعنی مرتبسازی، فیلتر، پیوت و حتی transitionهای آپدیت زنده روشون کار میکنه و لازم نیست داده رو بیرون از موتور آماده کنی. این PR ایشوی قدیمی ۵۰۴ رو میبنده و یک باگ جانبی هم درست کرده: خروجی گرفتن PerspectiveWidget به HTML استاتیک که خراب بود، حالا بههمراه تست درست شده.
نکات کلیدی:
- فیلد windows تو ViewConfig ستونهای پنجرهای میسازه، بدون نیاز به پیشپردازش بیرونی.
- توابع پشتیبانیشده: sum، avg، count، min، max، stddev، var، lag/lead، diff، rate و ema.
- پنجره میتونه بر اساس تعداد ردیف (rows)، بازه (range) یا تجمعی (cumulative) باشه، با partition_by و order_by اختیاری.
- پشتیبانی همزمان از موتور اصلی، DuckDB، ClickHouse، Polars و رابط perspective-viewer.




