از مدل تا صفحهای که مدیرعامل میخواند
مدل آماده است؛ حالا شیت Dash را طراحی میکنیم. قاعده: پیش از ساختن، روی کاغذ یک طرح بکشید که به سؤالهای مدیرعامل جواب دهد. هر جزئی که به سؤالی جواب نمیدهد، حذف شود؛ حتی اگر زیبا باشد.
طرح صفحه (A4 افقی، راستبهچپ)
| ناحیه | جزء | منبع |
|---|---|---|
| ردیف بالا | چهار کارت: فروش ماه، رشد نسبت به ماه قبل، قیمت متوسط هر متر، تعداد مشتری | CUBEVALUE |
| میانهی راست | Combo: فروش ماهانه (ستون) و قیمت هر متر (خط، محور دوم) | Pivot ۱ |
| میانهی چپ | Bar افقی ده طرح پرفروش، مرتب نزولی | Pivot ۳ |
| پایین | سهم استانها (Bar، نه Pie پانزدهبرشی) و جدول نمایندگان با Sparkline | Pivot ۲ و فرمول |
| ستون کناری | Slicerهای ماه (YM)، استان، شانه و مجموعه | متصل به همهی Pivotها |
کارتها با CUBEVALUE
چون داده در Data Model است، کارتها را میتوان مستقیم با توابع Cube ساخت؛ Slicerها هم بهعنوان آرگومان پاس داده میشوند و هر کلیک روی آنها کارتها را فیلتر میکند:
C3: =CUBEVALUE("ThisWorkbookDataModel", "[Measures].[Sales Amount]", Slicer_Province, Slicer_YM)
D3: =CUBEVALUE("ThisWorkbookDataModel", "[Measures].[MoM %]", Slicer_Province, Slicer_YM)
E3: =CUBEVALUE("ThisWorkbookDataModel", "[Measures].[Price per m2]", Slicer_Province, Slicer_YM)
متن کارت فروش (در سلول جدا، فونت بزرگ):
=TEXT(C3/1E9, "#,##0.0") & " میلیارد ریال"
قالب سفارشی سلول رشد:
[Color10]"▲ "0.0%;[Red]"▼ "0.0%;"—"
نام هر Slicer را در Slicer Settings ← Name to use in formulas ببینید. وقتی کاربر «اصفهان» را انتخاب کند، هر سه کارت همان فیلتر را میگیرند.
ظاهر
- حداکثر سه رنگ: یک رنگ اصلی برای داده، خاکستری برای زمینه و جزئیات، و قرمز فقط برای هشدار.
- یک فونت فارسی یکسان در همهی اجزا؛ نمودار اول را قالببندی و با Save as Template (فصل ۷) برای بقیه استفاده کنید.
- Gridlines و Headings خاموش، Zoom ثابت و شیت RTL؛ کارت فروش در بالا-راست.
آزمون پیش از تحویل
1. یک CSV ماه جدید در پوشه بیندازید ← Data ← Refresh All ← همهی اجزا بهروز شدند؟
2. Query کنترل کیفیت Sales_Missing_Design خالی است؟
3. کارت فروش = جمع ستون Amount همان ماه در CSV (یک SUM دستی)
4. همهی Slicerها به همهی Pivotها وصلاند؟ (Report Connections)
5. پیشنمایش چاپ: A4 افقی، یک صفحه، Print Area فقط روی داشبورد
6. Protect Sheet روی Dash با مجوز Use PivotTable؛ Slicerها Unlocked
7. Inspect Document روی نسخهای که بیرون از کارخانه میرود
تحویل و نگهداری
یک شیت «راهنما» اضافه کنید: مسیر پوشه، روال ماهانه در سه خط، تعریف هر Measure به زبان ساده («قیمت هر متر = جمع مبلغ تقسیم بر جمع متراژ، نه میانگین قیمتها»)، و نام مسئول فایل. هر ماه پس از Refresh یک PDF با نام Dashboard-1403-05.pdf بگیرید تا تاریخچهی ثابت داشته باشید؛ فایل اکسل همیشه آخرین وضعیت را نشان میدهد.
نکتههایی که کمتر کسی میداند
- برای نمایش زمان آخرین بهروزرسانی، یک Query با
#table({"Refreshed"}, {{DateTime.LocalNow()}})بسازید و در گوشهی داشبورد بارگذاری کنید؛ برخلاف NOW() فقط با Refresh عوض میشود. - CUBEVALUE برخلاف GETPIVOTDATA به هیچ Pivotی وابسته نیست؛ اگر کسی Pivot را جابهجا یا حذف کند، کارتها سالم میمانند.
- بزرگترین مصرفکنندهی حجم Data Model ستونهای متنی پرتنوع مثل شمارهی فاکتور است؛ ستونی که در هیچ گزارشی استفاده نمیشود را در Power Query حذف کنید.
- پیش از ذخیرهی نهایی، همهی Slicerها را Clear Filter کنید؛ فایل با همان فیلتری باز میشود که ذخیره شده و مدیر ممکن است فروش «فقط کاشان» را فروش کل فرض کند.
- اگر CUBEVALUE #N/A داد، نام Measure یا Slicer را با کپی از Slicer Settings بررسی کنید؛ یک فاصلهی اضافه در نام Measure کافی است.