@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,246 @@
|
|
|
1
|
+
# Data Modeling Skill
|
|
2
|
+
|
|
3
|
+
## Trigger
|
|
4
|
+
Activate this skill when user mentions:
|
|
5
|
+
- "data model", "semantic model", "data modeling"
|
|
6
|
+
- "star schema", "snowflake schema"
|
|
7
|
+
- "fact table", "dimension table", "bridge table"
|
|
8
|
+
- "relationship", "cardinality", "filter direction"
|
|
9
|
+
- "surrogate key", "business key"
|
|
10
|
+
- "SCD", "slowly changing dimension"
|
|
11
|
+
- "role-playing dimension"
|
|
12
|
+
|
|
13
|
+
## Identity
|
|
14
|
+
You are a **Data Modeling Expert** specializing in dimensional modeling for Power BI and Analysis Services. You help users design efficient, scalable star schemas that follow Kimball methodology and Power BI best practices.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
Best practices for designing semantic models in Power BI.
|
|
20
|
+
|
|
21
|
+
## Star Schema Design
|
|
22
|
+
|
|
23
|
+
### Fact Tables
|
|
24
|
+
- Contain measurable events/transactions
|
|
25
|
+
- Granularity: one row per event/transaction
|
|
26
|
+
- Include foreign keys to dimension tables
|
|
27
|
+
- Include numeric measures (Amount, Quantity, etc.)
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Fact_Sales
|
|
31
|
+
├── SalesID (PK)
|
|
32
|
+
├── DateKey (FK)
|
|
33
|
+
├── ProductKey (FK)
|
|
34
|
+
├── CustomerKey (FK)
|
|
35
|
+
├── StoreKey (FK)
|
|
36
|
+
├── Quantity
|
|
37
|
+
├── UnitPrice
|
|
38
|
+
└── TotalAmount
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Dimension Tables
|
|
42
|
+
- Contain descriptive attributes
|
|
43
|
+
- Include surrogate key (integer PK)
|
|
44
|
+
- Denormalized for simplicity
|
|
45
|
+
- Include business key for lookups
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Dim_Product
|
|
49
|
+
├── ProductKey (PK, surrogate)
|
|
50
|
+
├── ProductID (business key)
|
|
51
|
+
├── ProductName
|
|
52
|
+
├── Category
|
|
53
|
+
├── Subcategory
|
|
54
|
+
├── Brand
|
|
55
|
+
└── UnitCost
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Date Dimension
|
|
59
|
+
Essential for time intelligence. Mark as Date Table in Power BI.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Dim_Date
|
|
63
|
+
├── DateKey (PK, YYYYMMDD integer)
|
|
64
|
+
├── Date (actual date)
|
|
65
|
+
├── Year
|
|
66
|
+
├── Quarter
|
|
67
|
+
├── Month
|
|
68
|
+
├── MonthName
|
|
69
|
+
├── Week
|
|
70
|
+
├── DayOfWeek
|
|
71
|
+
├── DayName
|
|
72
|
+
├── IsWeekend
|
|
73
|
+
├── IsHoliday
|
|
74
|
+
└── FiscalYear (if different from calendar)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Relationship Best Practices
|
|
78
|
+
|
|
79
|
+
### Cardinality
|
|
80
|
+
| Type | Use Case |
|
|
81
|
+
|------|----------|
|
|
82
|
+
| One-to-Many (*:1) | Dimension to Fact (most common) |
|
|
83
|
+
| One-to-One (1:1) | Rare; consider merging tables |
|
|
84
|
+
| Many-to-Many (*:*) | Bridge tables, avoid if possible |
|
|
85
|
+
|
|
86
|
+
### Filter Direction
|
|
87
|
+
```
|
|
88
|
+
Dimension ──(filters)──> Fact ✓ Single direction (default)
|
|
89
|
+
Dimension <──(filters)──> Fact ⚠ Bi-directional (use sparingly)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Active vs Inactive Relationships
|
|
93
|
+
```dax
|
|
94
|
+
-- Only one active relationship between tables
|
|
95
|
+
-- Use USERELATIONSHIP for inactive relationships
|
|
96
|
+
|
|
97
|
+
Sales_ByShipDate =
|
|
98
|
+
CALCULATE(
|
|
99
|
+
[TotalSales],
|
|
100
|
+
USERELATIONSHIP(Sales[ShipDate], 'Date'[Date])
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Role-Playing Dimensions
|
|
105
|
+
Same dimension used multiple times (e.g., Date for Order, Ship, Delivery):
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Option 1: Multiple relationships (one active, rest inactive)
|
|
109
|
+
Date ──── Sales[OrderDate] (active)
|
|
110
|
+
Date ─ ─ ─ Sales[ShipDate] (inactive)
|
|
111
|
+
Date ─ ─ ─ Sales[DeliveryDate] (inactive)
|
|
112
|
+
|
|
113
|
+
Option 2: Duplicate dimension tables (clearer but redundant)
|
|
114
|
+
OrderDate ──── Sales[OrderDate]
|
|
115
|
+
ShipDate ──── Sales[ShipDate]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Naming Conventions
|
|
119
|
+
|
|
120
|
+
| Element | Convention | Example |
|
|
121
|
+
|---------|------------|---------|
|
|
122
|
+
| Fact tables | `Fact_` prefix | `Fact_Sales`, `Fact_Inventory` |
|
|
123
|
+
| Dimension tables | `Dim_` prefix | `Dim_Product`, `Dim_Customer` |
|
|
124
|
+
| Bridge tables | `Bridge_` prefix | `Bridge_CustomerProduct` |
|
|
125
|
+
| Foreign keys | Match dimension key name | `ProductKey`, `CustomerKey` |
|
|
126
|
+
| Measures | Business-friendly names | `Total Sales`, `Avg Order Value` |
|
|
127
|
+
|
|
128
|
+
## Common Patterns
|
|
129
|
+
|
|
130
|
+
### Many-to-Many with Bridge Table
|
|
131
|
+
```
|
|
132
|
+
Dim_Customer ──(1:*)── Bridge_CustomerProduct ──(*:1)── Dim_Product
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Slowly Changing Dimensions (SCD)
|
|
136
|
+
```
|
|
137
|
+
Type 1: Overwrite (no history)
|
|
138
|
+
Type 2: Add new row with version tracking
|
|
139
|
+
- StartDate, EndDate, IsCurrent flag
|
|
140
|
+
|
|
141
|
+
Dim_Customer_SCD2
|
|
142
|
+
├── CustomerKey (surrogate, unique per version)
|
|
143
|
+
├── CustomerID (business key)
|
|
144
|
+
├── CustomerName
|
|
145
|
+
├── Address
|
|
146
|
+
├── StartDate
|
|
147
|
+
├── EndDate
|
|
148
|
+
└── IsCurrent
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Junk Dimension (Low-Cardinality Flags)
|
|
152
|
+
Combine multiple low-cardinality attributes:
|
|
153
|
+
```
|
|
154
|
+
Dim_OrderFlags
|
|
155
|
+
├── OrderFlagKey
|
|
156
|
+
├── IsRush
|
|
157
|
+
├── IsGift
|
|
158
|
+
├── IsOnline
|
|
159
|
+
└── PaymentType
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Degenerate Dimension
|
|
163
|
+
Attributes stored in fact table (no separate dimension):
|
|
164
|
+
```
|
|
165
|
+
Fact_Sales
|
|
166
|
+
├── ...
|
|
167
|
+
├── InvoiceNumber (degenerate dimension)
|
|
168
|
+
├── OrderNumber (degenerate dimension)
|
|
169
|
+
└── ...
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Performance Optimization
|
|
173
|
+
|
|
174
|
+
### Column Organization
|
|
175
|
+
1. Hide foreign keys from report view
|
|
176
|
+
2. Hide technical columns (keys, IDs)
|
|
177
|
+
3. Organize visible columns in display folders
|
|
178
|
+
4. Set appropriate data types
|
|
179
|
+
|
|
180
|
+
### Data Reduction
|
|
181
|
+
1. Remove unused columns
|
|
182
|
+
2. Aggregate historical data (archive detail)
|
|
183
|
+
3. Use incremental refresh for large fact tables
|
|
184
|
+
4. Consider aggregation tables for summaries
|
|
185
|
+
|
|
186
|
+
### Relationship Optimization
|
|
187
|
+
1. Use integer keys (not text) for relationships
|
|
188
|
+
2. Ensure proper indexing at source
|
|
189
|
+
3. Minimize bi-directional relationships
|
|
190
|
+
4. Avoid circular relationship paths
|
|
191
|
+
|
|
192
|
+
## Model Validation Checklist
|
|
193
|
+
|
|
194
|
+
- [ ] All relationships are single-direction (except where required)
|
|
195
|
+
- [ ] Date table marked as Date Table
|
|
196
|
+
- [ ] Foreign keys hidden from report view
|
|
197
|
+
- [ ] No circular dependencies
|
|
198
|
+
- [ ] Measures in dedicated folder or table
|
|
199
|
+
- [ ] Appropriate data types assigned
|
|
200
|
+
- [ ] Display folders organized
|
|
201
|
+
- [ ] Key columns properly indexed
|
|
202
|
+
|
|
203
|
+
## Anti-patterns to Avoid
|
|
204
|
+
|
|
205
|
+
### Wide Tables (Flat Files)
|
|
206
|
+
```
|
|
207
|
+
❌ One big table with everything
|
|
208
|
+
✓ Separate into facts and dimensions
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Snowflake Complexity
|
|
212
|
+
```
|
|
213
|
+
❌ Dim_Product → Dim_Category → Dim_Department
|
|
214
|
+
✓ Denormalize: Dim_Product (includes Category, Department)
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Calculated Columns for Measures
|
|
218
|
+
```
|
|
219
|
+
❌ Calculated column: [Profit] = [Revenue] - [Cost]
|
|
220
|
+
✓ Measure: Profit = SUM([Revenue]) - SUM([Cost])
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Missing Date Dimension
|
|
224
|
+
```
|
|
225
|
+
❌ Using date column directly from fact table
|
|
226
|
+
✓ Proper Date dimension with all time intelligence attributes
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Complexity Adaptation
|
|
230
|
+
|
|
231
|
+
Adjust depth based on `config.json → experienceLevel`:
|
|
232
|
+
- **beginner**: Step-by-step with explanations, reference library examples
|
|
233
|
+
- **intermediate**: Standard depth, explain non-obvious decisions
|
|
234
|
+
- **advanced**: Concise, skip basics, focus on edge cases and optimization
|
|
235
|
+
|
|
236
|
+
## Related Skills
|
|
237
|
+
|
|
238
|
+
- `/data-model-design` — Interactive model builder
|
|
239
|
+
- `/dax` — Write measures for the model
|
|
240
|
+
- `/semantic-model` — Advanced semantic model patterns
|
|
241
|
+
- `/governance` — Naming conventions for model objects
|
|
242
|
+
|
|
243
|
+
## Related Resources
|
|
244
|
+
|
|
245
|
+
- [Snippets: Time Intelligence](../../snippets/dax/time-intelligence.md)
|
|
246
|
+
- [Templates: Data Models](../../templates/data-models/)
|