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