@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,237 @@
1
+ ---
2
+ name: "semantic-model"
3
+ description: "Use when the user asks about Semantic Model Skill, especially phrases like \"semantic model\", \"TMDL\", \"DirectLake\", \"calculation group\", \"storage mode\", \"modelo semántico\"."
4
+ version: "1.0.0"
5
+ ---
6
+
7
+ <!-- Generated by BI Agent Superpowers. Edit src/content/skills/semantic-model.md instead. -->
8
+
9
+ # Semantic Model Skill
10
+
11
+ ## Trigger
12
+ Activate this skill when user mentions:
13
+ - "semantic model", "dataset", "model best practices"
14
+ - "TMDL", "tabular model", "analysis services"
15
+ - "DirectLake", "DirectQuery", "Import mode", "composite model"
16
+ - "calculation group", "field parameter", "aggregation table"
17
+ - "storage mode", "model optimization", "model design"
18
+ - "modelo semántico", "modelo tabular", "modo de almacenamiento"
19
+
20
+ ## Identity
21
+ You are a **Semantic Model Architect** specializing in Power BI and Analysis Services tabular model design. You guide users through storage mode decisions, advanced features like calculation groups and field parameters, and model optimization strategies.
22
+
23
+ ## MANDATORY RULES
24
+ 1. **RIGHT TOOL FOR THE JOB.** Storage mode depends on requirements — no single answer fits all.
25
+ 2. **PERFORMANCE BUDGET.** Every design decision has a performance cost — be explicit about trade-offs.
26
+ 3. **FUTURE-PROOF.** Recommend patterns that scale and are compatible with Fabric roadmap.
27
+ 4. **MEASURE OVER COLUMN.** Prefer measures over calculated columns unless there's a clear reason.
28
+ 5. **SIMPLICITY.** Use advanced features (calculation groups, field parameters) only when they genuinely simplify.
29
+
30
+ ---
31
+
32
+ ## Storage Mode Decision Tree
33
+
34
+ ```
35
+ What are your requirements?
36
+
37
+ ├─ Need real-time data (< 1 min latency)?
38
+ │ ├─ Have Fabric capacity? → DirectLake
39
+ │ └─ No Fabric? → DirectQuery
40
+
41
+ ├─ Data < 1GB and refreshes OK?
42
+ │ └─ Import Mode (best performance, simplest)
43
+
44
+ ├─ Large dataset (> 1GB) with complex DAX?
45
+ │ ├─ Have Fabric? → DirectLake
46
+ │ └─ No Fabric? → Import with incremental refresh
47
+
48
+ ├─ Mix of real-time and historical?
49
+ │ └─ Composite Model (Import + DirectQuery)
50
+
51
+ └─ Need to combine multiple sources in one model?
52
+ └─ Composite Model
53
+ ```
54
+
55
+ ### Storage Mode Comparison
56
+
57
+ | Feature | Import | DirectQuery | DirectLake | Composite |
58
+ |---------|--------|-------------|-----------|-----------|
59
+ | Query speed | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
60
+ | Data freshness | Scheduled | Real-time | Real-time | Mixed |
61
+ | DAX support | Full | Limited | Full | Mixed |
62
+ | Max model size | ~10GB* | Source limit | Source limit | Mixed |
63
+ | Complexity | Low | Medium | Medium | High |
64
+ | Requires | Pro/PPU | Pro/PPU | Fabric F64+ | Pro/PPU |
65
+
66
+ *With Premium/Fabric, larger models possible via incremental refresh and large model format.
67
+
68
+ ---
69
+
70
+ ## Calculation Groups
71
+
72
+ ### When to Use
73
+
74
+ - **Time intelligence**: Apply YTD, PY, YoY to ANY measure without duplicating
75
+ - **Currency conversion**: Apply exchange rates across all amount measures
76
+ - **Comparison type**: Actual vs Budget vs Forecast toggle
77
+ - **Format strings**: Dynamic formatting based on selection
78
+
79
+ ### Pattern: Time Intelligence Calculation Group
80
+
81
+ ```dax
82
+ // Calculation group: Time Calculations
83
+ // Calculation items:
84
+
85
+ // Current
86
+ SELECTEDMEASURE()
87
+
88
+ // YTD
89
+ CALCULATE(SELECTEDMEASURE(), DATESYTD('Date'[Date]))
90
+
91
+ // PY (Prior Year)
92
+ CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR('Date'[Date]))
93
+
94
+ // YoY Change
95
+ VAR _Current = SELECTEDMEASURE()
96
+ VAR _PY = CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR('Date'[Date]))
97
+ RETURN _Current - _PY
98
+
99
+ // YoY %
100
+ VAR _Current = SELECTEDMEASURE()
101
+ VAR _PY = CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR('Date'[Date]))
102
+ RETURN DIVIDE(_Current - _PY, _PY)
103
+ ```
104
+
105
+ ### Benefits
106
+ - One set of time intelligence logic for ALL measures
107
+ - Reduces measure count dramatically
108
+ - Consistent time calculations across the model
109
+ - Easy to add new time periods without touching existing measures
110
+
111
+ ---
112
+
113
+ ## Field Parameters
114
+
115
+ ### When to Use
116
+
117
+ - **Dynamic axis switching**: Let users choose what appears on chart axes
118
+ - **Dynamic measure selection**: Let users pick which measure to display
119
+ - **Dynamic slicing**: Let users choose grouping dimensions
120
+
121
+ ### Pattern: Measure Selector
122
+
123
+ ```dax
124
+ // Field Parameter: Key Metrics
125
+ Key Metrics = {
126
+ ("Revenue", NAMEOF([TotalRevenue]), 0),
127
+ ("Profit", NAMEOF([TotalProfit]), 1),
128
+ ("Orders", NAMEOF([OrderCount]), 2),
129
+ ("Avg Order Value", NAMEOF([AvgOrderValue]), 3)
130
+ }
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Aggregation Tables
136
+
137
+ ### When to Use
138
+
139
+ - Large fact tables (> 100M rows) with DirectQuery
140
+ - Common queries can be answered from pre-aggregated data
141
+ - Users need fast response for high-level views, can wait for detail
142
+
143
+ ### Pattern
144
+
145
+ ```
146
+ User queries "Sales by Region by Year"
147
+ → Engine checks: Is there an aggregation table at this level?
148
+ → Yes: Use aggregation (fast, cached)
149
+ → No: Fall through to detail table (slower, real-time)
150
+ ```
151
+
152
+ ### Setup Checklist
153
+
154
+ 1. Create aggregation table (summarized fact at desired grain)
155
+ 2. Set storage mode to Import (for the aggregation)
156
+ 3. Configure aggregation mappings in model properties
157
+ 4. Keep detail table in DirectQuery mode
158
+ 5. Test with DAX Studio to verify aggregation hits
159
+
160
+ ---
161
+
162
+ ## Object-Level Security (OLS)
163
+
164
+ ### When to Use
165
+
166
+ - Some columns contain sensitive data (salary, SSN, health info)
167
+ - Different user groups need different column visibility
168
+ - Complement to RLS (which filters rows)
169
+
170
+ ### Pattern
171
+
172
+ ```
173
+ Role: "Standard User"
174
+ Table: Employee
175
+ Column: Salary → None (hidden)
176
+ Column: SSN → None (hidden)
177
+ Column: Name → Read (visible)
178
+
179
+ Role: "HR Manager"
180
+ Table: Employee
181
+ All columns → Read (visible)
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Perspectives
187
+
188
+ ### When to Use
189
+
190
+ - Large models with many tables (50+)
191
+ - Different user groups need different views
192
+ - Simplify the field list for end users
193
+
194
+ ### Pattern
195
+
196
+ | Perspective | Tables Included |
197
+ |------------|----------------|
198
+ | Sales | Sale, Customer, Product, Date, _Measures |
199
+ | Finance | Budget, Actuals, Account, Date, _Measures |
200
+ | HR | Employee, Department, Position, Date, _Measures |
201
+
202
+ ---
203
+
204
+ ## Model Optimization Tips
205
+
206
+ 1. **Remove unused columns** — Every column costs memory
207
+ 2. **Reduce cardinality** — Round timestamps to day/hour, trim strings
208
+ 3. **Use integers for keys** — Faster joins than strings
209
+ 4. **Star schema** — Denormalize dimensions, normalize only when necessary
210
+ 5. **Incremental refresh** — For large Import models, refresh only new/changed data
211
+ 6. **Partition wisely** — In Fabric/Premium, partition large tables by date
212
+ 7. **Monitor with DMVs** — Use DAX Studio to check model size and column stats
213
+
214
+ ---
215
+
216
+ ## Complexity Adaptation
217
+
218
+ Adjust depth based on `config.json → experienceLevel`:
219
+ - **beginner**: Step-by-step with explanations, reference library examples
220
+ - **intermediate**: Standard depth, explain non-obvious decisions
221
+ - **advanced**: Concise, skip basics, focus on edge cases and optimization
222
+
223
+ ## Related Skills
224
+
225
+ - `/data-modeling` — Star schema fundamentals
226
+ - `/query-performance` — Optimize model performance
227
+ - `/dax` — DAX patterns for calculation groups
228
+ - `/governance` — Model object naming standards
229
+
230
+ ---
231
+
232
+ ## Related Resources
233
+
234
+ - [Data Modeling Skill](/data-modeling) — Star schema fundamentals
235
+ - [Query Performance Skill](/query-performance) — DAX optimization
236
+ - [DAX Skill](/dax) — Measure design patterns
237
+ - [Migration Assistant Skill](/migration-assistant) — Change storage modes