@luquimbo/bi-superpowers 3.1.1 → 3.2.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 (107) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.claude-plugin/skill-manifest.json +1 -1
  4. package/.plugin/plugin.json +1 -1
  5. package/bin/build-plugin.js +6 -6
  6. package/bin/cli.js +169 -310
  7. package/bin/commands/install.js +87 -70
  8. package/bin/lib/agents.js +19 -0
  9. package/bin/lib/mcp-config.js +23 -4
  10. package/desktop-extension/manifest.json +4 -11
  11. package/desktop-extension/server.js +34 -25
  12. package/package.json +3 -9
  13. package/skills/pbi-connect/SKILL.md +1 -1
  14. package/skills/project-kickoff/SKILL.md +1 -1
  15. package/bin/commands/add.js +0 -533
  16. package/bin/commands/add.test.js +0 -77
  17. package/bin/commands/changelog.js +0 -443
  18. package/bin/commands/pull.js +0 -287
  19. package/bin/commands/pull.test.js +0 -36
  20. package/bin/commands/push.js +0 -231
  21. package/bin/commands/push.test.js +0 -14
  22. package/bin/commands/search.js +0 -344
  23. package/bin/commands/search.test.js +0 -115
  24. package/bin/commands/setup.js +0 -545
  25. package/bin/commands/setup.test.js +0 -46
  26. package/bin/commands/sync-profile.js +0 -405
  27. package/bin/commands/sync-profile.test.js +0 -14
  28. package/bin/commands/sync-source.js +0 -418
  29. package/bin/commands/sync-source.test.js +0 -14
  30. package/bin/utils/errors.js +0 -159
  31. package/bin/utils/git.js +0 -298
  32. package/bin/utils/logger.js +0 -142
  33. package/bin/utils/pbix.js +0 -305
  34. package/bin/utils/pbix.test.js +0 -37
  35. package/bin/utils/profiles.js +0 -312
  36. package/bin/utils/projects.js +0 -169
  37. package/bin/utils/readline.js +0 -206
  38. package/bin/utils/readline.test.js +0 -47
  39. package/docs/openrouter-free-models.md +0 -92
  40. package/library/examples/README.md +0 -151
  41. package/library/examples/finance-reporting/README.md +0 -351
  42. package/library/examples/finance-reporting/data-model.md +0 -267
  43. package/library/examples/finance-reporting/measures.dax +0 -557
  44. package/library/examples/hr-analytics/README.md +0 -371
  45. package/library/examples/hr-analytics/data-model.md +0 -315
  46. package/library/examples/hr-analytics/measures.dax +0 -460
  47. package/library/examples/marketing-analytics/README.md +0 -37
  48. package/library/examples/marketing-analytics/data-model.md +0 -62
  49. package/library/examples/marketing-analytics/measures.dax +0 -110
  50. package/library/examples/retail-analytics/README.md +0 -439
  51. package/library/examples/retail-analytics/data-model.md +0 -288
  52. package/library/examples/retail-analytics/measures.dax +0 -481
  53. package/library/examples/supply-chain/README.md +0 -37
  54. package/library/examples/supply-chain/data-model.md +0 -69
  55. package/library/examples/supply-chain/measures.dax +0 -77
  56. package/library/examples/udf-library/README.md +0 -228
  57. package/library/examples/udf-library/functions.dax +0 -571
  58. package/library/snippets/dax/README.md +0 -292
  59. package/library/snippets/dax/business-domains.md +0 -576
  60. package/library/snippets/dax/calculate-patterns.md +0 -276
  61. package/library/snippets/dax/calculation-groups.md +0 -489
  62. package/library/snippets/dax/error-handling.md +0 -495
  63. package/library/snippets/dax/iterators-and-aggregations.md +0 -474
  64. package/library/snippets/dax/kpis-and-metrics.md +0 -293
  65. package/library/snippets/dax/rankings-and-topn.md +0 -235
  66. package/library/snippets/dax/security-patterns.md +0 -413
  67. package/library/snippets/dax/text-and-formatting.md +0 -316
  68. package/library/snippets/dax/time-intelligence.md +0 -196
  69. package/library/snippets/dax/user-defined-functions.md +0 -477
  70. package/library/snippets/dax/virtual-tables.md +0 -546
  71. package/library/snippets/excel-formulas/README.md +0 -84
  72. package/library/snippets/excel-formulas/aggregations.md +0 -330
  73. package/library/snippets/excel-formulas/dates-and-times.md +0 -361
  74. package/library/snippets/excel-formulas/dynamic-arrays.md +0 -314
  75. package/library/snippets/excel-formulas/lookups.md +0 -169
  76. package/library/snippets/excel-formulas/text-functions.md +0 -363
  77. package/library/snippets/governance/naming-conventions.md +0 -97
  78. package/library/snippets/governance/review-checklists.md +0 -107
  79. package/library/snippets/power-query/README.md +0 -389
  80. package/library/snippets/power-query/api-integration.md +0 -707
  81. package/library/snippets/power-query/connections.md +0 -434
  82. package/library/snippets/power-query/data-cleaning.md +0 -298
  83. package/library/snippets/power-query/error-handling.md +0 -526
  84. package/library/snippets/power-query/parameters.md +0 -350
  85. package/library/snippets/power-query/performance.md +0 -506
  86. package/library/snippets/power-query/transformations.md +0 -330
  87. package/library/snippets/report-design/accessibility.md +0 -78
  88. package/library/snippets/report-design/chart-selection.md +0 -54
  89. package/library/snippets/report-design/layout-patterns.md +0 -87
  90. package/library/templates/data-models/README.md +0 -93
  91. package/library/templates/data-models/finance-model.md +0 -627
  92. package/library/templates/data-models/retail-star-schema.md +0 -473
  93. package/library/templates/excel/README.md +0 -83
  94. package/library/templates/excel/budget-tracker.md +0 -432
  95. package/library/templates/excel/data-entry-form.md +0 -533
  96. package/library/templates/power-bi/README.md +0 -72
  97. package/library/templates/power-bi/finance-report.md +0 -449
  98. package/library/templates/power-bi/kpi-scorecard.md +0 -461
  99. package/library/templates/power-bi/sales-dashboard.md +0 -281
  100. package/library/themes/excel/README.md +0 -436
  101. package/library/themes/power-bi/README.md +0 -271
  102. package/library/themes/power-bi/accessible.json +0 -307
  103. package/library/themes/power-bi/bi-superpowers-default.json +0 -858
  104. package/library/themes/power-bi/corporate-blue.json +0 -291
  105. package/library/themes/power-bi/dark-mode.json +0 -291
  106. package/library/themes/power-bi/minimal.json +0 -292
  107. 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)