@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,449 @@
|
|
|
1
|
+
# Finance Report Template
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
A financial reporting dashboard for P&L analysis, budget variance tracking, and financial KPIs. Designed for CFOs, controllers, and finance teams requiring accurate, auditable financial insights.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Target Audience
|
|
10
|
+
|
|
11
|
+
- Chief Financial Officers
|
|
12
|
+
- Controllers
|
|
13
|
+
- Financial Analysts
|
|
14
|
+
- Budget Managers
|
|
15
|
+
- Board of Directors
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Data Requirements
|
|
20
|
+
|
|
21
|
+
### Required Tables
|
|
22
|
+
|
|
23
|
+
| Table | Description | Key Columns |
|
|
24
|
+
|-------|-------------|-------------|
|
|
25
|
+
| **FactGL** | General Ledger transactions | TransactionID, Date, AccountID, Amount, DebitCredit, JournalEntry |
|
|
26
|
+
| **DimAccount** | Chart of Accounts | AccountID, AccountName, AccountType, AccountGroup, ParentAccount, IsBS, IsPL |
|
|
27
|
+
| **DimDate** | Date dimension | Date, Year, FiscalYear, FiscalQuarter, FiscalMonth, Period, IsActual |
|
|
28
|
+
| **DimCostCenter** | Cost centers | CostCenterID, Name, Department, Division, Manager |
|
|
29
|
+
| **DimScenario** | Budget/Actual/Forecast | ScenarioID, ScenarioName (Actual, Budget, Forecast, Prior Year) |
|
|
30
|
+
|
|
31
|
+
### Optional Tables
|
|
32
|
+
|
|
33
|
+
| Table | Description | Use Case |
|
|
34
|
+
|-------|-------------|----------|
|
|
35
|
+
| **FactBudget** | Budget line items | Budget vs Actual analysis |
|
|
36
|
+
| **DimProject** | Project tracking | Project-based P&L |
|
|
37
|
+
| **FactCashFlow** | Cash flow data | Cash flow statement |
|
|
38
|
+
| **DimEntity** | Legal entities | Multi-company consolidation |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Account Hierarchy
|
|
43
|
+
|
|
44
|
+
### Recommended Chart of Accounts Structure
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
1000-1999: Assets
|
|
48
|
+
1000-1099: Cash & Equivalents
|
|
49
|
+
1100-1199: Accounts Receivable
|
|
50
|
+
1200-1299: Inventory
|
|
51
|
+
1300-1399: Prepaid Expenses
|
|
52
|
+
1500-1799: Fixed Assets
|
|
53
|
+
1800-1999: Other Assets
|
|
54
|
+
|
|
55
|
+
2000-2999: Liabilities
|
|
56
|
+
2000-2099: Accounts Payable
|
|
57
|
+
2100-2199: Accrued Expenses
|
|
58
|
+
2200-2299: Short-term Debt
|
|
59
|
+
2500-2799: Long-term Debt
|
|
60
|
+
2800-2999: Other Liabilities
|
|
61
|
+
|
|
62
|
+
3000-3999: Equity
|
|
63
|
+
3000-3099: Common Stock
|
|
64
|
+
3100-3199: Retained Earnings
|
|
65
|
+
3200-3299: Current Year Earnings
|
|
66
|
+
|
|
67
|
+
4000-4999: Revenue
|
|
68
|
+
4000-4099: Product Revenue
|
|
69
|
+
4100-4199: Service Revenue
|
|
70
|
+
4200-4299: Other Revenue
|
|
71
|
+
|
|
72
|
+
5000-5999: Cost of Goods Sold
|
|
73
|
+
5000-5099: Direct Materials
|
|
74
|
+
5100-5199: Direct Labor
|
|
75
|
+
5200-5299: Manufacturing Overhead
|
|
76
|
+
|
|
77
|
+
6000-6999: Operating Expenses
|
|
78
|
+
6000-6099: Salaries & Wages
|
|
79
|
+
6100-6199: Benefits
|
|
80
|
+
6200-6299: Rent & Facilities
|
|
81
|
+
6300-6399: Marketing
|
|
82
|
+
6400-6499: Travel & Entertainment
|
|
83
|
+
6500-6599: Professional Services
|
|
84
|
+
6600-6699: Depreciation
|
|
85
|
+
6700-6799: Other Operating
|
|
86
|
+
|
|
87
|
+
7000-7999: Other Income/Expense
|
|
88
|
+
7000-7099: Interest Income
|
|
89
|
+
7100-7199: Interest Expense
|
|
90
|
+
7200-7299: FX Gains/Losses
|
|
91
|
+
7800-7999: Taxes
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Recommended Measures
|
|
97
|
+
|
|
98
|
+
### Core Financial Metrics
|
|
99
|
+
|
|
100
|
+
```dax
|
|
101
|
+
// Total Amount (respects debit/credit)
|
|
102
|
+
Total Amount =
|
|
103
|
+
SUMX(
|
|
104
|
+
FactGL,
|
|
105
|
+
IF(FactGL[DebitCredit] = "Debit", FactGL[Amount], -FactGL[Amount])
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
// Revenue (credit positive for revenue accounts)
|
|
109
|
+
Revenue =
|
|
110
|
+
CALCULATE(
|
|
111
|
+
-SUM(FactGL[Amount]),
|
|
112
|
+
DimAccount[AccountType] = "Revenue"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
// COGS
|
|
116
|
+
COGS =
|
|
117
|
+
CALCULATE(
|
|
118
|
+
SUM(FactGL[Amount]),
|
|
119
|
+
DimAccount[AccountType] = "COGS"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
// Gross Profit
|
|
123
|
+
Gross Profit =
|
|
124
|
+
[Revenue] - [COGS]
|
|
125
|
+
|
|
126
|
+
// Gross Margin %
|
|
127
|
+
Gross Margin % =
|
|
128
|
+
DIVIDE([Gross Profit], [Revenue])
|
|
129
|
+
|
|
130
|
+
// Operating Expenses
|
|
131
|
+
Operating Expenses =
|
|
132
|
+
CALCULATE(
|
|
133
|
+
SUM(FactGL[Amount]),
|
|
134
|
+
DimAccount[AccountType] = "Operating Expense"
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
// EBITDA
|
|
138
|
+
EBITDA =
|
|
139
|
+
[Gross Profit] - [Operating Expenses] + [Depreciation]
|
|
140
|
+
|
|
141
|
+
// Depreciation
|
|
142
|
+
Depreciation =
|
|
143
|
+
CALCULATE(
|
|
144
|
+
SUM(FactGL[Amount]),
|
|
145
|
+
DimAccount[AccountGroup] = "Depreciation"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
// Net Income
|
|
149
|
+
Net Income =
|
|
150
|
+
[Revenue] - [COGS] - [Operating Expenses] - [Interest Expense] - [Tax Expense]
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Budget Variance
|
|
154
|
+
|
|
155
|
+
```dax
|
|
156
|
+
// Budget Amount
|
|
157
|
+
Budget Amount =
|
|
158
|
+
CALCULATE(
|
|
159
|
+
[Total Amount],
|
|
160
|
+
DimScenario[ScenarioName] = "Budget"
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
// Actual Amount
|
|
164
|
+
Actual Amount =
|
|
165
|
+
CALCULATE(
|
|
166
|
+
[Total Amount],
|
|
167
|
+
DimScenario[ScenarioName] = "Actual"
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
// Variance to Budget
|
|
171
|
+
Variance $ =
|
|
172
|
+
[Actual Amount] - [Budget Amount]
|
|
173
|
+
|
|
174
|
+
// Variance % (favorable for revenue, unfavorable for expense)
|
|
175
|
+
Variance % =
|
|
176
|
+
VAR _Actual = [Actual Amount]
|
|
177
|
+
VAR _Budget = [Budget Amount]
|
|
178
|
+
VAR _Variance = _Actual - _Budget
|
|
179
|
+
RETURN
|
|
180
|
+
IF(
|
|
181
|
+
SELECTEDVALUE(DimAccount[AccountType]) IN {"Revenue"},
|
|
182
|
+
DIVIDE(_Variance, ABS(_Budget)), // Positive is good
|
|
183
|
+
DIVIDE(-_Variance, ABS(_Budget)) // Negative is good for expenses
|
|
184
|
+
)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Period Comparisons
|
|
188
|
+
|
|
189
|
+
```dax
|
|
190
|
+
// Prior Year
|
|
191
|
+
Prior Year =
|
|
192
|
+
CALCULATE(
|
|
193
|
+
[Total Amount],
|
|
194
|
+
SAMEPERIODLASTYEAR(DimDate[Date]),
|
|
195
|
+
DimScenario[ScenarioName] = "Actual"
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
// YoY Change
|
|
199
|
+
YoY Change =
|
|
200
|
+
[Actual Amount] - [Prior Year]
|
|
201
|
+
|
|
202
|
+
// YoY Change %
|
|
203
|
+
YoY % =
|
|
204
|
+
DIVIDE([YoY Change], ABS([Prior Year]))
|
|
205
|
+
|
|
206
|
+
// MTD Actual
|
|
207
|
+
MTD =
|
|
208
|
+
TOTALMTD([Total Amount], DimDate[Date])
|
|
209
|
+
|
|
210
|
+
// QTD Actual
|
|
211
|
+
QTD =
|
|
212
|
+
TOTALQTD([Total Amount], DimDate[Date])
|
|
213
|
+
|
|
214
|
+
// YTD Actual
|
|
215
|
+
YTD =
|
|
216
|
+
TOTALYTD([Total Amount], DimDate[Date])
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Financial Ratios
|
|
220
|
+
|
|
221
|
+
```dax
|
|
222
|
+
// Current Ratio
|
|
223
|
+
Current Ratio =
|
|
224
|
+
DIVIDE(
|
|
225
|
+
CALCULATE([Total Amount], DimAccount[AccountGroup] = "Current Assets"),
|
|
226
|
+
CALCULATE(-[Total Amount], DimAccount[AccountGroup] = "Current Liabilities")
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
// Debt to Equity
|
|
230
|
+
Debt to Equity =
|
|
231
|
+
DIVIDE(
|
|
232
|
+
CALCULATE(-[Total Amount], DimAccount[AccountType] = "Liability"),
|
|
233
|
+
CALCULATE(-[Total Amount], DimAccount[AccountType] = "Equity")
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
// Operating Margin
|
|
237
|
+
Operating Margin =
|
|
238
|
+
DIVIDE([EBITDA], [Revenue])
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Page Structure
|
|
244
|
+
|
|
245
|
+
### Page 1: Executive Summary
|
|
246
|
+
|
|
247
|
+
**Purpose:** Month-end snapshot for leadership
|
|
248
|
+
|
|
249
|
+
| Visual | Position | Content |
|
|
250
|
+
|--------|----------|---------|
|
|
251
|
+
| Card | Top row | Revenue, Net Income, EBITDA, Operating Margin |
|
|
252
|
+
| KPI | Second row | Each metric vs Budget with variance indicator |
|
|
253
|
+
| Waterfall | Middle-left | P&L waterfall: Revenue to Net Income |
|
|
254
|
+
| Line Chart | Middle-right | Monthly trend: Revenue, EBITDA, Net Income |
|
|
255
|
+
| Matrix | Bottom | Department summary: Budget, Actual, Variance |
|
|
256
|
+
|
|
257
|
+
### Page 2: Profit & Loss Statement
|
|
258
|
+
|
|
259
|
+
**Purpose:** Detailed P&L with drill-down capability
|
|
260
|
+
|
|
261
|
+
| Visual | Position | Content |
|
|
262
|
+
|--------|----------|---------|
|
|
263
|
+
| Matrix | Full page | P&L structure with: |
|
|
264
|
+
| | | - Rows: Account hierarchy (expandable) |
|
|
265
|
+
| | | - Columns: Current Month, YTD, Budget, Variance, Prior Year |
|
|
266
|
+
| | | - Conditional formatting on variances |
|
|
267
|
+
|
|
268
|
+
**P&L Structure:**
|
|
269
|
+
```
|
|
270
|
+
Revenue
|
|
271
|
+
- Product Revenue
|
|
272
|
+
- Service Revenue
|
|
273
|
+
= Total Revenue
|
|
274
|
+
Cost of Goods Sold
|
|
275
|
+
- Direct Materials
|
|
276
|
+
- Direct Labor
|
|
277
|
+
- Manufacturing Overhead
|
|
278
|
+
= Total COGS
|
|
279
|
+
= Gross Profit
|
|
280
|
+
Operating Expenses
|
|
281
|
+
- Salaries & Wages
|
|
282
|
+
- Benefits
|
|
283
|
+
- Rent & Facilities
|
|
284
|
+
- Marketing
|
|
285
|
+
- Travel & Entertainment
|
|
286
|
+
- Professional Services
|
|
287
|
+
- Depreciation
|
|
288
|
+
- Other Operating
|
|
289
|
+
= Total Operating Expenses
|
|
290
|
+
= Operating Income (EBIT)
|
|
291
|
+
Other Income/Expense
|
|
292
|
+
- Interest Income
|
|
293
|
+
- Interest Expense
|
|
294
|
+
- FX Gains/Losses
|
|
295
|
+
= Total Other
|
|
296
|
+
= Income Before Tax
|
|
297
|
+
- Tax Expense
|
|
298
|
+
= Net Income
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Page 3: Budget Analysis
|
|
302
|
+
|
|
303
|
+
**Purpose:** Detailed variance analysis
|
|
304
|
+
|
|
305
|
+
| Visual | Position | Content |
|
|
306
|
+
|--------|----------|---------|
|
|
307
|
+
| Decomposition Tree | Top-left | Variance drivers by category |
|
|
308
|
+
| Clustered Bar | Top-right | Top 10 favorable/unfavorable variances |
|
|
309
|
+
| Line Chart | Middle | Budget vs Actual trend by month |
|
|
310
|
+
| Matrix | Bottom | Cost center detail with variance % |
|
|
311
|
+
|
|
312
|
+
### Page 4: Balance Sheet
|
|
313
|
+
|
|
314
|
+
**Purpose:** Balance sheet snapshot
|
|
315
|
+
|
|
316
|
+
| Visual | Position | Content |
|
|
317
|
+
|--------|----------|---------|
|
|
318
|
+
| Matrix | Left (50%) | Assets hierarchy with current/prior balances |
|
|
319
|
+
| Matrix | Right (50%) | Liabilities & Equity hierarchy |
|
|
320
|
+
| Card row | Bottom | Key ratios: Current Ratio, Debt/Equity, Working Capital |
|
|
321
|
+
|
|
322
|
+
### Page 5: Cash Flow
|
|
323
|
+
|
|
324
|
+
**Purpose:** Cash flow analysis (if data available)
|
|
325
|
+
|
|
326
|
+
| Visual | Position | Content |
|
|
327
|
+
|--------|----------|---------|
|
|
328
|
+
| Waterfall | Top | Cash flow waterfall: Operating, Investing, Financing |
|
|
329
|
+
| Line Chart | Middle | Cash balance trend |
|
|
330
|
+
| Table | Bottom | Detailed cash movements |
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Visual Specifications
|
|
335
|
+
|
|
336
|
+
### Financial Color Palette
|
|
337
|
+
|
|
338
|
+
| Purpose | Color | Usage |
|
|
339
|
+
|---------|-------|-------|
|
|
340
|
+
| Actual | #1B1B1B | Current period actuals |
|
|
341
|
+
| Budget | #6B6B6B | Budget/Plan figures |
|
|
342
|
+
| Prior Year | #A0A0A0 | Historical comparison |
|
|
343
|
+
| Favorable | #2E7D32 | Positive variance (context-dependent) |
|
|
344
|
+
| Unfavorable | #C62828 | Negative variance |
|
|
345
|
+
| Highlight | #1565C0 | Selected items |
|
|
346
|
+
|
|
347
|
+
### Conditional Formatting
|
|
348
|
+
|
|
349
|
+
**Variance columns:**
|
|
350
|
+
```
|
|
351
|
+
IF variance favorable (revenue up, expense down):
|
|
352
|
+
Background: #E8F5E9 (light green)
|
|
353
|
+
Font color: #2E7D32
|
|
354
|
+
|
|
355
|
+
IF variance unfavorable:
|
|
356
|
+
Background: #FFEBEE (light red)
|
|
357
|
+
Font color: #C62828
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Materiality threshold:**
|
|
361
|
+
```
|
|
362
|
+
Only highlight variances > $10,000 or > 5%
|
|
363
|
+
Small variances: neutral formatting
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Number Formatting
|
|
367
|
+
|
|
368
|
+
| Metric Type | Format | Example |
|
|
369
|
+
|-------------|--------|---------|
|
|
370
|
+
| Currency | $#,##0 | $1,234,567 |
|
|
371
|
+
| Currency (thousands) | $#,##0,"K" | $1,235K |
|
|
372
|
+
| Currency (millions) | $#,##0.0,,"M" | $1.2M |
|
|
373
|
+
| Percentage | 0.0% | 12.5% |
|
|
374
|
+
| Variance % | +0.0%;-0.0% | +5.2% or -3.1% |
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Security Considerations
|
|
379
|
+
|
|
380
|
+
### Row-Level Security
|
|
381
|
+
|
|
382
|
+
```dax
|
|
383
|
+
// Cost Center RLS
|
|
384
|
+
[CostCenterAccess] =
|
|
385
|
+
VAR UserEmail = USERPRINCIPALNAME()
|
|
386
|
+
VAR UserCostCenters =
|
|
387
|
+
CALCULATETABLE(
|
|
388
|
+
VALUES(SecurityTable[CostCenterID]),
|
|
389
|
+
SecurityTable[UserEmail] = UserEmail
|
|
390
|
+
)
|
|
391
|
+
RETURN
|
|
392
|
+
DimCostCenter[CostCenterID] IN UserCostCenters
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Sensitive Data Handling
|
|
396
|
+
|
|
397
|
+
- Salary details: Restrict to HR and Finance leadership
|
|
398
|
+
- Board materials: Separate workspace with limited access
|
|
399
|
+
- Forecast data: Limit to planning team until published
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## Audit Trail
|
|
404
|
+
|
|
405
|
+
### Data Lineage Documentation
|
|
406
|
+
|
|
407
|
+
Include hidden page or documentation showing:
|
|
408
|
+
- Data source connections
|
|
409
|
+
- Last refresh timestamp
|
|
410
|
+
- ETL job status
|
|
411
|
+
- Data quality metrics
|
|
412
|
+
|
|
413
|
+
```dax
|
|
414
|
+
// Last Refresh Timestamp
|
|
415
|
+
Last Refresh =
|
|
416
|
+
NOW()
|
|
417
|
+
|
|
418
|
+
// Record Count
|
|
419
|
+
Total GL Records =
|
|
420
|
+
COUNTROWS(FactGL)
|
|
421
|
+
|
|
422
|
+
// Date Range
|
|
423
|
+
Data From = MIN(FactGL[Date])
|
|
424
|
+
Data To = MAX(FactGL[Date])
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Implementation Checklist
|
|
430
|
+
|
|
431
|
+
- [ ] Validate Chart of Accounts mapping
|
|
432
|
+
- [ ] Confirm fiscal calendar alignment
|
|
433
|
+
- [ ] Build account hierarchy in DimAccount
|
|
434
|
+
- [ ] Create scenario dimension (Actual, Budget, Forecast)
|
|
435
|
+
- [ ] Implement sign convention (debit/credit handling)
|
|
436
|
+
- [ ] Build P&L matrix with proper account ordering
|
|
437
|
+
- [ ] Apply materiality thresholds for variance highlighting
|
|
438
|
+
- [ ] Configure RLS for cost center security
|
|
439
|
+
- [ ] Add data quality indicators
|
|
440
|
+
- [ ] Test month-end close scenarios
|
|
441
|
+
- [ ] Document variance explanations workflow
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## Related Resources
|
|
446
|
+
|
|
447
|
+
- [Account Hierarchy Patterns](../../snippets/data-modeling/)
|
|
448
|
+
- [Financial DAX Patterns](../../snippets/dax/)
|
|
449
|
+
- [Corporate Blue Theme](../../styles/power-bi/corporate-blue.json)
|