@luquimbo/bi-superpowers 3.1.1 → 4.1.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 (186) hide show
  1. package/.claude-plugin/marketplace.json +5 -3
  2. package/.claude-plugin/plugin.json +28 -2
  3. package/.claude-plugin/skill-manifest.json +22 -6
  4. package/.plugin/plugin.json +1 -1
  5. package/AGENTS.md +52 -36
  6. package/CHANGELOG.md +295 -0
  7. package/README.md +75 -26
  8. package/bin/build-plugin.js +17 -10
  9. package/bin/cli.js +278 -322
  10. package/bin/commands/build-desktop.js +35 -16
  11. package/bin/commands/diff.js +31 -13
  12. package/bin/commands/install.js +93 -72
  13. package/bin/commands/lint.js +40 -26
  14. package/bin/commands/mcp-setup.js +3 -10
  15. package/bin/commands/update-check.js +389 -0
  16. package/bin/lib/agents.js +19 -0
  17. package/bin/lib/generators/claude-plugin.js +144 -6
  18. package/bin/lib/generators/shared.js +29 -33
  19. package/bin/lib/mcp-config.js +191 -16
  20. package/bin/lib/skills.js +115 -27
  21. package/bin/postinstall.js +4 -2
  22. package/bin/utils/mcp-detect.js +2 -2
  23. package/commands/bi-start.md +218 -0
  24. package/commands/pbi-connect.md +43 -65
  25. package/commands/project-kickoff.md +393 -673
  26. package/commands/report-design.md +403 -0
  27. package/desktop-extension/manifest.json +5 -12
  28. package/desktop-extension/server.js +34 -25
  29. package/package.json +6 -10
  30. package/skills/bi-start/SKILL.md +220 -0
  31. package/skills/bi-start/scripts/update-check.js +389 -0
  32. package/skills/pbi-connect/SKILL.md +45 -67
  33. package/skills/pbi-connect/scripts/update-check.js +389 -0
  34. package/skills/project-kickoff/SKILL.md +395 -675
  35. package/skills/project-kickoff/scripts/update-check.js +389 -0
  36. package/skills/report-design/SKILL.md +405 -0
  37. package/skills/report-design/references/cli-commands.md +184 -0
  38. package/skills/report-design/references/cli-setup.md +101 -0
  39. package/skills/report-design/references/close-write-open-pattern.md +80 -0
  40. package/skills/report-design/references/layouts/finance.md +65 -0
  41. package/skills/report-design/references/layouts/generic.md +46 -0
  42. package/skills/report-design/references/layouts/hr.md +48 -0
  43. package/skills/report-design/references/layouts/marketing.md +45 -0
  44. package/skills/report-design/references/layouts/operations.md +44 -0
  45. package/skills/report-design/references/layouts/sales.md +50 -0
  46. package/skills/report-design/references/native-visuals.md +341 -0
  47. package/skills/report-design/references/pbi-desktop-installation.md +87 -0
  48. package/skills/report-design/references/pbir-preview-activation.md +40 -0
  49. package/skills/report-design/references/slicer.md +89 -0
  50. package/skills/report-design/references/textbox.md +101 -0
  51. package/skills/report-design/references/themes/BISuperpowers.json +915 -0
  52. package/skills/report-design/references/troubleshooting.md +135 -0
  53. package/skills/report-design/references/visual-types.md +78 -0
  54. package/skills/report-design/scripts/apply-theme.js +243 -0
  55. package/skills/report-design/scripts/create-visual.js +878 -0
  56. package/skills/report-design/scripts/ensure-pbi-cli.sh +41 -0
  57. package/skills/report-design/scripts/update-check.js +389 -0
  58. package/skills/report-design/scripts/validate-pbir.js +322 -0
  59. package/src/content/base.md +12 -68
  60. package/src/content/mcp-requirements.json +0 -25
  61. package/src/content/routing.md +19 -74
  62. package/src/content/skills/bi-start.md +191 -0
  63. package/src/content/skills/pbi-connect.md +22 -65
  64. package/src/content/skills/project-kickoff.md +372 -673
  65. package/src/content/skills/report-design/SKILL.md +376 -0
  66. package/src/content/skills/report-design/references/cli-commands.md +184 -0
  67. package/src/content/skills/report-design/references/cli-setup.md +101 -0
  68. package/src/content/skills/report-design/references/close-write-open-pattern.md +80 -0
  69. package/src/content/skills/report-design/references/layouts/finance.md +65 -0
  70. package/src/content/skills/report-design/references/layouts/generic.md +46 -0
  71. package/src/content/skills/report-design/references/layouts/hr.md +48 -0
  72. package/src/content/skills/report-design/references/layouts/marketing.md +45 -0
  73. package/src/content/skills/report-design/references/layouts/operations.md +44 -0
  74. package/src/content/skills/report-design/references/layouts/sales.md +50 -0
  75. package/src/content/skills/report-design/references/native-visuals.md +341 -0
  76. package/src/content/skills/report-design/references/pbi-desktop-installation.md +87 -0
  77. package/src/content/skills/report-design/references/pbir-preview-activation.md +40 -0
  78. package/src/content/skills/report-design/references/slicer.md +89 -0
  79. package/src/content/skills/report-design/references/textbox.md +101 -0
  80. package/src/content/skills/report-design/references/themes/BISuperpowers.json +915 -0
  81. package/src/content/skills/report-design/references/troubleshooting.md +135 -0
  82. package/src/content/skills/report-design/references/visual-types.md +78 -0
  83. package/src/content/skills/report-design/scripts/apply-theme.js +243 -0
  84. package/src/content/skills/report-design/scripts/create-visual.js +878 -0
  85. package/src/content/skills/report-design/scripts/ensure-pbi-cli.sh +41 -0
  86. package/src/content/skills/report-design/scripts/validate-pbir.js +322 -0
  87. package/bin/commands/add.js +0 -533
  88. package/bin/commands/add.test.js +0 -77
  89. package/bin/commands/changelog.js +0 -443
  90. package/bin/commands/install.test.js +0 -289
  91. package/bin/commands/lint.test.js +0 -103
  92. package/bin/commands/pull.js +0 -287
  93. package/bin/commands/pull.test.js +0 -36
  94. package/bin/commands/push.js +0 -231
  95. package/bin/commands/push.test.js +0 -14
  96. package/bin/commands/search.js +0 -344
  97. package/bin/commands/search.test.js +0 -115
  98. package/bin/commands/setup.js +0 -545
  99. package/bin/commands/setup.test.js +0 -46
  100. package/bin/commands/sync-profile.js +0 -405
  101. package/bin/commands/sync-profile.test.js +0 -14
  102. package/bin/commands/sync-source.js +0 -418
  103. package/bin/commands/sync-source.test.js +0 -14
  104. package/bin/lib/generators/claude-plugin.test.js +0 -111
  105. package/bin/lib/mcp-config.test.js +0 -310
  106. package/bin/lib/microsoft-mcp.test.js +0 -115
  107. package/bin/utils/errors.js +0 -159
  108. package/bin/utils/git.js +0 -298
  109. package/bin/utils/logger.js +0 -142
  110. package/bin/utils/mcp-detect.test.js +0 -81
  111. package/bin/utils/pbix.js +0 -305
  112. package/bin/utils/pbix.test.js +0 -37
  113. package/bin/utils/profiles.js +0 -312
  114. package/bin/utils/projects.js +0 -169
  115. package/bin/utils/readline.js +0 -206
  116. package/bin/utils/readline.test.js +0 -47
  117. package/bin/utils/tui.test.js +0 -127
  118. package/docs/openrouter-free-models.md +0 -92
  119. package/library/examples/README.md +0 -151
  120. package/library/examples/finance-reporting/README.md +0 -351
  121. package/library/examples/finance-reporting/data-model.md +0 -267
  122. package/library/examples/finance-reporting/measures.dax +0 -557
  123. package/library/examples/hr-analytics/README.md +0 -371
  124. package/library/examples/hr-analytics/data-model.md +0 -315
  125. package/library/examples/hr-analytics/measures.dax +0 -460
  126. package/library/examples/marketing-analytics/README.md +0 -37
  127. package/library/examples/marketing-analytics/data-model.md +0 -62
  128. package/library/examples/marketing-analytics/measures.dax +0 -110
  129. package/library/examples/retail-analytics/README.md +0 -439
  130. package/library/examples/retail-analytics/data-model.md +0 -288
  131. package/library/examples/retail-analytics/measures.dax +0 -481
  132. package/library/examples/supply-chain/README.md +0 -37
  133. package/library/examples/supply-chain/data-model.md +0 -69
  134. package/library/examples/supply-chain/measures.dax +0 -77
  135. package/library/examples/udf-library/README.md +0 -228
  136. package/library/examples/udf-library/functions.dax +0 -571
  137. package/library/snippets/dax/README.md +0 -292
  138. package/library/snippets/dax/business-domains.md +0 -576
  139. package/library/snippets/dax/calculate-patterns.md +0 -276
  140. package/library/snippets/dax/calculation-groups.md +0 -489
  141. package/library/snippets/dax/error-handling.md +0 -495
  142. package/library/snippets/dax/iterators-and-aggregations.md +0 -474
  143. package/library/snippets/dax/kpis-and-metrics.md +0 -293
  144. package/library/snippets/dax/rankings-and-topn.md +0 -235
  145. package/library/snippets/dax/security-patterns.md +0 -413
  146. package/library/snippets/dax/text-and-formatting.md +0 -316
  147. package/library/snippets/dax/time-intelligence.md +0 -196
  148. package/library/snippets/dax/user-defined-functions.md +0 -477
  149. package/library/snippets/dax/virtual-tables.md +0 -546
  150. package/library/snippets/excel-formulas/README.md +0 -84
  151. package/library/snippets/excel-formulas/aggregations.md +0 -330
  152. package/library/snippets/excel-formulas/dates-and-times.md +0 -361
  153. package/library/snippets/excel-formulas/dynamic-arrays.md +0 -314
  154. package/library/snippets/excel-formulas/lookups.md +0 -169
  155. package/library/snippets/excel-formulas/text-functions.md +0 -363
  156. package/library/snippets/governance/naming-conventions.md +0 -97
  157. package/library/snippets/governance/review-checklists.md +0 -107
  158. package/library/snippets/power-query/README.md +0 -389
  159. package/library/snippets/power-query/api-integration.md +0 -707
  160. package/library/snippets/power-query/connections.md +0 -434
  161. package/library/snippets/power-query/data-cleaning.md +0 -298
  162. package/library/snippets/power-query/error-handling.md +0 -526
  163. package/library/snippets/power-query/parameters.md +0 -350
  164. package/library/snippets/power-query/performance.md +0 -506
  165. package/library/snippets/power-query/transformations.md +0 -330
  166. package/library/snippets/report-design/accessibility.md +0 -78
  167. package/library/snippets/report-design/chart-selection.md +0 -54
  168. package/library/snippets/report-design/layout-patterns.md +0 -87
  169. package/library/templates/data-models/README.md +0 -93
  170. package/library/templates/data-models/finance-model.md +0 -627
  171. package/library/templates/data-models/retail-star-schema.md +0 -473
  172. package/library/templates/excel/README.md +0 -83
  173. package/library/templates/excel/budget-tracker.md +0 -432
  174. package/library/templates/excel/data-entry-form.md +0 -533
  175. package/library/templates/power-bi/README.md +0 -72
  176. package/library/templates/power-bi/finance-report.md +0 -449
  177. package/library/templates/power-bi/kpi-scorecard.md +0 -461
  178. package/library/templates/power-bi/sales-dashboard.md +0 -281
  179. package/library/themes/excel/README.md +0 -436
  180. package/library/themes/power-bi/README.md +0 -271
  181. package/library/themes/power-bi/accessible.json +0 -307
  182. package/library/themes/power-bi/bi-superpowers-default.json +0 -858
  183. package/library/themes/power-bi/corporate-blue.json +0 -291
  184. package/library/themes/power-bi/dark-mode.json +0 -291
  185. package/library/themes/power-bi/minimal.json +0 -292
  186. package/library/themes/power-bi/print-friendly.json +0 -309
@@ -1,557 +0,0 @@
1
- // ============================================================================
2
- // FINANCE REPORTING - DAX MEASURE LIBRARY
3
- // ============================================================================
4
- // Comprehensive measures for P&L, Balance Sheet, and Financial Analysis
5
- // All measures follow BI Agent Superpowers naming conventions
6
- // ============================================================================
7
-
8
-
9
- // ----------------------------------------------------------------------------
10
- // BASE SCENARIO MEASURES
11
- // ----------------------------------------------------------------------------
12
-
13
- // Generic amount (all scenarios)
14
- Amount =
15
- SUM(FactFinancials[Amount])
16
-
17
- // Actual only (with sign correction)
18
- Actual =
19
- CALCULATE(
20
- SUMX(
21
- FactFinancials,
22
- FactFinancials[Amount] * RELATED(DimAccount[NaturalSign])
23
- ),
24
- DimScenario[IsActual] = TRUE()
25
- )
26
-
27
- // Budget only
28
- Budget =
29
- CALCULATE(
30
- SUMX(
31
- FactFinancials,
32
- FactFinancials[Amount] * RELATED(DimAccount[NaturalSign])
33
- ),
34
- DimScenario[ScenarioName] = "Budget"
35
- )
36
-
37
- // Forecast only
38
- Forecast =
39
- CALCULATE(
40
- SUMX(
41
- FactFinancials,
42
- FactFinancials[Amount] * RELATED(DimAccount[NaturalSign])
43
- ),
44
- DimScenario[IsForecast] = TRUE()
45
- )
46
-
47
-
48
- // ----------------------------------------------------------------------------
49
- // INCOME STATEMENT - LINE ITEMS
50
- // ----------------------------------------------------------------------------
51
-
52
- Revenue =
53
- CALCULATE(
54
- [Actual],
55
- DimAccount[AccountType] = "Revenue"
56
- )
57
-
58
- COGS =
59
- CALCULATE(
60
- [Actual],
61
- DimAccount[AccountType] = "COGS"
62
- )
63
-
64
- Gross Profit =
65
- [Revenue] - [COGS]
66
-
67
- Operating Expenses =
68
- CALCULATE(
69
- [Actual],
70
- DimAccount[AccountType] = "OpEx"
71
- )
72
-
73
- // EBITDA = Gross Profit - OpEx (before D&A)
74
- EBITDA =
75
- [Gross Profit] - [Operating Expenses]
76
-
77
- // Operating Income (after D&A)
78
- Operating Income =
79
- CALCULATE(
80
- [Actual],
81
- DimAccount[AccountGroup] IN {"Net Revenue", "COGS", "SG&A", "R&D", "D&A"}
82
- )
83
-
84
- Other Income =
85
- CALCULATE(
86
- [Actual],
87
- DimAccount[AccountType] = "OtherIncome"
88
- )
89
-
90
- Other Expense =
91
- CALCULATE(
92
- [Actual],
93
- DimAccount[AccountType] = "OtherExpense"
94
- )
95
-
96
- Interest Expense =
97
- CALCULATE(
98
- [Actual],
99
- DimAccount[AccountSubGroup] = "Interest Expense"
100
- )
101
-
102
- // EBT = Earnings Before Tax
103
- EBT =
104
- [Operating Income] + [Other Income] - [Other Expense]
105
-
106
- Income Tax =
107
- CALCULATE(
108
- [Actual],
109
- DimAccount[AccountType] = "Tax"
110
- )
111
-
112
- Net Income =
113
- [EBT] - [Income Tax]
114
-
115
-
116
- // ----------------------------------------------------------------------------
117
- // INCOME STATEMENT - MARGINS
118
- // ----------------------------------------------------------------------------
119
-
120
- Gross Margin % =
121
- DIVIDE([Gross Profit], [Revenue])
122
-
123
- Operating Margin % =
124
- DIVIDE([Operating Income], [Revenue])
125
-
126
- EBITDA Margin % =
127
- DIVIDE([EBITDA], [Revenue])
128
-
129
- Net Margin % =
130
- DIVIDE([Net Income], [Revenue])
131
-
132
-
133
- // ----------------------------------------------------------------------------
134
- // BUDGET VARIANCE
135
- // ----------------------------------------------------------------------------
136
-
137
- Budget Revenue =
138
- CALCULATE(
139
- [Budget],
140
- DimAccount[AccountType] = "Revenue"
141
- )
142
-
143
- Budget COGS =
144
- CALCULATE(
145
- [Budget],
146
- DimAccount[AccountType] = "COGS"
147
- )
148
-
149
- Budget OpEx =
150
- CALCULATE(
151
- [Budget],
152
- DimAccount[AccountType] = "OpEx"
153
- )
154
-
155
- // Variance = Actual - Budget
156
- Variance =
157
- [Actual] - [Budget]
158
-
159
- Variance % =
160
- DIVIDE([Variance], ABS([Budget]))
161
-
162
- // Revenue variance
163
- Revenue Variance =
164
- [Revenue] - [Budget Revenue]
165
-
166
- Revenue Variance % =
167
- DIVIDE([Revenue Variance], ABS([Budget Revenue]))
168
-
169
- // Expense variance (favorable when under budget)
170
- OpEx Variance =
171
- [Budget OpEx] - [Operating Expenses]
172
-
173
- OpEx Variance % =
174
- DIVIDE([OpEx Variance], ABS([Budget OpEx]))
175
-
176
- // Variance status indicator
177
- Variance Status =
178
- VAR _Variance = [Variance]
179
- VAR _AccountType = SELECTEDVALUE(DimAccount[AccountType])
180
- VAR _IsExpense = _AccountType IN {"COGS", "OpEx", "OtherExpense", "Tax"}
181
- RETURN
182
- SWITCH(
183
- TRUE(),
184
- ISBLANK(_Variance), BLANK(),
185
- ABS(_Variance) < 0.01, "On Plan",
186
- _IsExpense && _Variance < 0, "Favorable",
187
- _IsExpense && _Variance > 0, "Unfavorable",
188
- NOT _IsExpense && _Variance > 0, "Favorable",
189
- "Unfavorable"
190
- )
191
-
192
- // Variance color for conditional formatting
193
- Variance Color =
194
- VAR _Status = [Variance Status]
195
- RETURN
196
- SWITCH(
197
- _Status,
198
- "Favorable", "#166534",
199
- "Unfavorable", "#991B1B",
200
- "On Plan", "#525252",
201
- "#A3A3A3"
202
- )
203
-
204
-
205
- // ----------------------------------------------------------------------------
206
- // YEAR-TO-DATE (YTD)
207
- // ----------------------------------------------------------------------------
208
-
209
- Revenue YTD =
210
- TOTALYTD(
211
- [Revenue],
212
- DimDate[Date],
213
- "6-30" // Fiscal year end (adjust as needed)
214
- )
215
-
216
- Gross Profit YTD =
217
- TOTALYTD([Gross Profit], DimDate[Date], "6-30")
218
-
219
- EBITDA YTD =
220
- TOTALYTD([EBITDA], DimDate[Date], "6-30")
221
-
222
- Net Income YTD =
223
- TOTALYTD([Net Income], DimDate[Date], "6-30")
224
-
225
- Budget YTD =
226
- TOTALYTD([Budget], DimDate[Date], "6-30")
227
-
228
- Variance YTD =
229
- [Actual] - [Budget YTD] // Note: Uses actual which is already YTD in context
230
-
231
-
232
- // ----------------------------------------------------------------------------
233
- // PRIOR YEAR COMPARISON
234
- // ----------------------------------------------------------------------------
235
-
236
- Revenue PY =
237
- CALCULATE(
238
- [Revenue],
239
- SAMEPERIODLASTYEAR(DimDate[Date])
240
- )
241
-
242
- Gross Profit PY =
243
- CALCULATE(
244
- [Gross Profit],
245
- SAMEPERIODLASTYEAR(DimDate[Date])
246
- )
247
-
248
- Net Income PY =
249
- CALCULATE(
250
- [Net Income],
251
- SAMEPERIODLASTYEAR(DimDate[Date])
252
- )
253
-
254
- Revenue YTD PY =
255
- CALCULATE(
256
- [Revenue YTD],
257
- SAMEPERIODLASTYEAR(DimDate[Date])
258
- )
259
-
260
- // Year-over-Year Growth
261
- Revenue YoY % =
262
- VAR _Current = [Revenue]
263
- VAR _PY = [Revenue PY]
264
- RETURN
265
- DIVIDE(_Current - _PY, ABS(_PY))
266
-
267
- Revenue YoY Var =
268
- [Revenue] - [Revenue PY]
269
-
270
- Net Income YoY % =
271
- VAR _Current = [Net Income]
272
- VAR _PY = [Net Income PY]
273
- RETURN
274
- DIVIDE(_Current - _PY, ABS(_PY))
275
-
276
-
277
- // ----------------------------------------------------------------------------
278
- // TRAILING TWELVE MONTHS (TTM)
279
- // ----------------------------------------------------------------------------
280
-
281
- Revenue TTM =
282
- CALCULATE(
283
- [Revenue],
284
- DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -12, MONTH)
285
- )
286
-
287
- Net Income TTM =
288
- CALCULATE(
289
- [Net Income],
290
- DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -12, MONTH)
291
- )
292
-
293
- EBITDA TTM =
294
- CALCULATE(
295
- [EBITDA],
296
- DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -12, MONTH)
297
- )
298
-
299
-
300
- // ----------------------------------------------------------------------------
301
- // BALANCE SHEET ITEMS
302
- // ----------------------------------------------------------------------------
303
-
304
- Total Assets =
305
- CALCULATE(
306
- [Actual],
307
- DimAccount[AccountType] = "Asset",
308
- LASTDATE(DimDate[Date]) // Point-in-time
309
- )
310
-
311
- Current Assets =
312
- CALCULATE(
313
- [Actual],
314
- DimAccount[AccountSubGroup] = "Current Assets",
315
- LASTDATE(DimDate[Date])
316
- )
317
-
318
- Cash =
319
- CALCULATE(
320
- [Actual],
321
- DimAccount[AccountName] = "Cash and Cash Equivalents",
322
- LASTDATE(DimDate[Date])
323
- )
324
-
325
- Accounts Receivable =
326
- CALCULATE(
327
- [Actual],
328
- DimAccount[AccountName] = "Accounts Receivable",
329
- LASTDATE(DimDate[Date])
330
- )
331
-
332
- Inventory =
333
- CALCULATE(
334
- [Actual],
335
- DimAccount[AccountName] = "Inventory",
336
- LASTDATE(DimDate[Date])
337
- )
338
-
339
- Total Liabilities =
340
- CALCULATE(
341
- [Actual],
342
- DimAccount[AccountType] = "Liability",
343
- LASTDATE(DimDate[Date])
344
- )
345
-
346
- Current Liabilities =
347
- CALCULATE(
348
- [Actual],
349
- DimAccount[AccountSubGroup] = "Current Liabilities",
350
- LASTDATE(DimDate[Date])
351
- )
352
-
353
- Accounts Payable =
354
- CALCULATE(
355
- [Actual],
356
- DimAccount[AccountName] = "Accounts Payable",
357
- LASTDATE(DimDate[Date])
358
- )
359
-
360
- Total Debt =
361
- CALCULATE(
362
- [Actual],
363
- DimAccount[AccountSubGroup] IN {"Short-term Debt", "Long-term Debt"},
364
- LASTDATE(DimDate[Date])
365
- )
366
-
367
- Total Equity =
368
- CALCULATE(
369
- [Actual],
370
- DimAccount[AccountType] = "Equity",
371
- LASTDATE(DimDate[Date])
372
- )
373
-
374
-
375
- // ----------------------------------------------------------------------------
376
- // FINANCIAL RATIOS - PROFITABILITY
377
- // ----------------------------------------------------------------------------
378
-
379
- // Return on Equity
380
- ROE =
381
- DIVIDE([Net Income TTM], [Total Equity])
382
-
383
- // Return on Assets
384
- ROA =
385
- DIVIDE([Net Income TTM], [Total Assets])
386
-
387
- // Return on Invested Capital
388
- ROIC =
389
- VAR _NOPAT = [Operating Income] * (1 - 0.25) // Assume 25% tax rate
390
- VAR _InvestedCapital = [Total Assets] - [Current Liabilities] + [Total Debt]
391
- RETURN
392
- DIVIDE(_NOPAT, _InvestedCapital)
393
-
394
-
395
- // ----------------------------------------------------------------------------
396
- // FINANCIAL RATIOS - LIQUIDITY
397
- // ----------------------------------------------------------------------------
398
-
399
- // Current Ratio
400
- Current Ratio =
401
- DIVIDE([Current Assets], [Current Liabilities])
402
-
403
- // Quick Ratio (Acid Test)
404
- Quick Ratio =
405
- DIVIDE([Current Assets] - [Inventory], [Current Liabilities])
406
-
407
- // Cash Ratio
408
- Cash Ratio =
409
- DIVIDE([Cash], [Current Liabilities])
410
-
411
-
412
- // ----------------------------------------------------------------------------
413
- // FINANCIAL RATIOS - LEVERAGE
414
- // ----------------------------------------------------------------------------
415
-
416
- // Debt to Equity
417
- Debt to Equity =
418
- DIVIDE([Total Debt], [Total Equity])
419
-
420
- // Debt to Assets
421
- Debt to Assets =
422
- DIVIDE([Total Debt], [Total Assets])
423
-
424
- // Interest Coverage
425
- Interest Coverage =
426
- DIVIDE([EBITDA], ABS([Interest Expense]))
427
-
428
- // Equity Multiplier
429
- Equity Multiplier =
430
- DIVIDE([Total Assets], [Total Equity])
431
-
432
-
433
- // ----------------------------------------------------------------------------
434
- // FINANCIAL RATIOS - EFFICIENCY
435
- // ----------------------------------------------------------------------------
436
-
437
- // Days Sales Outstanding
438
- DSO =
439
- DIVIDE([Accounts Receivable], [Revenue TTM]) * 365
440
-
441
- // Days Payable Outstanding
442
- DPO =
443
- VAR _COGS_TTM = CALCULATE([COGS], DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -12, MONTH))
444
- RETURN
445
- DIVIDE([Accounts Payable], ABS(_COGS_TTM)) * 365
446
-
447
- // Days Inventory Outstanding
448
- DIO =
449
- VAR _COGS_TTM = CALCULATE([COGS], DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -12, MONTH))
450
- RETURN
451
- DIVIDE([Inventory], ABS(_COGS_TTM)) * 365
452
-
453
- // Cash Conversion Cycle
454
- Cash Conversion Cycle =
455
- [DSO] + [DIO] - [DPO]
456
-
457
- // Asset Turnover
458
- Asset Turnover =
459
- DIVIDE([Revenue TTM], [Total Assets])
460
-
461
-
462
- // ----------------------------------------------------------------------------
463
- // DISPLAY / FORMATTING MEASURES
464
- // ----------------------------------------------------------------------------
465
-
466
- Revenue Display =
467
- VAR _Value = [Revenue]
468
- RETURN
469
- IF(
470
- ABS(_Value) >= 1000000,
471
- FORMAT(_Value / 1000000, "$#,##0.0") & "M",
472
- IF(
473
- ABS(_Value) >= 1000,
474
- FORMAT(_Value / 1000, "$#,##0.0") & "K",
475
- FORMAT(_Value, "$#,##0")
476
- )
477
- )
478
-
479
- Variance Display =
480
- VAR _Var = [Variance]
481
- RETURN
482
- IF(
483
- ISBLANK(_Var),
484
- "--",
485
- IF(_Var >= 0, "+", "") & FORMAT(_Var / 1000, "#,##0") & "K"
486
- )
487
-
488
- YoY Display =
489
- VAR _YoY = [Revenue YoY %]
490
- RETURN
491
- IF(
492
- ISBLANK(_YoY),
493
- "--",
494
- IF(_YoY >= 0, "+", "") & FORMAT(_YoY, "0.0%")
495
- )
496
-
497
- Margin Display =
498
- FORMAT([Net Margin %], "0.0%")
499
-
500
- Ratio Display =
501
- FORMAT([Current Ratio], "0.00") & "x"
502
-
503
-
504
- // ----------------------------------------------------------------------------
505
- // PERIOD LABELS
506
- // ----------------------------------------------------------------------------
507
-
508
- Current Period Label =
509
- VAR _MaxDate = MAX(DimDate[Date])
510
- RETURN
511
- FORMAT(_MaxDate, "MMM YYYY")
512
-
513
- Selected Period Range =
514
- VAR _Min = MIN(DimDate[Date])
515
- VAR _Max = MAX(DimDate[Date])
516
- RETURN
517
- FORMAT(_Min, "MMM D, YYYY") & " - " & FORMAT(_Max, "MMM D, YYYY")
518
-
519
-
520
- // ============================================================================
521
- // MEASURE ORGANIZATION (Display Folders)
522
- // ============================================================================
523
- //
524
- // 📊 Income Statement
525
- // - Revenue, COGS, Gross Profit, Operating Expenses, EBITDA, Net Income
526
- //
527
- // 📈 Margins
528
- // - Gross Margin %, Operating Margin %, EBITDA Margin %, Net Margin %
529
- //
530
- // 🎯 Budget Variance
531
- // - Budget, Variance, Variance %, Revenue Variance, OpEx Variance
532
- //
533
- // 📅 Time Intelligence
534
- // - YTD: Revenue YTD, Gross Profit YTD, Net Income YTD
535
- // - Prior Year: Revenue PY, Net Income PY, Revenue YoY %
536
- // - TTM: Revenue TTM, Net Income TTM, EBITDA TTM
537
- //
538
- // 📋 Balance Sheet
539
- // - Total Assets, Current Assets, Cash, Inventory
540
- // - Total Liabilities, Current Liabilities, Total Debt
541
- // - Total Equity
542
- //
543
- // 📊 Ratios - Profitability
544
- // - ROE, ROA, ROIC
545
- //
546
- // 💧 Ratios - Liquidity
547
- // - Current Ratio, Quick Ratio, Cash Ratio
548
- //
549
- // ⚖️ Ratios - Leverage
550
- // - Debt to Equity, Debt to Assets, Interest Coverage
551
- //
552
- // ⚡ Ratios - Efficiency
553
- // - DSO, DPO, DIO, Cash Conversion Cycle, Asset Turnover
554
- //
555
- // 🎨 Display / Formatting
556
- // - Revenue Display, Variance Display, Margin Display
557
- // ============================================================================