@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,439 +0,0 @@
1
- # Retail Analytics - Complete Example
2
-
3
- A complete, end-to-end example demonstrating BI Agent Superpowers patterns for a retail analytics solution.
4
-
5
- ---
6
-
7
- ## Overview
8
-
9
- This example shows how to build a professional retail analytics solution using:
10
-
11
- - **Star schema data model** with fact and dimension tables
12
- - **DAX measures** for KPIs, time intelligence, and rankings
13
- - **Power Query** patterns for data transformation
14
- - **Power BI theme** for consistent styling
15
-
16
- ---
17
-
18
- ## Business Requirements
19
-
20
- ### Stakeholders
21
- - Store managers: Daily sales performance
22
- - Regional directors: Cross-store comparisons
23
- - Finance team: Revenue and margin analysis
24
- - Operations: Inventory and category insights
25
-
26
- ### Key Questions
27
- 1. What are our sales trends over time?
28
- 2. Which products and categories drive revenue?
29
- 3. How do stores compare in performance?
30
- 4. What's our margin by product category?
31
- 5. Who are our top customers?
32
-
33
- ---
34
-
35
- ## Data Model
36
-
37
- ### Star Schema Design
38
-
39
- ```
40
- ┌─────────────────┐
41
- │ DimDate │
42
- │─────────────────│
43
- │ DateKey (PK) │
44
- │ Date │
45
- │ Year │
46
- │ Quarter │
47
- │ Month │
48
- │ MonthName │
49
- │ Week │
50
- │ DayOfWeek │
51
- │ IsWeekend │
52
- └────────┬────────┘
53
-
54
- ┌─────────────────┐ │ ┌─────────────────┐
55
- │ DimProduct │ │ │ DimCustomer │
56
- │─────────────────│ │ │─────────────────│
57
- │ ProductKey (PK) │ │ │ CustomerKey (PK)│
58
- │ ProductID │ │ │ CustomerID │
59
- │ ProductName │ │ │ CustomerName │
60
- │ Category │ │ │ Email │
61
- │ SubCategory │ │ │ City │
62
- │ Brand │ │ │ State │
63
- │ UnitCost │ │ │ Region │
64
- │ UnitPrice │ │ │ JoinDate │
65
- │ IsActive │ │ │ Tier │
66
- └────────┬────────┘ │ └────────┬────────┘
67
- │ │ │
68
- │ ┌─────────────┴───────────────┐ │
69
- │ │ FactSales │ │
70
- │ │─────────────────────────────│ │
71
- └────>│ SalesKey (PK) │<──┘
72
- │ DateKey (FK) │
73
- │ ProductKey (FK) │
74
- │ CustomerKey (FK) │
75
- │ StoreKey (FK) │
76
- │ Quantity │
77
- │ UnitPrice │
78
- │ Discount │
79
- │ Amount │
80
- │ Cost │
81
- └─────────────┬───────────────┘
82
-
83
- ┌────────┴────────┐
84
- │ DimStore │
85
- │─────────────────│
86
- │ StoreKey (PK) │
87
- │ StoreID │
88
- │ StoreName │
89
- │ StoreType │
90
- │ City │
91
- │ State │
92
- │ Region │
93
- │ OpenDate │
94
- │ SquareFeet │
95
- └─────────────────┘
96
- ```
97
-
98
- ### Table Details
99
-
100
- See [data-model.md](./data-model.md) for complete column definitions and data types.
101
-
102
- ---
103
-
104
- ## Power Query Transformations
105
-
106
- ### Source Data Preparation
107
-
108
- ```m
109
- // FactSales transformation
110
- let
111
- Source = Sql.Database("server", "RetailDB"),
112
- Sales = Source{[Schema="dbo", Item="SalesTransactions"]}[Data],
113
-
114
- // 1. Filter to current fiscal year (folds to WHERE)
115
- FilteredByDate = Table.SelectRows(Sales, each
116
- [TransactionDate] >= #date(2024, 1, 1)
117
- ),
118
-
119
- // 2. Select only needed columns (folds to SELECT)
120
- SelectedColumns = Table.SelectColumns(FilteredByDate, {
121
- "TransactionID", "TransactionDate", "ProductID",
122
- "CustomerID", "StoreID", "Quantity", "UnitPrice",
123
- "DiscountAmount"
124
- }),
125
-
126
- // 3. Add calculated columns
127
- WithCalculations = Table.AddColumn(
128
- Table.AddColumn(
129
- Table.AddColumn(SelectedColumns, "Amount",
130
- each [Quantity] * [UnitPrice] - [DiscountAmount], Currency.Type
131
- ),
132
- "DateKey", each Date.ToText([TransactionDate], "yyyyMMdd"), type text
133
- ),
134
- "SalesKey", each Text.From([TransactionID]), type text
135
- ),
136
-
137
- // 4. Set final types
138
- TypedTable = Table.TransformColumnTypes(WithCalculations, {
139
- {"Quantity", Int64.Type},
140
- {"UnitPrice", Currency.Type},
141
- {"DiscountAmount", Currency.Type}
142
- })
143
- in
144
- TypedTable
145
- ```
146
-
147
- See [power-query.md](./power-query.md) for all table transformations.
148
-
149
- ---
150
-
151
- ## DAX Measures
152
-
153
- ### Base Measures
154
-
155
- ```dax
156
- // Revenue
157
- Revenue =
158
- SUM(FactSales[Amount])
159
-
160
- // Cost
161
- Cost =
162
- SUMX(
163
- FactSales,
164
- FactSales[Quantity] * RELATED(DimProduct[UnitCost])
165
- )
166
-
167
- // Profit
168
- Profit =
169
- [Revenue] - [Cost]
170
-
171
- // Profit Margin
172
- Profit Margin % =
173
- DIVIDE([Profit], [Revenue])
174
-
175
- // Transaction Count
176
- Transactions =
177
- COUNTROWS(FactSales)
178
-
179
- // Average Order Value
180
- AOV =
181
- DIVIDE([Revenue], [Transactions])
182
- ```
183
-
184
- ### Time Intelligence
185
-
186
- ```dax
187
- // Revenue YTD
188
- Revenue YTD =
189
- TOTALYTD([Revenue], DimDate[Date])
190
-
191
- // Revenue Prior Year
192
- Revenue PY =
193
- CALCULATE([Revenue], SAMEPERIODLASTYEAR(DimDate[Date]))
194
-
195
- // Revenue YoY Growth %
196
- Revenue YoY % =
197
- VAR _Current = [Revenue]
198
- VAR _PY = [Revenue PY]
199
- RETURN
200
- DIVIDE(_Current - _PY, _PY)
201
-
202
- // Revenue Rolling 3 Months
203
- Revenue R3M =
204
- CALCULATE(
205
- [Revenue],
206
- DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -3, MONTH)
207
- )
208
- ```
209
-
210
- ### Rankings
211
-
212
- ```dax
213
- // Product Rank by Revenue
214
- Product Rank =
215
- IF(
216
- HASONEVALUE(DimProduct[ProductName]),
217
- RANKX(
218
- ALL(DimProduct[ProductName]),
219
- [Revenue],
220
- ,
221
- DESC,
222
- DENSE
223
- )
224
- )
225
-
226
- // Store Rank by Revenue
227
- Store Rank =
228
- IF(
229
- HASONEVALUE(DimStore[StoreName]),
230
- RANKX(
231
- ALL(DimStore[StoreName]),
232
- [Revenue],
233
- ,
234
- DESC,
235
- DENSE
236
- )
237
- )
238
-
239
- // Top 10 Products Revenue
240
- Revenue Top 10 Products =
241
- CALCULATE(
242
- [Revenue],
243
- TOPN(10, ALL(DimProduct[ProductName]), [Revenue], DESC)
244
- )
245
- ```
246
-
247
- ### KPI Formatting
248
-
249
- ```dax
250
- // Revenue with conditional color
251
- Revenue Color =
252
- VAR _YoY = [Revenue YoY %]
253
- RETURN
254
- SWITCH(
255
- TRUE(),
256
- _YoY >= 0.1, "#166534", // Dark green - exceeds
257
- _YoY >= 0, "#22C55E", // Green - positive
258
- _YoY >= -0.1, "#EAB308", // Yellow - slightly down
259
- "#991B1B" // Dark red - significantly down
260
- )
261
-
262
- // Trend indicator
263
- Revenue Trend =
264
- VAR _YoY = [Revenue YoY %]
265
- RETURN
266
- SWITCH(
267
- TRUE(),
268
- _YoY >= 0.1, "▲▲",
269
- _YoY >= 0, "▲",
270
- _YoY >= -0.1, "▼",
271
- "▼▼"
272
- )
273
- ```
274
-
275
- See [measures.dax](./measures.dax) for the complete measure library.
276
-
277
- ---
278
-
279
- ## Visualizations
280
-
281
- ### Dashboard Layout
282
-
283
- ```
284
- ┌──────────────────────────────────────────────────────────────────┐
285
- │ RETAIL ANALYTICS [Date Range Slicer] │
286
- ├──────────────────────────────────────────────────────────────────┤
287
- │ │
288
- │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│
289
- │ │ Revenue │ │ Profit │ │ Margin % │ │ AOV ││
290
- │ │ $2.4M │ │ $480K │ │ 20.1% │ │ $45.20 ││
291
- │ │ ▲ 12.3% │ │ ▲ 8.1% │ │ ▼ 0.3pp │ │ ▲ 5.2% ││
292
- │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘│
293
- │ │
294
- │ ┌───────────────────────────────┐ ┌───────────────────────────┐│
295
- │ │ Revenue Trend │ │ Revenue by Category ││
296
- │ │ [Line Chart - R12M] │ │ [Bar Chart] ││
297
- │ │ │ │ ││
298
- │ │ │ │ ││
299
- │ └───────────────────────────────┘ └───────────────────────────┘│
300
- │ │
301
- │ ┌───────────────────────────────┐ ┌───────────────────────────┐│
302
- │ │ Top 10 Products │ │ Store Performance ││
303
- │ │ [Table with bars] │ │ [Map or Bar Chart] ││
304
- │ │ │ │ ││
305
- │ │ │ │ ││
306
- │ └───────────────────────────────┘ └───────────────────────────┘│
307
- │ │
308
- └──────────────────────────────────────────────────────────────────┘
309
- ```
310
-
311
- ### Recommended Visuals
312
-
313
- | Visual | Measures | Purpose |
314
- |--------|----------|---------|
315
- | Card | Revenue, Profit, Margin %, AOV | KPI summary |
316
- | Line chart | Revenue by Month | Trend analysis |
317
- | Clustered bar | Revenue by Category | Category comparison |
318
- | Table | Top Products with Revenue, YoY % | Detailed ranking |
319
- | Map | Revenue by Region/State | Geographic analysis |
320
- | Slicer | Date, Category, Region | Filtering |
321
-
322
- ---
323
-
324
- ## Theme
325
-
326
- Use the `bi-superpowers-default.json` theme for this report.
327
-
328
- ### Key Theme Settings
329
-
330
- | Element | Setting |
331
- |---------|---------|
332
- | Background | #FAFAFA (page), #FFFFFF (cards) |
333
- | Primary text | #171717 |
334
- | Data colors | IBCS grayscale (#000000, #737373, #A3A3A3) |
335
- | Good | #166534 (dark green) |
336
- | Bad | #991B1B (dark red) |
337
- | Border radius | 10px |
338
- | Font | Segoe UI |
339
-
340
- See [theme.json](./theme.json) for the complete theme file.
341
-
342
- ---
343
-
344
- ## Implementation Checklist
345
-
346
- ### Data Model
347
- - [ ] Create DimDate table with all date attributes
348
- - [ ] Load DimProduct with Category/SubCategory hierarchy
349
- - [ ] Load DimCustomer with Region hierarchy
350
- - [ ] Load DimStore with geographic attributes
351
- - [ ] Load FactSales with surrogate keys
352
- - [ ] Create relationships (all 1:*)
353
- - [ ] Mark DimDate as Date Table
354
- - [ ] Hide foreign key columns
355
-
356
- ### Measures
357
- - [ ] Create base measures (Revenue, Cost, Profit)
358
- - [ ] Create time intelligence measures (YTD, PY, YoY %)
359
- - [ ] Create ranking measures
360
- - [ ] Create conditional formatting measures
361
- - [ ] Organize measures in folders
362
-
363
- ### Visualizations
364
- - [ ] Apply theme
365
- - [ ] Create KPI cards row
366
- - [ ] Add trend line chart
367
- - [ ] Add category comparison
368
- - [ ] Add Top N table
369
- - [ ] Add geographic visual
370
- - [ ] Configure slicers
371
- - [ ] Add tooltips
372
- - [ ] Test all interactions
373
-
374
- ### Polish
375
- - [ ] Add report title
376
- - [ ] Add last refresh date
377
- - [ ] Configure mobile layout
378
- - [ ] Test filter interactions
379
- - [ ] Optimize performance (DAX Studio)
380
- - [ ] Document assumptions
381
-
382
- ---
383
-
384
- ## Files in This Example
385
-
386
- | File | Description |
387
- |------|-------------|
388
- | [README.md](./README.md) | This overview |
389
- | [data-model.md](./data-model.md) | Complete table definitions |
390
- | [power-query.md](./power-query.md) | All M code transformations |
391
- | [measures.dax](./measures.dax) | Complete DAX measure library |
392
- | [theme.json](./theme.json) | Power BI theme file |
393
-
394
- ---
395
-
396
- ## Extending This Example
397
-
398
- ### Add Customer Segmentation
399
-
400
- ```dax
401
- Customer Segment =
402
- VAR _CustomerRevenue = [Revenue]
403
- VAR _AvgCustomerRevenue =
404
- CALCULATE(
405
- AVERAGEX(VALUES(DimCustomer[CustomerKey]), [Revenue]),
406
- ALL(DimCustomer)
407
- )
408
- RETURN
409
- SWITCH(
410
- TRUE(),
411
- _CustomerRevenue >= _AvgCustomerRevenue * 2, "VIP",
412
- _CustomerRevenue >= _AvgCustomerRevenue, "Regular",
413
- "Occasional"
414
- )
415
- ```
416
-
417
- ### Add Inventory Analysis
418
-
419
- Create a FactInventory table and add measures like:
420
-
421
- ```dax
422
- Stock Days =
423
- DIVIDE([Current Stock], [Daily Sales Rate])
424
-
425
- Reorder Alert =
426
- IF([Stock Days] < 14, "Reorder", "OK")
427
- ```
428
-
429
- ### Add Forecast Comparison
430
-
431
- If you have budget/forecast data:
432
-
433
- ```dax
434
- Revenue vs Budget % =
435
- DIVIDE([Revenue] - [Budget], [Budget])
436
-
437
- Budget Variance =
438
- [Revenue] - [Budget]
439
- ```