@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,292 @@
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
+ ```