@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.
Files changed (193) hide show
  1. package/.claude-plugin/plugin.json +8 -0
  2. package/.mcp.json +25 -0
  3. package/AGENTS.md +244 -0
  4. package/CHANGELOG.md +265 -0
  5. package/LICENSE +21 -0
  6. package/README.md +211 -0
  7. package/bin/build-plugin.js +30 -0
  8. package/bin/cli.js +1064 -0
  9. package/bin/commands/add.js +533 -0
  10. package/bin/commands/add.test.js +77 -0
  11. package/bin/commands/build-desktop.js +166 -0
  12. package/bin/commands/changelog.js +443 -0
  13. package/bin/commands/diff.js +325 -0
  14. package/bin/commands/lint.js +419 -0
  15. package/bin/commands/lint.test.js +103 -0
  16. package/bin/commands/mcp-setup.js +246 -0
  17. package/bin/commands/pull.js +287 -0
  18. package/bin/commands/pull.test.js +36 -0
  19. package/bin/commands/push.js +231 -0
  20. package/bin/commands/push.test.js +14 -0
  21. package/bin/commands/search.js +344 -0
  22. package/bin/commands/search.test.js +115 -0
  23. package/bin/commands/setup.js +545 -0
  24. package/bin/commands/setup.test.js +46 -0
  25. package/bin/commands/sync-profile.js +405 -0
  26. package/bin/commands/sync-profile.test.js +14 -0
  27. package/bin/commands/sync-source.js +418 -0
  28. package/bin/commands/sync-source.test.js +14 -0
  29. package/bin/commands/watch.js +206 -0
  30. package/bin/lib/generators/claude-plugin.js +266 -0
  31. package/bin/lib/generators/claude-plugin.test.js +110 -0
  32. package/bin/lib/generators/index.js +116 -0
  33. package/bin/lib/generators/shared.js +282 -0
  34. package/bin/lib/licensing/index.js +35 -0
  35. package/bin/lib/licensing/storage.js +364 -0
  36. package/bin/lib/licensing/storage.test.js +55 -0
  37. package/bin/lib/licensing/validator.js +213 -0
  38. package/bin/lib/licensing/validator.test.js +137 -0
  39. package/bin/lib/microsoft-mcp.js +176 -0
  40. package/bin/lib/microsoft-mcp.test.js +106 -0
  41. package/bin/lib/skills.js +84 -0
  42. package/bin/mcp/powerbi-modeling-launcher.js +38 -0
  43. package/bin/postinstall.js +44 -0
  44. package/bin/utils/errors.js +159 -0
  45. package/bin/utils/git.js +298 -0
  46. package/bin/utils/logger.js +142 -0
  47. package/bin/utils/mcp-detect.js +274 -0
  48. package/bin/utils/mcp-detect.test.js +105 -0
  49. package/bin/utils/pbix.js +305 -0
  50. package/bin/utils/pbix.test.js +37 -0
  51. package/bin/utils/profiles.js +312 -0
  52. package/bin/utils/projects.js +168 -0
  53. package/bin/utils/readline.js +206 -0
  54. package/bin/utils/readline.test.js +47 -0
  55. package/bin/utils/tui.js +314 -0
  56. package/bin/utils/tui.test.js +127 -0
  57. package/commands/contributions.md +265 -0
  58. package/commands/data-model-design.md +468 -0
  59. package/commands/dax-doctor.md +248 -0
  60. package/commands/fabric-scripts.md +452 -0
  61. package/commands/migration-assistant.md +290 -0
  62. package/commands/model-documenter.md +242 -0
  63. package/commands/pbi-connect.md +239 -0
  64. package/commands/project-kickoff.md +905 -0
  65. package/commands/report-layout.md +296 -0
  66. package/commands/rls-design.md +533 -0
  67. package/commands/theme-tweaker.md +624 -0
  68. package/config.example.json +23 -0
  69. package/config.json +23 -0
  70. package/desktop-extension/manifest.json +37 -0
  71. package/desktop-extension/package.json +10 -0
  72. package/desktop-extension/server.js +95 -0
  73. package/docs/openrouter-free-models.md +92 -0
  74. package/library/examples/README.md +151 -0
  75. package/library/examples/finance-reporting/README.md +351 -0
  76. package/library/examples/finance-reporting/data-model.md +267 -0
  77. package/library/examples/finance-reporting/measures.dax +557 -0
  78. package/library/examples/hr-analytics/README.md +371 -0
  79. package/library/examples/hr-analytics/data-model.md +315 -0
  80. package/library/examples/hr-analytics/measures.dax +460 -0
  81. package/library/examples/marketing-analytics/README.md +37 -0
  82. package/library/examples/marketing-analytics/data-model.md +62 -0
  83. package/library/examples/marketing-analytics/measures.dax +110 -0
  84. package/library/examples/retail-analytics/README.md +439 -0
  85. package/library/examples/retail-analytics/data-model.md +288 -0
  86. package/library/examples/retail-analytics/measures.dax +481 -0
  87. package/library/examples/supply-chain/README.md +37 -0
  88. package/library/examples/supply-chain/data-model.md +69 -0
  89. package/library/examples/supply-chain/measures.dax +77 -0
  90. package/library/examples/udf-library/README.md +228 -0
  91. package/library/examples/udf-library/functions.dax +571 -0
  92. package/library/snippets/dax/README.md +292 -0
  93. package/library/snippets/dax/business-domains.md +576 -0
  94. package/library/snippets/dax/calculate-patterns.md +276 -0
  95. package/library/snippets/dax/calculation-groups.md +489 -0
  96. package/library/snippets/dax/error-handling.md +495 -0
  97. package/library/snippets/dax/iterators-and-aggregations.md +474 -0
  98. package/library/snippets/dax/kpis-and-metrics.md +293 -0
  99. package/library/snippets/dax/rankings-and-topn.md +235 -0
  100. package/library/snippets/dax/security-patterns.md +413 -0
  101. package/library/snippets/dax/text-and-formatting.md +316 -0
  102. package/library/snippets/dax/time-intelligence.md +196 -0
  103. package/library/snippets/dax/user-defined-functions.md +477 -0
  104. package/library/snippets/dax/virtual-tables.md +546 -0
  105. package/library/snippets/excel-formulas/README.md +84 -0
  106. package/library/snippets/excel-formulas/aggregations.md +330 -0
  107. package/library/snippets/excel-formulas/dates-and-times.md +361 -0
  108. package/library/snippets/excel-formulas/dynamic-arrays.md +314 -0
  109. package/library/snippets/excel-formulas/lookups.md +169 -0
  110. package/library/snippets/excel-formulas/text-functions.md +363 -0
  111. package/library/snippets/governance/naming-conventions.md +97 -0
  112. package/library/snippets/governance/review-checklists.md +107 -0
  113. package/library/snippets/power-query/README.md +389 -0
  114. package/library/snippets/power-query/api-integration.md +707 -0
  115. package/library/snippets/power-query/connections.md +434 -0
  116. package/library/snippets/power-query/data-cleaning.md +298 -0
  117. package/library/snippets/power-query/error-handling.md +526 -0
  118. package/library/snippets/power-query/parameters.md +350 -0
  119. package/library/snippets/power-query/performance.md +506 -0
  120. package/library/snippets/power-query/transformations.md +330 -0
  121. package/library/snippets/report-design/accessibility.md +78 -0
  122. package/library/snippets/report-design/chart-selection.md +54 -0
  123. package/library/snippets/report-design/layout-patterns.md +87 -0
  124. package/library/templates/data-models/README.md +93 -0
  125. package/library/templates/data-models/finance-model.md +627 -0
  126. package/library/templates/data-models/retail-star-schema.md +473 -0
  127. package/library/templates/excel/README.md +83 -0
  128. package/library/templates/excel/budget-tracker.md +432 -0
  129. package/library/templates/excel/data-entry-form.md +533 -0
  130. package/library/templates/power-bi/README.md +72 -0
  131. package/library/templates/power-bi/finance-report.md +449 -0
  132. package/library/templates/power-bi/kpi-scorecard.md +461 -0
  133. package/library/templates/power-bi/sales-dashboard.md +281 -0
  134. package/library/themes/excel/README.md +436 -0
  135. package/library/themes/power-bi/README.md +271 -0
  136. package/library/themes/power-bi/accessible.json +307 -0
  137. package/library/themes/power-bi/bi-superpowers-default.json +858 -0
  138. package/library/themes/power-bi/corporate-blue.json +291 -0
  139. package/library/themes/power-bi/dark-mode.json +291 -0
  140. package/library/themes/power-bi/minimal.json +292 -0
  141. package/library/themes/power-bi/print-friendly.json +309 -0
  142. package/package.json +93 -0
  143. package/skills/contributions/SKILL.md +267 -0
  144. package/skills/data-model-design/SKILL.md +470 -0
  145. package/skills/data-modeling/SKILL.md +254 -0
  146. package/skills/data-quality/SKILL.md +664 -0
  147. package/skills/dax/SKILL.md +708 -0
  148. package/skills/dax-doctor/SKILL.md +250 -0
  149. package/skills/dax-udf/SKILL.md +489 -0
  150. package/skills/deployment/SKILL.md +320 -0
  151. package/skills/excel-formulas/SKILL.md +463 -0
  152. package/skills/fabric-scripts/SKILL.md +454 -0
  153. package/skills/fast-standard/SKILL.md +509 -0
  154. package/skills/governance/SKILL.md +205 -0
  155. package/skills/migration-assistant/SKILL.md +292 -0
  156. package/skills/model-documenter/SKILL.md +244 -0
  157. package/skills/pbi-connect/SKILL.md +241 -0
  158. package/skills/power-query/SKILL.md +406 -0
  159. package/skills/project-kickoff/SKILL.md +907 -0
  160. package/skills/query-performance/SKILL.md +480 -0
  161. package/skills/report-design/SKILL.md +207 -0
  162. package/skills/report-layout/SKILL.md +298 -0
  163. package/skills/rls-design/SKILL.md +535 -0
  164. package/skills/semantic-model/SKILL.md +237 -0
  165. package/skills/testing-validation/SKILL.md +643 -0
  166. package/skills/theme-tweaker/SKILL.md +626 -0
  167. package/src/content/base.md +237 -0
  168. package/src/content/mcp-requirements.json +69 -0
  169. package/src/content/routing.md +203 -0
  170. package/src/content/skills/contributions.md +259 -0
  171. package/src/content/skills/data-model-design.md +462 -0
  172. package/src/content/skills/data-modeling.md +246 -0
  173. package/src/content/skills/data-quality.md +656 -0
  174. package/src/content/skills/dax-doctor.md +242 -0
  175. package/src/content/skills/dax-udf.md +481 -0
  176. package/src/content/skills/dax.md +700 -0
  177. package/src/content/skills/deployment.md +312 -0
  178. package/src/content/skills/excel-formulas.md +455 -0
  179. package/src/content/skills/fabric-scripts.md +446 -0
  180. package/src/content/skills/fast-standard.md +501 -0
  181. package/src/content/skills/governance.md +197 -0
  182. package/src/content/skills/migration-assistant.md +284 -0
  183. package/src/content/skills/model-documenter.md +236 -0
  184. package/src/content/skills/pbi-connect.md +233 -0
  185. package/src/content/skills/power-query.md +398 -0
  186. package/src/content/skills/project-kickoff.md +899 -0
  187. package/src/content/skills/query-performance.md +472 -0
  188. package/src/content/skills/report-design.md +199 -0
  189. package/src/content/skills/report-layout.md +290 -0
  190. package/src/content/skills/rls-design.md +527 -0
  191. package/src/content/skills/semantic-model.md +229 -0
  192. package/src/content/skills/testing-validation.md +635 -0
  193. 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)