@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,292 +0,0 @@
1
- # DAX Snippets
2
-
3
- Production-ready DAX patterns and measures for Power BI development.
4
-
5
- ---
6
-
7
- ## Available Snippets
8
-
9
- | File | Description | Level |
10
- |------|-------------|-------|
11
- | [time-intelligence.md](./time-intelligence.md) | YTD, MTD, QTD, rolling periods, period comparisons | Beginner |
12
- | [calculate-patterns.md](./calculate-patterns.md) | CALCULATE, ALL, FILTER, context modification | Intermediate |
13
- | [rankings-and-topn.md](./rankings-and-topn.md) | RANKX, Top N, ABC analysis, percentiles | Intermediate |
14
- | [kpis-and-metrics.md](./kpis-and-metrics.md) | Variance, growth, ratios, conditional formatting | Intermediate |
15
- | [text-and-formatting.md](./text-and-formatting.md) | Text manipulation, dynamic titles, FORMAT | Beginner |
16
- | [iterators-and-aggregations.md](./iterators-and-aggregations.md) | SUMX, AVERAGEX, RANKX, CONCATENATEX patterns | Advanced |
17
- | [virtual-tables.md](./virtual-tables.md) | SUMMARIZE, ADDCOLUMNS, GENERATE, table functions | Advanced |
18
- | [error-handling.md](./error-handling.md) | DIVIDE, IFERROR, BLANK handling, defensive DAX | Intermediate |
19
- | [security-patterns.md](./security-patterns.md) | RLS, OLS, dynamic security, user-based filtering | Advanced |
20
- | [calculation-groups.md](./calculation-groups.md) | Time intelligence groups, currency conversion, formatting | Advanced |
21
- | [user-defined-functions.md](./user-defined-functions.md) | UDFs with typed parameters, VAL/EXPR modes, type checking | Advanced |
22
-
23
- ---
24
-
25
- ## Quick Reference
26
-
27
- ### Time Intelligence
28
- ```dax
29
- -- Year-to-Date
30
- TOTALYTD(SUM(Sales[Amount]), 'Date'[Date])
31
-
32
- -- Prior Year
33
- CALCULATE([Sales], SAMEPERIODLASTYEAR('Date'[Date]))
34
-
35
- -- Rolling 12 Months
36
- CALCULATE([Sales], DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH))
37
-
38
- -- Month-over-Month Growth
39
- VAR _Current = SUM(Sales[Amount])
40
- VAR _Prior = CALCULATE(SUM(Sales[Amount]), PREVIOUSMONTH('Date'[Date]))
41
- RETURN DIVIDE(_Current - _Prior, _Prior)
42
- ```
43
-
44
- ### Context Modification
45
- ```dax
46
- -- Remove all filters
47
- CALCULATE([Sales], ALL(Products))
48
-
49
- -- Keep only category filter
50
- CALCULATE([Sales], ALLEXCEPT(Products, Products[Category]))
51
-
52
- -- Filter on measure
53
- CALCULATE([Sales], FILTER(ALL(Products), [Margin] > 0.2))
54
- ```
55
-
56
- ### Percentages & Ratios
57
- ```dax
58
- -- % of Total
59
- DIVIDE([Sales], CALCULATE([Sales], ALL(Products)))
60
-
61
- -- % of Category
62
- DIVIDE([Sales], CALCULATE([Sales], ALLEXCEPT(Products, Products[Category])))
63
-
64
- -- Safe margin calculation
65
- DIVIDE(SUM(Sales[Profit]), SUM(Sales[Revenue]))
66
- ```
67
-
68
- ### Rankings
69
- ```dax
70
- -- Simple Rank
71
- RANKX(ALL(Products[ProductName]), [Sales], , DESC, DENSE)
72
-
73
- -- Top 5 Sales
74
- CALCULATE([Sales], TOPN(5, ALL(Products[ProductName]), [Sales], DESC))
75
-
76
- -- Rank within Category
77
- RANKX(ALLEXCEPT(Products, Products[Category]), [Sales], , DESC, DENSE)
78
- ```
79
-
80
- ### Iterators
81
- ```dax
82
- -- Extended price calculation
83
- SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])
84
-
85
- -- Average order value
86
- AVERAGEX(VALUES(Sales[OrderID]), CALCULATE(SUM(Sales[Amount])))
87
-
88
- -- Concatenate product list
89
- CONCATENATEX(VALUES(Products[Name]), Products[Name], ", ")
90
- ```
91
-
92
- ### Virtual Tables
93
- ```dax
94
- -- Add calculated columns
95
- ADDCOLUMNS(
96
- VALUES(Products[ProductName]),
97
- "@Sales", CALCULATE(SUM(Sales[Amount])),
98
- "@Rank", [Product_Rank]
99
- )
100
-
101
- -- Cross-join with calculation
102
- GENERATE(
103
- VALUES(Customers[CustomerID]),
104
- ROW("@Sales", CALCULATE(SUM(Sales[Amount])))
105
- )
106
- ```
107
-
108
- ---
109
-
110
- ## Pattern Categories
111
-
112
- ### By Function Area
113
-
114
- | Category | Key Functions | Use Case |
115
- |----------|--------------|----------|
116
- | **Time Intelligence** | TOTALYTD, SAMEPERIODLASTYEAR, DATESINPERIOD | Period calculations |
117
- | **Filter Modification** | CALCULATE, ALL, ALLEXCEPT, REMOVEFILTERS | Context control |
118
- | **Iterators** | SUMX, AVERAGEX, COUNTX, RANKX | Row-by-row calculations |
119
- | **Virtual Tables** | SUMMARIZE, ADDCOLUMNS, GENERATE | Table manipulation |
120
- | **Error Handling** | DIVIDE, IFERROR, ISBLANK, COALESCE | Defensive measures |
121
- | **Text** | FORMAT, CONCATENATEX, TEXT | Display formatting |
122
- | **User Defined Functions** | DEFINE FUNCTION, typed parameters | Reusable logic |
123
-
124
- ### By Difficulty
125
-
126
- | Level | Patterns |
127
- |-------|----------|
128
- | **Beginner** | Basic aggregations, simple time intelligence, FORMAT |
129
- | **Intermediate** | CALCULATE with filters, rankings, KPI variance |
130
- | **Advanced** | Nested iterators, virtual tables, context transition, UDFs |
131
-
132
- ---
133
-
134
- ## Best Practices
135
-
136
- ### 1. Always Use DIVIDE
137
-
138
- ```dax
139
- -- Bad
140
- [Sales] / [Customers]
141
-
142
- -- Good
143
- DIVIDE([Sales], [Customers])
144
- ```
145
-
146
- ### 2. Use Variables (VAR/RETURN)
147
-
148
- ```dax
149
- -- Better readability and performance
150
- Growth_Rate =
151
- VAR _Current = SUM(Sales[Amount])
152
- VAR _Prior = [Sales_PY]
153
- VAR _Change = _Current - _Prior
154
- RETURN
155
- DIVIDE(_Change, _Prior)
156
- ```
157
-
158
- ### 3. Prefer Simple Filters Over FILTER
159
-
160
- ```dax
161
- -- Good: Simple column filter (engine optimized)
162
- CALCULATE([Sales], Products[Category] = "Electronics")
163
-
164
- -- Use FILTER only when needed (measure-based conditions)
165
- CALCULATE([Sales], FILTER(ALL(Products), [Margin] > 0.2))
166
- ```
167
-
168
- ### 4. Always Specify Sort Order in RANKX
169
-
170
- ```dax
171
- -- Explicit is better
172
- RANKX(ALL(Products), [Sales], , DESC, DENSE)
173
- -- ^--- always specify
174
- ```
175
-
176
- ### 5. Handle Edge Cases
177
-
178
- ```dax
179
- -- Check for single selection
180
- IF(
181
- HASONEVALUE(Products[ProductName]),
182
- [DetailedCalculation],
183
- BLANK()
184
- )
185
- ```
186
-
187
- ### 6. Test Measures in Different Contexts
188
-
189
- Before deploying:
190
- - Test in matrix (row/column context)
191
- - Test in card (total context)
192
- - Test with slicers (filtered context)
193
- - Test with no data (blank handling)
194
-
195
- ---
196
-
197
- ## Performance Guidelines
198
-
199
- | Pattern | Performance | Notes |
200
- |---------|-------------|-------|
201
- | Simple aggregations (SUM, COUNT) | Fastest | Engine optimized |
202
- | CALCULATE with column filters | Fast | Foldable |
203
- | CALCULATE with FILTER on columns | Medium | Less optimized |
204
- | CALCULATE with FILTER on measures | Slow | Row-by-row |
205
- | Nested iterators | Slowest | Use sparingly |
206
-
207
- ### Optimization Tips
208
-
209
- 1. **Materialize once**: Store calculated values in variables
210
- 2. **Reduce iterations**: Pre-filter tables before SUMX
211
- 3. **Avoid context transition**: Don't use CALCULATE inside iterators unless needed
212
- 4. **Use INT over FLOAT**: For counting and simple math
213
- 5. **Limit DISTINCTCOUNT**: Use COUNTROWS(VALUES()) for small sets
214
-
215
- ---
216
-
217
- ## Naming Conventions
218
-
219
- | Type | Convention | Example |
220
- |------|------------|---------|
221
- | Base measure | Descriptive noun | `Sales Amount` |
222
- | Time intelligence | Suffix with period | `Sales YTD`, `Sales PY` |
223
- | Variance | Suffix with "Var" or "%" | `Sales Var`, `Sales YoY %` |
224
- | Ranking | Prefix with "Rank" | `Rank by Sales` |
225
- | Helper/Hidden | Prefix with underscore | `_Sales Base` |
226
- | Formatting | Suffix with format | `Revenue $`, `Growth %` |
227
-
228
- ---
229
-
230
- ## Debugging Tips
231
-
232
- ### Show Current Context
233
- ```dax
234
- Debug_Context =
235
- "Rows: " & COUNTROWS(Products) &
236
- " | Filtered: " & IF(ISFILTERED(Products), "Yes", "No") &
237
- " | Value: " & [YourMeasure]
238
- ```
239
-
240
- ### Step-by-Step Calculation
241
- ```dax
242
- Debug_Steps =
243
- VAR _Step1 = SUM(Sales[Amount])
244
- VAR _Step2 = CALCULATE(_Step1, ALL(Products))
245
- VAR _Step3 = DIVIDE(_Step1, _Step2)
246
- RETURN
247
- "Sales: " & _Step1 &
248
- " | Total: " & _Step2 &
249
- " | Pct: " & FORMAT(_Step3, "0.0%")
250
- ```
251
-
252
- ---
253
-
254
- ## Contributing
255
-
256
- Add new snippets as `.md` files with:
257
-
258
- 1. **Clear title** - Descriptive name
259
- 2. **Pattern category** - Time, Filter, Iterator, etc.
260
- 3. **Working examples** - Tested DAX code
261
- 4. **Parameter explanations** - What to replace
262
- 5. **Usage notes** - When to use, limitations
263
- 6. **Performance notes** - If relevant
264
-
265
- ### File Template
266
-
267
- ```markdown
268
- # Pattern Name
269
-
270
- Description of what this pattern does.
271
-
272
- ---
273
-
274
- ## Basic Pattern
275
-
276
- \`\`\`dax
277
- PatternName =
278
- VAR _Value = SUM(Table[Column])
279
- RETURN
280
- _Value
281
- \`\`\`
282
-
283
- ## Variations
284
-
285
- ### Variation 1
286
- ...
287
-
288
- ## Usage Notes
289
-
290
- - Note 1
291
- - Note 2
292
- ```