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