@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.
- package/.claude-plugin/plugin.json +8 -0
- package/.mcp.json +25 -0
- package/AGENTS.md +244 -0
- package/CHANGELOG.md +265 -0
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/bin/build-plugin.js +30 -0
- package/bin/cli.js +1064 -0
- package/bin/commands/add.js +533 -0
- package/bin/commands/add.test.js +77 -0
- package/bin/commands/build-desktop.js +166 -0
- package/bin/commands/changelog.js +443 -0
- package/bin/commands/diff.js +325 -0
- package/bin/commands/lint.js +419 -0
- package/bin/commands/lint.test.js +103 -0
- package/bin/commands/mcp-setup.js +246 -0
- package/bin/commands/pull.js +287 -0
- package/bin/commands/pull.test.js +36 -0
- package/bin/commands/push.js +231 -0
- package/bin/commands/push.test.js +14 -0
- package/bin/commands/search.js +344 -0
- package/bin/commands/search.test.js +115 -0
- package/bin/commands/setup.js +545 -0
- package/bin/commands/setup.test.js +46 -0
- package/bin/commands/sync-profile.js +405 -0
- package/bin/commands/sync-profile.test.js +14 -0
- package/bin/commands/sync-source.js +418 -0
- package/bin/commands/sync-source.test.js +14 -0
- package/bin/commands/watch.js +206 -0
- package/bin/lib/generators/claude-plugin.js +266 -0
- package/bin/lib/generators/claude-plugin.test.js +110 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +282 -0
- package/bin/lib/licensing/index.js +35 -0
- package/bin/lib/licensing/storage.js +364 -0
- package/bin/lib/licensing/storage.test.js +55 -0
- package/bin/lib/licensing/validator.js +213 -0
- package/bin/lib/licensing/validator.test.js +137 -0
- package/bin/lib/microsoft-mcp.js +176 -0
- package/bin/lib/microsoft-mcp.test.js +106 -0
- package/bin/lib/skills.js +84 -0
- package/bin/mcp/powerbi-modeling-launcher.js +38 -0
- package/bin/postinstall.js +44 -0
- package/bin/utils/errors.js +159 -0
- package/bin/utils/git.js +298 -0
- package/bin/utils/logger.js +142 -0
- package/bin/utils/mcp-detect.js +274 -0
- package/bin/utils/mcp-detect.test.js +105 -0
- package/bin/utils/pbix.js +305 -0
- package/bin/utils/pbix.test.js +37 -0
- package/bin/utils/profiles.js +312 -0
- package/bin/utils/projects.js +168 -0
- package/bin/utils/readline.js +206 -0
- package/bin/utils/readline.test.js +47 -0
- package/bin/utils/tui.js +314 -0
- package/bin/utils/tui.test.js +127 -0
- package/commands/contributions.md +265 -0
- package/commands/data-model-design.md +468 -0
- package/commands/dax-doctor.md +248 -0
- package/commands/fabric-scripts.md +452 -0
- package/commands/migration-assistant.md +290 -0
- package/commands/model-documenter.md +242 -0
- package/commands/pbi-connect.md +239 -0
- package/commands/project-kickoff.md +905 -0
- package/commands/report-layout.md +296 -0
- package/commands/rls-design.md +533 -0
- package/commands/theme-tweaker.md +624 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +37 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +95 -0
- package/docs/openrouter-free-models.md +92 -0
- package/library/examples/README.md +151 -0
- package/library/examples/finance-reporting/README.md +351 -0
- package/library/examples/finance-reporting/data-model.md +267 -0
- package/library/examples/finance-reporting/measures.dax +557 -0
- package/library/examples/hr-analytics/README.md +371 -0
- package/library/examples/hr-analytics/data-model.md +315 -0
- package/library/examples/hr-analytics/measures.dax +460 -0
- package/library/examples/marketing-analytics/README.md +37 -0
- package/library/examples/marketing-analytics/data-model.md +62 -0
- package/library/examples/marketing-analytics/measures.dax +110 -0
- package/library/examples/retail-analytics/README.md +439 -0
- package/library/examples/retail-analytics/data-model.md +288 -0
- package/library/examples/retail-analytics/measures.dax +481 -0
- package/library/examples/supply-chain/README.md +37 -0
- package/library/examples/supply-chain/data-model.md +69 -0
- package/library/examples/supply-chain/measures.dax +77 -0
- package/library/examples/udf-library/README.md +228 -0
- package/library/examples/udf-library/functions.dax +571 -0
- package/library/snippets/dax/README.md +292 -0
- package/library/snippets/dax/business-domains.md +576 -0
- package/library/snippets/dax/calculate-patterns.md +276 -0
- package/library/snippets/dax/calculation-groups.md +489 -0
- package/library/snippets/dax/error-handling.md +495 -0
- package/library/snippets/dax/iterators-and-aggregations.md +474 -0
- package/library/snippets/dax/kpis-and-metrics.md +293 -0
- package/library/snippets/dax/rankings-and-topn.md +235 -0
- package/library/snippets/dax/security-patterns.md +413 -0
- package/library/snippets/dax/text-and-formatting.md +316 -0
- package/library/snippets/dax/time-intelligence.md +196 -0
- package/library/snippets/dax/user-defined-functions.md +477 -0
- package/library/snippets/dax/virtual-tables.md +546 -0
- package/library/snippets/excel-formulas/README.md +84 -0
- package/library/snippets/excel-formulas/aggregations.md +330 -0
- package/library/snippets/excel-formulas/dates-and-times.md +361 -0
- package/library/snippets/excel-formulas/dynamic-arrays.md +314 -0
- package/library/snippets/excel-formulas/lookups.md +169 -0
- package/library/snippets/excel-formulas/text-functions.md +363 -0
- package/library/snippets/governance/naming-conventions.md +97 -0
- package/library/snippets/governance/review-checklists.md +107 -0
- package/library/snippets/power-query/README.md +389 -0
- package/library/snippets/power-query/api-integration.md +707 -0
- package/library/snippets/power-query/connections.md +434 -0
- package/library/snippets/power-query/data-cleaning.md +298 -0
- package/library/snippets/power-query/error-handling.md +526 -0
- package/library/snippets/power-query/parameters.md +350 -0
- package/library/snippets/power-query/performance.md +506 -0
- package/library/snippets/power-query/transformations.md +330 -0
- package/library/snippets/report-design/accessibility.md +78 -0
- package/library/snippets/report-design/chart-selection.md +54 -0
- package/library/snippets/report-design/layout-patterns.md +87 -0
- package/library/templates/data-models/README.md +93 -0
- package/library/templates/data-models/finance-model.md +627 -0
- package/library/templates/data-models/retail-star-schema.md +473 -0
- package/library/templates/excel/README.md +83 -0
- package/library/templates/excel/budget-tracker.md +432 -0
- package/library/templates/excel/data-entry-form.md +533 -0
- package/library/templates/power-bi/README.md +72 -0
- package/library/templates/power-bi/finance-report.md +449 -0
- package/library/templates/power-bi/kpi-scorecard.md +461 -0
- package/library/templates/power-bi/sales-dashboard.md +281 -0
- package/library/themes/excel/README.md +436 -0
- package/library/themes/power-bi/README.md +271 -0
- package/library/themes/power-bi/accessible.json +307 -0
- package/library/themes/power-bi/bi-superpowers-default.json +858 -0
- package/library/themes/power-bi/corporate-blue.json +291 -0
- package/library/themes/power-bi/dark-mode.json +291 -0
- package/library/themes/power-bi/minimal.json +292 -0
- package/library/themes/power-bi/print-friendly.json +309 -0
- package/package.json +93 -0
- package/skills/contributions/SKILL.md +267 -0
- package/skills/data-model-design/SKILL.md +470 -0
- package/skills/data-modeling/SKILL.md +254 -0
- package/skills/data-quality/SKILL.md +664 -0
- package/skills/dax/SKILL.md +708 -0
- package/skills/dax-doctor/SKILL.md +250 -0
- package/skills/dax-udf/SKILL.md +489 -0
- package/skills/deployment/SKILL.md +320 -0
- package/skills/excel-formulas/SKILL.md +463 -0
- package/skills/fabric-scripts/SKILL.md +454 -0
- package/skills/fast-standard/SKILL.md +509 -0
- package/skills/governance/SKILL.md +205 -0
- package/skills/migration-assistant/SKILL.md +292 -0
- package/skills/model-documenter/SKILL.md +244 -0
- package/skills/pbi-connect/SKILL.md +241 -0
- package/skills/power-query/SKILL.md +406 -0
- package/skills/project-kickoff/SKILL.md +907 -0
- package/skills/query-performance/SKILL.md +480 -0
- package/skills/report-design/SKILL.md +207 -0
- package/skills/report-layout/SKILL.md +298 -0
- package/skills/rls-design/SKILL.md +535 -0
- package/skills/semantic-model/SKILL.md +237 -0
- package/skills/testing-validation/SKILL.md +643 -0
- package/skills/theme-tweaker/SKILL.md +626 -0
- package/src/content/base.md +237 -0
- package/src/content/mcp-requirements.json +69 -0
- package/src/content/routing.md +203 -0
- package/src/content/skills/contributions.md +259 -0
- package/src/content/skills/data-model-design.md +462 -0
- package/src/content/skills/data-modeling.md +246 -0
- package/src/content/skills/data-quality.md +656 -0
- package/src/content/skills/dax-doctor.md +242 -0
- package/src/content/skills/dax-udf.md +481 -0
- package/src/content/skills/dax.md +700 -0
- package/src/content/skills/deployment.md +312 -0
- package/src/content/skills/excel-formulas.md +455 -0
- package/src/content/skills/fabric-scripts.md +446 -0
- package/src/content/skills/fast-standard.md +501 -0
- package/src/content/skills/governance.md +197 -0
- package/src/content/skills/migration-assistant.md +284 -0
- package/src/content/skills/model-documenter.md +236 -0
- package/src/content/skills/pbi-connect.md +233 -0
- package/src/content/skills/power-query.md +398 -0
- package/src/content/skills/project-kickoff.md +899 -0
- package/src/content/skills/query-performance.md +472 -0
- package/src/content/skills/report-design.md +199 -0
- package/src/content/skills/report-layout.md +290 -0
- package/src/content/skills/rls-design.md +527 -0
- package/src/content/skills/semantic-model.md +229 -0
- package/src/content/skills/testing-validation.md +635 -0
- 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
|