بازگشت به کارها

کارهای منتخب — 02 / ویژوال‌های سفارشی

نمودارهایی که مجبور شدم خودم بنویسم.

Power BI با مجموعه‌ای ثابت از نمودارها می‌آید. وقتی آنکه لازم داشتم میانشان نبود، خودم نوشتمش — تا اینجا شش تا: یک هیت‌مپِ نقشهٔ بدن، یک ویژوالِ میله‌ای، یک گِیج، یک ستونِ تغییرِ انباشته و کارت‌های KPI، همه با دست در TypeScript نوشته شده. پایین‌تر بازسازی شده، زنده، تا بتوانی با آن‌ها بازی کنی.

6 ویژوال 13 ناحیهٔ بدن گِیج · میله · انباشته · کارت TypeScript · SVG 0 کتابخانهٔ نمودار

هر عددی درون این ویجت‌ها دادهٔ نمونه است — ساختگی، برای نشان‌دادنِ رفتارِ هر ویژوال، نه اعداد واقعی.

زندههمان هیت‌مپی که پایین‌تر است — گرم‌تر یعنی آسیبِ بیشتر.

به‌اختصار

یک ویژوالِ سفارشی، برنامهٔ کوچکی است که Power BI درون گزارش اجرا می‌کند: داده و اندازهٔ کادر را به کدت می‌دهد، و کدِ تو پیکسل‌ها را می‌کشد.

کد است، نه یک قالب

یک کلاسِ TypeScript که یک اینترفیس را پیاده می‌کند. نه کشیدن‌ورهاکردن — هر پیکسل به‌عمد کشیده شده.

01 · IVisual · TypeScript

Power BI داده را به آن می‌دهد

فیلدهایی را که می‌پذیری اعلام می‌کنی؛ میزبان داده را متناسب شکل می‌دهد و در هر تغییر به آن می‌فرستد.

02 · capabilities · dataView

تو پیکسل‌ها را می‌کشی

با داده و viewport، کد چیدمانِ SVG را می‌سازد — میله‌ها، مسیرها، برچسب‌ها، یک پنلِ کاملِ آمار.

03 · SVG · چیدمانِ تو

به‌صورت یک فایل منتشر می‌شود

در یک .pbiviz واحد بسته می‌شود — کد، استایل و آیکون با هم zip شده — و در هر گزارشی import می‌شود.

04 · یک .pbiviz · یک GUID

چطور کار می‌کند

Power BI می‌گوید. کدِ تو می‌کشد.

تمام زندگی‌اش یک حلقه است: یک‌بار ساخته می‌شود، سپس update() در هر تغییرِ داده، اندازه یا تنظیم فراخوانده می‌شود — بخوان، دوباره بکِش. حلقه را اجرا کن

یک‌بار

constructor

میزبان ویژوال را می‌سازد و المانِ DOM را تحویل می‌دهد. تو <svg>‌ات را برپا می‌کنی.

ماشه

تغییرِ داده / اندازه / تنظیم

کسی فیلتر می‌کند، اندازه را عوض می‌کند، یا یک کنترلِ قالب را تنظیم می‌کند.

هر بار

update(options)

میزبان update()‌ات را با optionsِ تازه فرا می‌خواند.

بخوان

options.dataViews[0]

دادهٔ بازچیده‌شده و تنظیماتِ فعلی را بیرون می‌کشی.

بکِش

render() → SVG

بومِ نقاشی را پاک کن، تصویر را در اندازهٔ تازه بچین.

idle

ویژوالِ یک — نقشهٔ آسیبِ بدن

آسیب‌ها، روی بدن نقشه‌برداری‌شده.

دو فیلد به داخل — یک ناحیهٔ بدن و یک شمارِ آسیب — و هر ناحیه روی مقیاسی پنج‌باندی رنگ می‌گیرد، در حالی که پنل آن‌ها را در گروه‌ها جمع می‌کند و بدترین‌ها را برجسته می‌کند. روی یک ناحیه کلیک کن، یا بارِ پرونده‌ها را بکِش

آسیب‌ها بر پایهٔ گروهِ بدن

0
1–5
6–15
16–40
41+
رنگ = شمارِ آسیب‌ها
بارِ پرونده‌ها240 injuries
0کم‌کارپرکار600

باندها: 1–5 · 6–15 · 16–40 · 41+ — همه رنگ‌های پنلِ قالب‌اند. این نمونهٔ اولیه است؛ دوقلوی منتشرشده‌اش bodyInjuryHeatmap پنج باند را با یک گرادیانِ نرمِ min→max جایگزین می‌کند، چپ را از راست تشخیص می‌دهد، و انتخابِ Power BI، هم‌برجسته‌سازی و تولتیپ‌ها را وصل می‌کند.

داده‌ای که پشتش است

دو فیلد به داخل. یک تصویر به بیرون.

اعلام می‌کند چه می‌پذیرد — یک گروه‌بندی، یک سنجه — و Power BI گزارش را به همان dataViewِ categoricalی که دریافت می‌کند بازشکل می‌دهد. ردیف‌ها را روشن/خاموش کن — dataView را ببین

نقش bodyRegion · گروه‌بندی نقش injuryCount · سنجه
ناحیهٔ بدنشمارِ آسیب

dataViewآنچه update() دریافت می‌کند — categorical


          

ویژوالِ دو — ویژوالِ میله‌ای

نمودارِ میله‌ای‌ای که کاری می‌کند که نمونهٔ داخلی نمی‌کند.

برای جزئیاتی که نمودارِ میله‌ایِ داخلی نادیده می‌گیرد — یک سرسطرِ جمعِ کلِ واقعی، فونت‌های خودش، ترازبندی و کادری که می‌توانی شکلش دهی. هرکدام یک کنترل در پنلِ قالب است. پنل را عوض کن — نمودار دنبال می‌کند

قالب · ویژوالِ میله‌ای
سرسطرِ جمعِ کل
نمایش
پیشوند
ترازبندی
کادرِ سرسطر
سبک
ضخامت1.5
شعاع6
رنگ
فونت‌ها و رنگ
اندازهٔ برچسب12
اندازهٔ مقدار13
میله‌ها

پنل از کجا می‌آید

یک کنترل اعلام کن. Power BI پنل را می‌کشد.

پنل را هرگز با دست نمی‌سازی — typeِ هر ویژگی را اعلام می‌کنی، و میزبان کنترل را رندر می‌کند. یک type انتخاب کن

رندر می‌شود به‌شکلِ
Toggle switch

A boolean becomes a switch in the pane, and arrives in your settings model as true / false.

ویژوالِ سه — گِیجِ نیم‌دایره

روی هدف، در یک نگاه.

یک مقدار به‌سوی یک بیشینه پُر می‌شود، از دو هدف می‌گذرد، به یکی از سه ناحیه می‌رسد — عقب، روی مسیر، جلو — و کمان رنگِ آن ناحیه را می‌گیرد. مقدار را بکِش

مقدارِ واقعی62
کمینه 0بیشینه 100
عقب0 – 40
روی مسیر40 – 75
جلو75 – 100

اهداف در 40 و 75 · کمینه/بیشینه، ناحیه‌ها و نشانگرها همه کنترل‌های پنلِ قالب‌اند.

باقیِ قفسه

همان غریزه، چند بارِ دیگر.

دو تای دیگر که جای‌شان را حق دارند — یک ستونِ انباشته که تغییرِ خودش را میان دوره‌ها یادداشت می‌کند، و رشته‌ای از کارت‌های KPI. هر دو زنده. تکانشان بده

ستونِ انباشته + تغییر

v3.5.8 · راهنما · دریل‌داون · دلتاهای تغییر

MultiCard

v1.3.2 · کارت‌های KPI · ردیف یا ستون

تکرار

یک نسخهٔ خوب در واقع شش تاست.

هر انتشار دقیقاً یک چیز را که یک گزارش می‌خواست افزود — و بستهٔ قدیمی هرگز بازنویسی نشد، فقط جایگزین شد. نسخه‌ها را مرور کن

1.6.0Data

Set the Values role to accept a measure or a grouping, so a report author can pick “Don't summarize” and show raw category values instead of a forced sum.

در قالبِ اعداد

خانواده، شمرده‌شده.

6ویژوالِ سفارشی
13ناحیهٔ بدن
5باندِ رنگ
3ناحیهٔ گِیج
4گروهِ ناحیه
6انتشارِ ویژوالِ میله‌ای
1اینترفیس · IVisual
0کتابخانهٔ نمودار

هر دو با SVGِ خام روی APIِ powerbi-visuals کشیده شده‌اند — نه کمک‌کننده‌های نمودارِ D3، نه چارت‌سازیِ شخصِ‌ثالث. هر رنگ، فونت و کادر یک کنترلِ پنلِ قالب است.

© 2026 محسن زارعی طراحی، کدنویسی و منتشرشده به دست خودم بازگشت به بالا ↑