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