@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,228 @@
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)