@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,228 +0,0 @@
1
- # DAX User Defined Functions Library
2
-
3
- A curated collection of reusable DAX User Defined Functions (UDFs) for common analytical patterns.
4
-
5
- > **Status:** UDFs are a preview feature released September 2025. Syntax may change.
6
-
7
- ---
8
-
9
- ## Overview
10
-
11
- This library provides ready-to-use functions for:
12
- - Financial calculations (NPV, IRR, CAGR, loan payments)
13
- - Statistical analysis (standard deviation, percentiles, z-scores)
14
- - Text manipulation (formatting, validation, extraction)
15
- - Date utilities (business days, fiscal periods, age calculation)
16
- - Data validation (null handling, range checks, type validation)
17
- - Formatting helpers (currency, percentages, conditional formatting)
18
-
19
- ---
20
-
21
- ## How to Use
22
-
23
- ### 1. Copy Functions to Your Query
24
-
25
- Copy the `DEFINE` block from `functions.dax` into your DAX query:
26
-
27
- ```dax
28
- DEFINE
29
- FUNCTION AddTax = (amount : NUMERIC, rate : NUMERIC) =>
30
- amount * (1 + rate)
31
-
32
- EVALUATE { AddTax(100, 0.21) }
33
- ```
34
-
35
- ### 2. Use in DAX Studio
36
-
37
- 1. Open DAX Studio connected to your model
38
- 2. Paste the function definitions
39
- 3. Write your EVALUATE statement using the functions
40
-
41
- ### 3. Combine Multiple Functions
42
-
43
- ```dax
44
- DEFINE
45
- FUNCTION Round2 = (value : NUMERIC) => ROUND(value, 2)
46
- FUNCTION AddTax = (amount : NUMERIC, rate : NUMERIC) => amount * (1 + rate)
47
- FUNCTION FinalPrice = (price : NUMERIC, taxRate : NUMERIC) =>
48
- Round2(AddTax(price, taxRate))
49
-
50
- EVALUATE
51
- ADDCOLUMNS(
52
- Products,
53
- "Price With Tax", FinalPrice([BasePrice], 0.21)
54
- )
55
- ```
56
-
57
- ---
58
-
59
- ## Function Catalog
60
-
61
- ### Financial Functions
62
-
63
- | Function | Description | Parameters |
64
- |----------|-------------|------------|
65
- | `AddTax` | Add tax to amount | `amount`, `rate` |
66
- | `CAGR` | Compound annual growth rate | `startValue`, `endValue`, `years` |
67
- | `MonthlyPayment` | Loan payment calculation | `principal`, `annualRate`, `months` |
68
- | `FutureValue` | Future value of investment | `presentValue`, `rate`, `periods` |
69
- | `PresentValue` | Present value calculation | `futureValue`, `rate`, `periods` |
70
- | `SimpleInterest` | Simple interest amount | `principal`, `rate`, `time` |
71
- | `CompoundInterest` | Compound interest amount | `principal`, `rate`, `periods` |
72
- | `EffectiveRate` | Effective annual rate | `nominalRate`, `periodsPerYear` |
73
-
74
- ### Statistical Functions
75
-
76
- | Function | Description | Parameters |
77
- |----------|-------------|------------|
78
- | `ZScore` | Calculate z-score | `value`, `mean`, `stdDev` |
79
- | `Normalize` | Normalize to 0-1 range | `value`, `min`, `max` |
80
- | `Clamp` | Constrain value to range | `value`, `min`, `max` |
81
- | `RoundToNearest` | Round to nearest multiple | `value`, `multiple` |
82
- | `MovingAverage` | Simple moving average | (requires table context) |
83
-
84
- ### Text Functions
85
-
86
- | Function | Description | Parameters |
87
- |----------|-------------|------------|
88
- | `FormatName` | "Last, First" format | `firstName`, `lastName` |
89
- | `GetInitials` | Extract initials | `fullName` |
90
- | `SafeTrim` | Null-safe trim | `text` |
91
- | `TruncateText` | Truncate with ellipsis | `text`, `maxLength` |
92
- | `PadLeft` | Left-pad string | `text`, `length`, `padChar` |
93
- | `PadRight` | Right-pad string | `text`, `length`, `padChar` |
94
-
95
- ### Date Functions
96
-
97
- | Function | Description | Parameters |
98
- |----------|-------------|------------|
99
- | `CalculateAge` | Age in years | `birthDate` |
100
- | `FiscalYear` | Fiscal year (July start) | `dateValue` |
101
- | `FiscalQuarter` | Fiscal quarter | `dateValue` |
102
- | `IsWeekend` | Check if weekend | `dateValue` |
103
- | `IsLeapYear` | Check for leap year | `year` |
104
- | `QuarterStart` | First day of quarter | `dateValue` |
105
- | `QuarterEnd` | Last day of quarter | `dateValue` |
106
-
107
- ### Validation Functions
108
-
109
- | Function | Description | Parameters |
110
- |----------|-------------|------------|
111
- | `IsValidEmail` | Basic email validation | `email` |
112
- | `InRange` | Check if value in range | `value`, `min`, `max` |
113
- | `NullSafeEquals` | Null-safe comparison | `val1`, `val2` |
114
- | `Coalesce` | Return first non-blank | `value`, `defaultValue` |
115
- | `SafeDivide` | Division with zero handling | `numerator`, `denominator` |
116
- | `IsNumericString` | Check if string is numeric | `text` |
117
-
118
- ### Formatting Functions
119
-
120
- | Function | Description | Parameters |
121
- |----------|-------------|------------|
122
- | `FormatCurrency` | Format as currency | `value`, `decimals` |
123
- | `FormatPercent` | Format as percentage | `value`, `decimals` |
124
- | `FormatThousands` | Format with K/M/B suffix | `value` |
125
- | `FormatDelta` | Format with +/- sign | `value` |
126
- | `ConditionalFormat` | Value-based formatting | `value`, `thresholds` |
127
-
128
- ---
129
-
130
- ## Files
131
-
132
- | File | Description |
133
- |------|-------------|
134
- | `README.md` | This documentation |
135
- | `functions.dax` | Complete function library with examples |
136
-
137
- ---
138
-
139
- ## Usage Examples
140
-
141
- ### Financial Analysis
142
-
143
- ```dax
144
- DEFINE
145
- FUNCTION CAGR = (startValue : NUMERIC, endValue : NUMERIC, years : NUMERIC) =>
146
- IF(startValue > 0 && years > 0,
147
- POWER(endValue / startValue, 1 / years) - 1,
148
- BLANK()
149
- )
150
-
151
- EVALUATE
152
- SUMMARIZE(
153
- Sales,
154
- [Year],
155
- "Revenue", SUM(Sales[Amount]),
156
- "Growth Rate", CAGR(
157
- CALCULATE(SUM(Sales[Amount]), PREVIOUSYEAR('Date'[Date])),
158
- SUM(Sales[Amount]),
159
- 1
160
- )
161
- )
162
- ```
163
-
164
- ### Data Validation
165
-
166
- ```dax
167
- DEFINE
168
- FUNCTION IsValidEmail = (email : STRING) =>
169
- VAR _HasAt = FIND("@", email, 1, 0) > 0
170
- VAR _HasDot = FIND(".", email, FIND("@", email, 1, 0) + 1, 0) > 0
171
- VAR _NoSpaces = FIND(" ", email, 1, 0) = 0
172
- RETURN _HasAt && _HasDot && _NoSpaces && LEN(email) >= 5
173
-
174
- EVALUATE
175
- FILTER(
176
- Customers,
177
- NOT IsValidEmail([Email])
178
- )
179
- ```
180
-
181
- ### Reporting
182
-
183
- ```dax
184
- DEFINE
185
- FUNCTION FormatThousands = (value : NUMERIC) =>
186
- SWITCH(
187
- TRUE(),
188
- ABS(value) >= 1000000000, FORMAT(value / 1000000000, "#,##0.0") & "B",
189
- ABS(value) >= 1000000, FORMAT(value / 1000000, "#,##0.0") & "M",
190
- ABS(value) >= 1000, FORMAT(value / 1000, "#,##0.0") & "K",
191
- FORMAT(value, "#,##0")
192
- )
193
-
194
- EVALUATE
195
- ADDCOLUMNS(
196
- SUMMARIZE(Sales, [Region]),
197
- "Revenue Display", FormatThousands(SUM(Sales[Amount]))
198
- )
199
- ```
200
-
201
- ---
202
-
203
- ## Best Practices
204
-
205
- 1. **Copy only what you need** - Don't include unused functions
206
- 2. **Document modifications** - Add comments when customizing
207
- 3. **Test thoroughly** - UDFs are in preview, validate results
208
- 4. **Consider performance** - Complex functions may impact query time
209
- 5. **Use specific types** - Avoid AnyVal when a specific type works
210
-
211
- ---
212
-
213
- ## Contributing
214
-
215
- To add functions to this library:
216
- 1. Follow the naming conventions (PascalCase)
217
- 2. Include documentation comments (///)
218
- 3. Add to the appropriate category
219
- 4. Include example usage
220
- 5. Test with edge cases (nulls, zeros, negatives)
221
-
222
- ---
223
-
224
- ## References
225
-
226
- - [Microsoft Learn: DAX User Defined Functions](https://learn.microsoft.com/en-us/dax/dax-queries#user-defined-functions)
227
- - [SQLBI: DAX UDFs](https://www.sqlbi.com/articles/user-defined-functions-in-dax/)
228
- - [BI Agent Superpowers DAX Snippets](../../snippets/dax/user-defined-functions.md)