@luquimbo/bi-superpowers 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +8 -0
- package/.mcp.json +25 -0
- package/AGENTS.md +244 -0
- package/CHANGELOG.md +265 -0
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/bin/build-plugin.js +30 -0
- package/bin/cli.js +1064 -0
- package/bin/commands/add.js +533 -0
- package/bin/commands/add.test.js +77 -0
- package/bin/commands/build-desktop.js +166 -0
- package/bin/commands/changelog.js +443 -0
- package/bin/commands/diff.js +325 -0
- package/bin/commands/lint.js +419 -0
- package/bin/commands/lint.test.js +103 -0
- package/bin/commands/mcp-setup.js +246 -0
- package/bin/commands/pull.js +287 -0
- package/bin/commands/pull.test.js +36 -0
- package/bin/commands/push.js +231 -0
- package/bin/commands/push.test.js +14 -0
- package/bin/commands/search.js +344 -0
- package/bin/commands/search.test.js +115 -0
- package/bin/commands/setup.js +545 -0
- package/bin/commands/setup.test.js +46 -0
- package/bin/commands/sync-profile.js +405 -0
- package/bin/commands/sync-profile.test.js +14 -0
- package/bin/commands/sync-source.js +418 -0
- package/bin/commands/sync-source.test.js +14 -0
- package/bin/commands/watch.js +206 -0
- package/bin/lib/generators/claude-plugin.js +266 -0
- package/bin/lib/generators/claude-plugin.test.js +110 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +282 -0
- package/bin/lib/licensing/index.js +35 -0
- package/bin/lib/licensing/storage.js +364 -0
- package/bin/lib/licensing/storage.test.js +55 -0
- package/bin/lib/licensing/validator.js +213 -0
- package/bin/lib/licensing/validator.test.js +137 -0
- package/bin/lib/microsoft-mcp.js +176 -0
- package/bin/lib/microsoft-mcp.test.js +106 -0
- package/bin/lib/skills.js +84 -0
- package/bin/mcp/powerbi-modeling-launcher.js +38 -0
- package/bin/postinstall.js +44 -0
- package/bin/utils/errors.js +159 -0
- package/bin/utils/git.js +298 -0
- package/bin/utils/logger.js +142 -0
- package/bin/utils/mcp-detect.js +274 -0
- package/bin/utils/mcp-detect.test.js +105 -0
- package/bin/utils/pbix.js +305 -0
- package/bin/utils/pbix.test.js +37 -0
- package/bin/utils/profiles.js +312 -0
- package/bin/utils/projects.js +168 -0
- package/bin/utils/readline.js +206 -0
- package/bin/utils/readline.test.js +47 -0
- package/bin/utils/tui.js +314 -0
- package/bin/utils/tui.test.js +127 -0
- package/commands/contributions.md +265 -0
- package/commands/data-model-design.md +468 -0
- package/commands/dax-doctor.md +248 -0
- package/commands/fabric-scripts.md +452 -0
- package/commands/migration-assistant.md +290 -0
- package/commands/model-documenter.md +242 -0
- package/commands/pbi-connect.md +239 -0
- package/commands/project-kickoff.md +905 -0
- package/commands/report-layout.md +296 -0
- package/commands/rls-design.md +533 -0
- package/commands/theme-tweaker.md +624 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +37 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +95 -0
- package/docs/openrouter-free-models.md +92 -0
- package/library/examples/README.md +151 -0
- package/library/examples/finance-reporting/README.md +351 -0
- package/library/examples/finance-reporting/data-model.md +267 -0
- package/library/examples/finance-reporting/measures.dax +557 -0
- package/library/examples/hr-analytics/README.md +371 -0
- package/library/examples/hr-analytics/data-model.md +315 -0
- package/library/examples/hr-analytics/measures.dax +460 -0
- package/library/examples/marketing-analytics/README.md +37 -0
- package/library/examples/marketing-analytics/data-model.md +62 -0
- package/library/examples/marketing-analytics/measures.dax +110 -0
- package/library/examples/retail-analytics/README.md +439 -0
- package/library/examples/retail-analytics/data-model.md +288 -0
- package/library/examples/retail-analytics/measures.dax +481 -0
- package/library/examples/supply-chain/README.md +37 -0
- package/library/examples/supply-chain/data-model.md +69 -0
- package/library/examples/supply-chain/measures.dax +77 -0
- package/library/examples/udf-library/README.md +228 -0
- package/library/examples/udf-library/functions.dax +571 -0
- package/library/snippets/dax/README.md +292 -0
- package/library/snippets/dax/business-domains.md +576 -0
- package/library/snippets/dax/calculate-patterns.md +276 -0
- package/library/snippets/dax/calculation-groups.md +489 -0
- package/library/snippets/dax/error-handling.md +495 -0
- package/library/snippets/dax/iterators-and-aggregations.md +474 -0
- package/library/snippets/dax/kpis-and-metrics.md +293 -0
- package/library/snippets/dax/rankings-and-topn.md +235 -0
- package/library/snippets/dax/security-patterns.md +413 -0
- package/library/snippets/dax/text-and-formatting.md +316 -0
- package/library/snippets/dax/time-intelligence.md +196 -0
- package/library/snippets/dax/user-defined-functions.md +477 -0
- package/library/snippets/dax/virtual-tables.md +546 -0
- package/library/snippets/excel-formulas/README.md +84 -0
- package/library/snippets/excel-formulas/aggregations.md +330 -0
- package/library/snippets/excel-formulas/dates-and-times.md +361 -0
- package/library/snippets/excel-formulas/dynamic-arrays.md +314 -0
- package/library/snippets/excel-formulas/lookups.md +169 -0
- package/library/snippets/excel-formulas/text-functions.md +363 -0
- package/library/snippets/governance/naming-conventions.md +97 -0
- package/library/snippets/governance/review-checklists.md +107 -0
- package/library/snippets/power-query/README.md +389 -0
- package/library/snippets/power-query/api-integration.md +707 -0
- package/library/snippets/power-query/connections.md +434 -0
- package/library/snippets/power-query/data-cleaning.md +298 -0
- package/library/snippets/power-query/error-handling.md +526 -0
- package/library/snippets/power-query/parameters.md +350 -0
- package/library/snippets/power-query/performance.md +506 -0
- package/library/snippets/power-query/transformations.md +330 -0
- package/library/snippets/report-design/accessibility.md +78 -0
- package/library/snippets/report-design/chart-selection.md +54 -0
- package/library/snippets/report-design/layout-patterns.md +87 -0
- package/library/templates/data-models/README.md +93 -0
- package/library/templates/data-models/finance-model.md +627 -0
- package/library/templates/data-models/retail-star-schema.md +473 -0
- package/library/templates/excel/README.md +83 -0
- package/library/templates/excel/budget-tracker.md +432 -0
- package/library/templates/excel/data-entry-form.md +533 -0
- package/library/templates/power-bi/README.md +72 -0
- package/library/templates/power-bi/finance-report.md +449 -0
- package/library/templates/power-bi/kpi-scorecard.md +461 -0
- package/library/templates/power-bi/sales-dashboard.md +281 -0
- package/library/themes/excel/README.md +436 -0
- package/library/themes/power-bi/README.md +271 -0
- package/library/themes/power-bi/accessible.json +307 -0
- package/library/themes/power-bi/bi-superpowers-default.json +858 -0
- package/library/themes/power-bi/corporate-blue.json +291 -0
- package/library/themes/power-bi/dark-mode.json +291 -0
- package/library/themes/power-bi/minimal.json +292 -0
- package/library/themes/power-bi/print-friendly.json +309 -0
- package/package.json +93 -0
- package/skills/contributions/SKILL.md +267 -0
- package/skills/data-model-design/SKILL.md +470 -0
- package/skills/data-modeling/SKILL.md +254 -0
- package/skills/data-quality/SKILL.md +664 -0
- package/skills/dax/SKILL.md +708 -0
- package/skills/dax-doctor/SKILL.md +250 -0
- package/skills/dax-udf/SKILL.md +489 -0
- package/skills/deployment/SKILL.md +320 -0
- package/skills/excel-formulas/SKILL.md +463 -0
- package/skills/fabric-scripts/SKILL.md +454 -0
- package/skills/fast-standard/SKILL.md +509 -0
- package/skills/governance/SKILL.md +205 -0
- package/skills/migration-assistant/SKILL.md +292 -0
- package/skills/model-documenter/SKILL.md +244 -0
- package/skills/pbi-connect/SKILL.md +241 -0
- package/skills/power-query/SKILL.md +406 -0
- package/skills/project-kickoff/SKILL.md +907 -0
- package/skills/query-performance/SKILL.md +480 -0
- package/skills/report-design/SKILL.md +207 -0
- package/skills/report-layout/SKILL.md +298 -0
- package/skills/rls-design/SKILL.md +535 -0
- package/skills/semantic-model/SKILL.md +237 -0
- package/skills/testing-validation/SKILL.md +643 -0
- package/skills/theme-tweaker/SKILL.md +626 -0
- package/src/content/base.md +237 -0
- package/src/content/mcp-requirements.json +69 -0
- package/src/content/routing.md +203 -0
- package/src/content/skills/contributions.md +259 -0
- package/src/content/skills/data-model-design.md +462 -0
- package/src/content/skills/data-modeling.md +246 -0
- package/src/content/skills/data-quality.md +656 -0
- package/src/content/skills/dax-doctor.md +242 -0
- package/src/content/skills/dax-udf.md +481 -0
- package/src/content/skills/dax.md +700 -0
- package/src/content/skills/deployment.md +312 -0
- package/src/content/skills/excel-formulas.md +455 -0
- package/src/content/skills/fabric-scripts.md +446 -0
- package/src/content/skills/fast-standard.md +501 -0
- package/src/content/skills/governance.md +197 -0
- package/src/content/skills/migration-assistant.md +284 -0
- package/src/content/skills/model-documenter.md +236 -0
- package/src/content/skills/pbi-connect.md +233 -0
- package/src/content/skills/power-query.md +398 -0
- package/src/content/skills/project-kickoff.md +899 -0
- package/src/content/skills/query-performance.md +472 -0
- package/src/content/skills/report-design.md +199 -0
- package/src/content/skills/report-layout.md +290 -0
- package/src/content/skills/rls-design.md +527 -0
- package/src/content/skills/semantic-model.md +229 -0
- package/src/content/skills/testing-validation.md +635 -0
- package/src/content/skills/theme-tweaker.md +618 -0
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
# KPI Scorecard Template
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
A strategic KPI monitoring dashboard for tracking organizational performance against targets. Designed for balanced scorecard methodology with support for multiple perspectives and drill-down capabilities.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Target Audience
|
|
10
|
+
|
|
11
|
+
- C-Suite Executives
|
|
12
|
+
- Department Heads
|
|
13
|
+
- Strategy & Operations Teams
|
|
14
|
+
- Board of Directors
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Data Requirements
|
|
19
|
+
|
|
20
|
+
### Required Tables
|
|
21
|
+
|
|
22
|
+
| Table | Description | Key Columns |
|
|
23
|
+
|-------|-------------|-------------|
|
|
24
|
+
| **FactKPI** | KPI values by period | KPIID, Date, ActualValue, TargetValue, PriorValue |
|
|
25
|
+
| **DimKPI** | KPI definitions | KPIID, KPIName, Description, Unit, Format, Polarity, Perspective |
|
|
26
|
+
| **DimDate** | Date dimension | Date, Year, Quarter, Month, Period |
|
|
27
|
+
| **DimPerspective** | Balanced Scorecard perspectives | PerspectiveID, Name, SortOrder |
|
|
28
|
+
| **DimOwner** | KPI owners | OwnerID, Name, Department, Email |
|
|
29
|
+
|
|
30
|
+
### Optional Tables
|
|
31
|
+
|
|
32
|
+
| Table | Description | Use Case |
|
|
33
|
+
|-------|-------------|----------|
|
|
34
|
+
| **FactKPICommentary** | Period-end comments | Narrative explanations |
|
|
35
|
+
| **DimInitiative** | Strategic initiatives | Linking KPIs to projects |
|
|
36
|
+
| **FactMilestone** | Initiative milestones | Progress tracking |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## KPI Framework
|
|
41
|
+
|
|
42
|
+
### Balanced Scorecard Perspectives
|
|
43
|
+
|
|
44
|
+
| Perspective | Focus | Example KPIs |
|
|
45
|
+
|-------------|-------|--------------|
|
|
46
|
+
| **Financial** | Shareholder value | Revenue Growth, EBITDA Margin, ROI |
|
|
47
|
+
| **Customer** | Customer satisfaction | NPS, Customer Retention, CSAT |
|
|
48
|
+
| **Internal Process** | Operational excellence | Cycle Time, Quality Rate, Utilization |
|
|
49
|
+
| **Learning & Growth** | Organizational capacity | Employee Engagement, Training Hours, Innovation Index |
|
|
50
|
+
|
|
51
|
+
### KPI Definition Structure
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
DimKPI columns:
|
|
55
|
+
- KPIID: Unique identifier
|
|
56
|
+
- KPIName: Display name
|
|
57
|
+
- Description: Full description for tooltips
|
|
58
|
+
- Unit: "Currency", "Percent", "Number", "Days", "Score"
|
|
59
|
+
- Format: DAX format string
|
|
60
|
+
- Polarity: "Higher is Better" or "Lower is Better"
|
|
61
|
+
- Perspective: Link to DimPerspective
|
|
62
|
+
- Frequency: "Monthly", "Quarterly", "Annual"
|
|
63
|
+
- DataSource: Origin system
|
|
64
|
+
- Formula: Calculation methodology
|
|
65
|
+
- Owner: Responsible person
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Recommended Measures
|
|
71
|
+
|
|
72
|
+
### Core KPI Metrics
|
|
73
|
+
|
|
74
|
+
```dax
|
|
75
|
+
// Actual Value
|
|
76
|
+
Actual =
|
|
77
|
+
SUM(FactKPI[ActualValue])
|
|
78
|
+
|
|
79
|
+
// Target Value
|
|
80
|
+
Target =
|
|
81
|
+
SUM(FactKPI[TargetValue])
|
|
82
|
+
|
|
83
|
+
// Prior Period Value
|
|
84
|
+
Prior =
|
|
85
|
+
SUM(FactKPI[PriorValue])
|
|
86
|
+
|
|
87
|
+
// Achievement %
|
|
88
|
+
Achievement % =
|
|
89
|
+
VAR _Actual = [Actual]
|
|
90
|
+
VAR _Target = [Target]
|
|
91
|
+
VAR _Polarity = SELECTEDVALUE(DimKPI[Polarity])
|
|
92
|
+
RETURN
|
|
93
|
+
IF(
|
|
94
|
+
_Polarity = "Lower is Better",
|
|
95
|
+
DIVIDE(_Target, _Actual), // Inverse for "lower is better"
|
|
96
|
+
DIVIDE(_Actual, _Target)
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
// Variance to Target
|
|
100
|
+
Variance =
|
|
101
|
+
[Actual] - [Target]
|
|
102
|
+
|
|
103
|
+
// Variance %
|
|
104
|
+
Variance % =
|
|
105
|
+
DIVIDE([Variance], ABS([Target]))
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Status Indicators
|
|
109
|
+
|
|
110
|
+
```dax
|
|
111
|
+
// KPI Status (Traffic Light)
|
|
112
|
+
KPI Status =
|
|
113
|
+
VAR _Achievement = [Achievement %]
|
|
114
|
+
VAR _Polarity = SELECTEDVALUE(DimKPI[Polarity])
|
|
115
|
+
RETURN
|
|
116
|
+
SWITCH(
|
|
117
|
+
TRUE(),
|
|
118
|
+
_Achievement >= 1, "Green", // On or above target
|
|
119
|
+
_Achievement >= 0.9, "Yellow", // Within 10% of target
|
|
120
|
+
_Achievement < 0.9, "Red" // More than 10% below
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
// Status Icon
|
|
124
|
+
Status Icon =
|
|
125
|
+
SWITCH(
|
|
126
|
+
[KPI Status],
|
|
127
|
+
"Green", UNICHAR(9679), // Filled circle
|
|
128
|
+
"Yellow", UNICHAR(9681), // Half circle
|
|
129
|
+
"Red", UNICHAR(9675) // Empty circle
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
// Trend Arrow
|
|
133
|
+
Trend Arrow =
|
|
134
|
+
VAR _Current = [Actual]
|
|
135
|
+
VAR _Prior = [Prior]
|
|
136
|
+
VAR _Change = _Current - _Prior
|
|
137
|
+
RETURN
|
|
138
|
+
SWITCH(
|
|
139
|
+
TRUE(),
|
|
140
|
+
_Change > 0, UNICHAR(9650), // Up arrow
|
|
141
|
+
_Change < 0, UNICHAR(9660), // Down arrow
|
|
142
|
+
UNICHAR(9644) // Horizontal line
|
|
143
|
+
)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Period Intelligence
|
|
147
|
+
|
|
148
|
+
```dax
|
|
149
|
+
// Current Period Actual
|
|
150
|
+
Current Period =
|
|
151
|
+
CALCULATE(
|
|
152
|
+
[Actual],
|
|
153
|
+
LASTDATE(DimDate[Date])
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
// YTD Actual
|
|
157
|
+
YTD =
|
|
158
|
+
CALCULATE(
|
|
159
|
+
[Actual],
|
|
160
|
+
DATESYTD(DimDate[Date])
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
// Full Year Target
|
|
164
|
+
FY Target =
|
|
165
|
+
CALCULATE(
|
|
166
|
+
[Target],
|
|
167
|
+
DATESYTD(DimDate[Date])
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
// Projected Year-End (Linear)
|
|
171
|
+
Projected FY =
|
|
172
|
+
VAR _YTD = [YTD]
|
|
173
|
+
VAR _DaysElapsed = DATEDIFF(
|
|
174
|
+
MIN(DATESYTD(DimDate[Date])),
|
|
175
|
+
MAX(DATESYTD(DimDate[Date])),
|
|
176
|
+
DAY
|
|
177
|
+
) + 1
|
|
178
|
+
VAR _DaysInYear = 365
|
|
179
|
+
RETURN
|
|
180
|
+
DIVIDE(_YTD * _DaysInYear, _DaysElapsed)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Scoring
|
|
184
|
+
|
|
185
|
+
```dax
|
|
186
|
+
// Weighted Score (for overall scorecard)
|
|
187
|
+
Weighted Score =
|
|
188
|
+
SUMX(
|
|
189
|
+
DimKPI,
|
|
190
|
+
[Achievement %] * DimKPI[Weight]
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
// Perspective Score
|
|
194
|
+
Perspective Score =
|
|
195
|
+
CALCULATE(
|
|
196
|
+
AVERAGEX(DimKPI, [Achievement %]),
|
|
197
|
+
ALLEXCEPT(DimKPI, DimKPI[Perspective])
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
// Overall Scorecard Score
|
|
201
|
+
Overall Score =
|
|
202
|
+
AVERAGEX(
|
|
203
|
+
VALUES(DimPerspective[Name]),
|
|
204
|
+
[Perspective Score]
|
|
205
|
+
)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Page Structure
|
|
211
|
+
|
|
212
|
+
### Page 1: Executive Scorecard
|
|
213
|
+
|
|
214
|
+
**Purpose:** Single-page strategic overview
|
|
215
|
+
|
|
216
|
+
| Visual | Position | Content |
|
|
217
|
+
|--------|----------|---------|
|
|
218
|
+
| Card | Top-center | Overall Score with gauge visual |
|
|
219
|
+
| Multi-row Card | Top row | 4 Perspective scores (Financial, Customer, Process, L&G) |
|
|
220
|
+
| Matrix | Main area | KPI summary by perspective: |
|
|
221
|
+
| | | Columns: KPI Name, Actual, Target, Achievement %, Status, Trend |
|
|
222
|
+
| | | Rows grouped by Perspective |
|
|
223
|
+
| | | Conditional formatting on Status column |
|
|
224
|
+
|
|
225
|
+
**Layout concept:**
|
|
226
|
+
```
|
|
227
|
+
+--------------------------------------------------+
|
|
228
|
+
| OVERALL SCORE: 87% |
|
|
229
|
+
+----------+----------+----------+----------+------+
|
|
230
|
+
| Finance | Customer | Process | Learning | ... |
|
|
231
|
+
| 92% | 85% | 88% | 82% | |
|
|
232
|
+
+----------+----------+----------+----------+------+
|
|
233
|
+
| |
|
|
234
|
+
| PERSPECTIVE: Financial |
|
|
235
|
+
| +--------------------------------------------+ |
|
|
236
|
+
| | Revenue Growth | $2.1M | $2.0M |105%|G | |
|
|
237
|
+
| | EBITDA Margin | 18% | 20% | 90%|Y | |
|
|
238
|
+
| | ROI | 15% | 12% |125%|G | |
|
|
239
|
+
| +--------------------------------------------+ |
|
|
240
|
+
| |
|
|
241
|
+
| PERSPECTIVE: Customer |
|
|
242
|
+
| +--------------------------------------------+ |
|
|
243
|
+
| | NPS | 45 | 50 | 90%|Y | |
|
|
244
|
+
| | Retention Rate | 88% | 85% |104%|G | |
|
|
245
|
+
| +--------------------------------------------+ |
|
|
246
|
+
| ... |
|
|
247
|
+
+--------------------------------------------------+
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Page 2: Financial Perspective
|
|
251
|
+
|
|
252
|
+
**Purpose:** Detailed financial KPI analysis
|
|
253
|
+
|
|
254
|
+
| Visual | Position | Content |
|
|
255
|
+
|--------|----------|---------|
|
|
256
|
+
| Cards | Top row | Key financial KPIs with YTD values |
|
|
257
|
+
| Line Chart | Middle-left | Monthly trend with target line |
|
|
258
|
+
| Waterfall | Middle-right | YTD performance bridge |
|
|
259
|
+
| Table | Bottom | Detailed monthly breakdown |
|
|
260
|
+
|
|
261
|
+
### Page 3: Customer Perspective
|
|
262
|
+
|
|
263
|
+
**Purpose:** Customer-centric KPIs
|
|
264
|
+
|
|
265
|
+
| Visual | Position | Content |
|
|
266
|
+
|--------|----------|---------|
|
|
267
|
+
| Gauge | Top row | NPS, CSAT, Retention Rate |
|
|
268
|
+
| Line Chart | Middle | Trend over time with benchmarks |
|
|
269
|
+
| Bar Chart | Bottom-left | KPI by segment/region |
|
|
270
|
+
| Commentary | Bottom-right | Latest period narrative |
|
|
271
|
+
|
|
272
|
+
### Page 4: Process Perspective
|
|
273
|
+
|
|
274
|
+
**Purpose:** Operational efficiency metrics
|
|
275
|
+
|
|
276
|
+
| Visual | Position | Content |
|
|
277
|
+
|--------|----------|---------|
|
|
278
|
+
| KPI cards | Top | Cycle time, Quality, Throughput |
|
|
279
|
+
| Control Chart | Middle | Process stability indicators |
|
|
280
|
+
| Pareto | Bottom-left | Top issues/defects |
|
|
281
|
+
| Table | Bottom-right | Process metrics by department |
|
|
282
|
+
|
|
283
|
+
### Page 5: Learning & Growth
|
|
284
|
+
|
|
285
|
+
**Purpose:** People and capability metrics
|
|
286
|
+
|
|
287
|
+
| Visual | Position | Content |
|
|
288
|
+
|--------|----------|---------|
|
|
289
|
+
| Cards | Top | Engagement Score, Training Hours, Turnover |
|
|
290
|
+
| Clustered Bar | Middle | Metrics by department |
|
|
291
|
+
| Line Chart | Bottom-left | Trend analysis |
|
|
292
|
+
| Matrix | Bottom-right | Initiative progress |
|
|
293
|
+
|
|
294
|
+
### Page 6: KPI Detail (Drillthrough)
|
|
295
|
+
|
|
296
|
+
**Purpose:** Deep dive on individual KPI
|
|
297
|
+
|
|
298
|
+
| Visual | Position | Content |
|
|
299
|
+
|--------|----------|---------|
|
|
300
|
+
| Header | Top | KPI Name, Description, Owner |
|
|
301
|
+
| KPI Visual | Top-right | Large KPI card with target |
|
|
302
|
+
| Line Chart | Middle | Full history with target band |
|
|
303
|
+
| Table | Bottom-left | Monthly data table |
|
|
304
|
+
| Text | Bottom-right | Commentary and action items |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## Visual Specifications
|
|
309
|
+
|
|
310
|
+
### Scorecard Color Palette
|
|
311
|
+
|
|
312
|
+
| Status | Color | Hex | Usage |
|
|
313
|
+
|--------|-------|-----|-------|
|
|
314
|
+
| Green (On Track) | Green | #2E7D32 | >= 100% of target |
|
|
315
|
+
| Yellow (At Risk) | Amber | #F9A825 | 90-99% of target |
|
|
316
|
+
| Red (Off Track) | Red | #C62828 | < 90% of target |
|
|
317
|
+
| Neutral | Gray | #757575 | No target or N/A |
|
|
318
|
+
|
|
319
|
+
### Conditional Formatting Rules
|
|
320
|
+
|
|
321
|
+
**Status column (background):**
|
|
322
|
+
```
|
|
323
|
+
Green: #E8F5E9
|
|
324
|
+
Yellow: #FFF8E1
|
|
325
|
+
Red: #FFEBEE
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Achievement % (data bars):**
|
|
329
|
+
```
|
|
330
|
+
Minimum: 0%
|
|
331
|
+
Maximum: 150%
|
|
332
|
+
Positive bar: #4CAF50
|
|
333
|
+
Negative bar: #EF5350
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### KPI Card Design
|
|
337
|
+
|
|
338
|
+
```
|
|
339
|
+
+------------------------+
|
|
340
|
+
| [Icon] Revenue Growth |
|
|
341
|
+
| |
|
|
342
|
+
| $2.1M [G] |
|
|
343
|
+
| Target: $2.0M |
|
|
344
|
+
| +5.2% vs PY |
|
|
345
|
+
+------------------------+
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Interactive Features
|
|
351
|
+
|
|
352
|
+
### Drillthrough Configuration
|
|
353
|
+
|
|
354
|
+
From any KPI in the matrix, enable drillthrough to:
|
|
355
|
+
- KPI Detail page (full history and analysis)
|
|
356
|
+
- Initiative page (related strategic projects)
|
|
357
|
+
|
|
358
|
+
### Tooltip Enhancement
|
|
359
|
+
|
|
360
|
+
Custom tooltip page showing:
|
|
361
|
+
- KPI definition and formula
|
|
362
|
+
- Monthly spark trend
|
|
363
|
+
- Owner contact information
|
|
364
|
+
- Last updated timestamp
|
|
365
|
+
|
|
366
|
+
### Bookmarks
|
|
367
|
+
|
|
368
|
+
- "Current Month" - Latest period only
|
|
369
|
+
- "YTD View" - Year-to-date aggregation
|
|
370
|
+
- "Perspective Focus" - One perspective at a time
|
|
371
|
+
- "Print View" - Simplified layout for export
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Alerting Integration
|
|
376
|
+
|
|
377
|
+
### Power Automate Triggers
|
|
378
|
+
|
|
379
|
+
Configure alerts when:
|
|
380
|
+
- KPI moves from Green to Yellow or Red
|
|
381
|
+
- Achievement drops below 85%
|
|
382
|
+
- Target is achieved for the first time
|
|
383
|
+
- Commentary is added or updated
|
|
384
|
+
|
|
385
|
+
### Email Distribution
|
|
386
|
+
|
|
387
|
+
```
|
|
388
|
+
Subject: [KPI Alert] {KPIName} Status Changed to {Status}
|
|
389
|
+
|
|
390
|
+
Body:
|
|
391
|
+
KPI: {KPIName}
|
|
392
|
+
Current Value: {Actual}
|
|
393
|
+
Target: {Target}
|
|
394
|
+
Achievement: {Achievement%}
|
|
395
|
+
Owner: {Owner}
|
|
396
|
+
|
|
397
|
+
View Dashboard: [Link]
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Data Refresh Considerations
|
|
403
|
+
|
|
404
|
+
### Refresh Frequency
|
|
405
|
+
|
|
406
|
+
| KPI Type | Refresh | Notes |
|
|
407
|
+
|----------|---------|-------|
|
|
408
|
+
| Financial | Monthly | After month-end close |
|
|
409
|
+
| Operational | Daily/Weekly | Automated from source systems |
|
|
410
|
+
| Survey-based | Quarterly | After survey completion |
|
|
411
|
+
| Annual | Annually | Strategic planning cycle |
|
|
412
|
+
|
|
413
|
+
### Incremental Refresh
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
Configure incremental refresh for FactKPI:
|
|
417
|
+
- Archive data older than 3 years
|
|
418
|
+
- Incremental: Last 12 months
|
|
419
|
+
- Always refresh: Current month
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Implementation Checklist
|
|
425
|
+
|
|
426
|
+
- [ ] Define KPI catalog with owners
|
|
427
|
+
- [ ] Establish target-setting methodology
|
|
428
|
+
- [ ] Configure DimKPI with all metadata
|
|
429
|
+
- [ ] Build calculation logic respecting polarity
|
|
430
|
+
- [ ] Design status thresholds (90%/100%)
|
|
431
|
+
- [ ] Create conditional formatting rules
|
|
432
|
+
- [ ] Configure drillthrough pages
|
|
433
|
+
- [ ] Set up Power Automate alerts
|
|
434
|
+
- [ ] Document data sources and refresh schedule
|
|
435
|
+
- [ ] Train KPI owners on commentary workflow
|
|
436
|
+
- [ ] Establish governance for target updates
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## Governance
|
|
441
|
+
|
|
442
|
+
### Change Control
|
|
443
|
+
|
|
444
|
+
- Target changes require approval from Strategy team
|
|
445
|
+
- KPI additions/removals go through quarterly review
|
|
446
|
+
- Formula changes documented with effective date
|
|
447
|
+
|
|
448
|
+
### Data Quality
|
|
449
|
+
|
|
450
|
+
Include data quality indicators:
|
|
451
|
+
- Freshness: Days since last update
|
|
452
|
+
- Completeness: % of expected data points present
|
|
453
|
+
- Accuracy: Variance from source system validation
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## Related Resources
|
|
458
|
+
|
|
459
|
+
- [DAX Patterns](../../snippets/dax/)
|
|
460
|
+
- [Conditional Formatting Best Practices](../../skills/data-modeling/SKILL.md)
|
|
461
|
+
- [Corporate Blue Theme](../../styles/power-bi/corporate-blue.json)
|