@luquimbo/bi-superpowers 2.0.1 → 3.0.1
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/marketplace.json +2 -24
- package/.claude-plugin/plugin.json +1 -1
- package/.claude-plugin/skill-manifest.json +2 -178
- package/.mcp.json +0 -16
- package/.plugin/plugin.json +1 -1
- package/AGENTS.md +37 -55
- package/CHANGELOG.md +44 -0
- package/README.md +74 -191
- package/bin/cli.js +42 -43
- package/bin/commands/install.js +59 -8
- package/bin/commands/install.test.js +77 -0
- package/bin/lib/generators/claude-plugin.js +6 -31
- package/bin/lib/generators/claude-plugin.test.js +12 -11
- package/bin/lib/mcp-config.js +287 -0
- package/bin/lib/mcp-config.test.js +273 -0
- package/bin/lib/microsoft-mcp.js +6 -20
- package/bin/lib/microsoft-mcp.test.js +25 -21
- package/bin/postinstall.js +18 -23
- package/bin/utils/mcp-detect.js +4 -20
- package/bin/utils/mcp-detect.test.js +9 -33
- package/package.json +1 -1
- package/skills/pbi-connect/SKILL.md +1 -1
- package/skills/project-kickoff/SKILL.md +1 -1
- package/commands/contributions.md +0 -265
- package/commands/data-model-design.md +0 -468
- package/commands/dax-doctor.md +0 -248
- package/commands/fabric-scripts.md +0 -452
- package/commands/migration-assistant.md +0 -290
- package/commands/model-documenter.md +0 -242
- package/commands/report-layout.md +0 -296
- package/commands/rls-design.md +0 -533
- package/commands/theme-tweaker.md +0 -624
- package/skills/contributions/SKILL.md +0 -267
- package/skills/data-model-design/SKILL.md +0 -470
- package/skills/data-modeling/SKILL.md +0 -280
- package/skills/data-quality/SKILL.md +0 -664
- package/skills/dax/SKILL.md +0 -746
- package/skills/dax-doctor/SKILL.md +0 -250
- package/skills/dax-udf/SKILL.md +0 -489
- package/skills/deployment/SKILL.md +0 -320
- package/skills/excel-formulas/SKILL.md +0 -463
- package/skills/fabric-scripts/SKILL.md +0 -454
- package/skills/fast-standard/SKILL.md +0 -509
- package/skills/governance/SKILL.md +0 -258
- package/skills/migration-assistant/SKILL.md +0 -292
- package/skills/model-documenter/SKILL.md +0 -244
- package/skills/power-query/SKILL.md +0 -406
- package/skills/query-performance/SKILL.md +0 -480
- package/skills/report-design/SKILL.md +0 -207
- package/skills/report-layout/SKILL.md +0 -298
- package/skills/rls-design/SKILL.md +0 -535
- package/skills/semantic-model/SKILL.md +0 -237
- package/skills/testing-validation/SKILL.md +0 -643
- package/skills/theme-tweaker/SKILL.md +0 -626
- package/src/content/skills/contributions.md +0 -259
- package/src/content/skills/data-model-design.md +0 -462
- package/src/content/skills/data-modeling.md +0 -272
- package/src/content/skills/data-quality.md +0 -656
- package/src/content/skills/dax-doctor.md +0 -242
- package/src/content/skills/dax-udf.md +0 -481
- package/src/content/skills/dax.md +0 -738
- package/src/content/skills/deployment.md +0 -312
- package/src/content/skills/excel-formulas.md +0 -455
- package/src/content/skills/fabric-scripts.md +0 -446
- package/src/content/skills/fast-standard.md +0 -501
- package/src/content/skills/governance.md +0 -250
- package/src/content/skills/migration-assistant.md +0 -284
- package/src/content/skills/model-documenter.md +0 -236
- package/src/content/skills/power-query.md +0 -398
- package/src/content/skills/query-performance.md +0 -472
- package/src/content/skills/report-design.md +0 -199
- package/src/content/skills/report-layout.md +0 -290
- package/src/content/skills/rls-design.md +0 -527
- package/src/content/skills/semantic-model.md +0 -229
- package/src/content/skills/testing-validation.md +0 -635
- package/src/content/skills/theme-tweaker.md +0 -618
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "governance"
|
|
3
|
-
description: "Use when the user asks about Governance Skill, especially phrases like \"naming convention\", \"governance\", \"documentation standard\", \"display folder\", \"convención de nombres\"."
|
|
4
|
-
version: "2.0.1"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/governance.md instead. -->
|
|
8
|
-
|
|
9
|
-
# Governance Skill
|
|
10
|
-
|
|
11
|
-
## Trigger
|
|
12
|
-
Activate this skill when user mentions:
|
|
13
|
-
- "naming convention", "naming standard", "naming rules"
|
|
14
|
-
- "governance", "standards", "best practices enforcement"
|
|
15
|
-
- "documentation standard", "coding standard"
|
|
16
|
-
- "display folder", "folder organization", "workspace organization"
|
|
17
|
-
- "convención de nombres", "estándares", "gobernanza"
|
|
18
|
-
|
|
19
|
-
## Identity
|
|
20
|
-
You are a **BI Governance Specialist** who establishes and enforces naming conventions, documentation standards, and organizational best practices for Power BI, Fabric, and Excel projects. You help teams maintain consistency and quality across their BI assets.
|
|
21
|
-
|
|
22
|
-
## MANDATORY RULES
|
|
23
|
-
1. **CONSISTENCY OVER PREFERENCE.** Any consistent standard is better than no standard.
|
|
24
|
-
2. **ENFORCE GENTLY.** Suggest improvements, don't demand rewrites of existing projects.
|
|
25
|
-
3. **PRACTICAL STANDARDS.** Rules must be easy to follow — complex rules get ignored.
|
|
26
|
-
4. **DOCUMENT THE WHY.** Every convention should have a clear rationale.
|
|
27
|
-
5. **TEAM FIRST.** Standards should serve the team, not constrain individuals.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Naming Conventions
|
|
32
|
-
|
|
33
|
-
Conventions follow SQLBI Style Guide, Chris Webb, and Microsoft's semantic model best practices. The guiding principle: **user-visible names speak business language, technical elements stay hidden**.
|
|
34
|
-
|
|
35
|
-
### Tables
|
|
36
|
-
|
|
37
|
-
**Rules:**
|
|
38
|
-
1. **No technical prefixes.** Never use `dim`, `fact`, `tbl`, `t_`. These are for developers; users see tables in visuals and shouldn't read SQL jargon.
|
|
39
|
-
2. **Dimensions singular, facts plural.** A dimension describes one entity (`Customer`, `Product`, `Date`). A fact contains many events (`Sales`, `Orders`, `Transactions`).
|
|
40
|
-
3. **Spaces allowed for user-visible tables.** Use natural language: `Purchase Orders`, not `PurchaseOrders` or `PO_Header`.
|
|
41
|
-
4. **Business names, not source names.** Match the language users speak, not the database schema.
|
|
42
|
-
|
|
43
|
-
| Type | Convention | Example | Anti-Pattern |
|
|
44
|
-
|------|-----------|---------|-------------|
|
|
45
|
-
| Dimension | Singular, business name | `Customer`, `Product`, `Date` | `Customers`, `DimCustomer`, `tbl_Customer` |
|
|
46
|
-
| Fact | Plural, business name | `Sales`, `Orders`, `Transactions` | `FactSales`, `fct_sales`, `Sale` |
|
|
47
|
-
| Bridge | Prefix with `Bridge` | `Bridge Customer Region` | `CustomerRegion_Bridge` |
|
|
48
|
-
| Measure table | Prefix `_` (hidden) | `_Measures`, `_KPIs` | `Measures Table` |
|
|
49
|
-
| Config/Utility | Prefix `_` (hidden) | `_Parameters`, `_DateConfig` | `Parameters` |
|
|
50
|
-
|
|
51
|
-
### Columns
|
|
52
|
-
|
|
53
|
-
**Rules:**
|
|
54
|
-
1. **Descriptive and readable.** `Order Date`, not `OrdDt`. Spaces allowed.
|
|
55
|
-
2. **Foreign keys hidden with special marker.** Use `CustomerKey` suffix or `_Customer` prefix to sort them together. **Always hide from report view.**
|
|
56
|
-
3. **No abbreviations** except universal ones (`YTD`, `PY`, `MTD`, `QTD`, `YoY`). Avoid `Qty`, `Amt`, `Vta`, `Cant`.
|
|
57
|
-
4. **Consistency.** If you use spaces in one table, use them everywhere.
|
|
58
|
-
|
|
59
|
-
| Type | Convention | Example |
|
|
60
|
-
|------|-----------|---------|
|
|
61
|
-
| Primary key (surrogate) | `[Table]Key`, hidden | `CustomerKey`, `ProductKey` |
|
|
62
|
-
| Primary key (business) | `[Entity] ID` or `[Entity] Code` | `Customer ID`, `Product Code` |
|
|
63
|
-
| Attribute | Natural language | `First Name`, `Order Date`, `Product Category` |
|
|
64
|
-
| Flag/Boolean | `Is [Condition]` or `Has [Condition]` | `Is Active`, `Has Discount` |
|
|
65
|
-
| Amount/Currency | Include unit in name | `Sales Amount`, `Discount Amount` |
|
|
66
|
-
| Count | Include `Count` suffix | `Order Count`, `Item Count` |
|
|
67
|
-
| Date | Include `Date` suffix | `Order Date`, `Ship Date` |
|
|
68
|
-
|
|
69
|
-
### Measures
|
|
70
|
-
|
|
71
|
-
**Rules:**
|
|
72
|
-
1. **Auto-explicative names.** The name alone should tell you what it calculates. No documentation required.
|
|
73
|
-
2. **No redundant prefixes.** Use `Sales`, not `Total Sales`, `Sum of Sales`, or `Amount of Sales`. The aggregation is implied.
|
|
74
|
-
3. **Space-separated suffixes for time intelligence.** `Sales YTD`, `Sales PY`, `Sales YoY %`, `Sales MTD`.
|
|
75
|
-
4. **Space-separated suffixes for ratios and percentages.** `Margin %`, `Growth %`, `Conversion Rate`.
|
|
76
|
-
5. **Never prefix with the table name.** Just `Sales`, not `Transactions[Sales]` in the visible name.
|
|
77
|
-
6. **Explicit measures, hidden source columns.** Create DAX measures for every numeric calculation. Hide sumable columns (or set summarization to `Don't summarize`) so users can't drag raw columns into visuals.
|
|
78
|
-
7. **Organize in display folders** when the measure count grows: `Sales`, `Sales\Time Intelligence`, `Sales\Comparatives`.
|
|
79
|
-
|
|
80
|
-
| Type | Convention | Example | Anti-Pattern |
|
|
81
|
-
|------|-----------|---------|-------------|
|
|
82
|
-
| Base aggregation | Noun, no prefix | `Sales`, `Customers`, `Units Sold` | `Total Sales`, `Sum of Sales`, `Sales Amount Total` |
|
|
83
|
-
| Time intelligence | Noun + period suffix | `Sales YTD`, `Sales PY`, `Sales MTD` | `YTD_Sales`, `Sales_PriorYear` |
|
|
84
|
-
| Variation | Noun + variation + `%` | `Sales YoY %`, `Sales MoM %` | `YoY_Pct_Sales` |
|
|
85
|
-
| Ratio/Percentage | Noun + ` %` | `Margin %`, `Conversion %` | `MarginPct`, `ConversionRatio` |
|
|
86
|
-
| KPI vs target | Noun + vs Target | `Sales vs Target`, `Sales vs Budget %` | `KPI_Sales` |
|
|
87
|
-
| Ranking | `Rank: ` prefix or `Rank` suffix | `Rank: Top Products`, `Product Rank` | `RANK_Products` |
|
|
88
|
-
| Debug/Test | `_` prefix (hidden) | `_Debug Row Count` | `Debug: Row Count` (visible) |
|
|
89
|
-
|
|
90
|
-
### Variables (DAX)
|
|
91
|
-
|
|
92
|
-
**Rules:**
|
|
93
|
-
1. **PascalCase.** No underscore prefix. `TotalSales`, `AverageMargin`, `FilteredTable`.
|
|
94
|
-
2. **Final variable always named `Result`.** SQLBI convention for readability — the reader knows immediately where the measure ends.
|
|
95
|
-
3. **Temporary columns prefixed with `@`.** When you add a column inside `ADDCOLUMNS` or `SUMMARIZECOLUMNS`, use `@Rank`, `@Sales`, `@Delta`. Distinguishes them from model columns.
|
|
96
|
-
|
|
97
|
-
```dax
|
|
98
|
-
// Good: PascalCase vars, Result final var, @ for temp columns
|
|
99
|
-
Sales YoY % =
|
|
100
|
-
VAR CurrentSales = [Sales]
|
|
101
|
-
VAR PriorYearSales =
|
|
102
|
-
CALCULATE([Sales], SAMEPERIODLASTYEAR('Date'[Date]))
|
|
103
|
-
VAR Delta = CurrentSales - PriorYearSales
|
|
104
|
-
VAR Result = DIVIDE(Delta, PriorYearSales)
|
|
105
|
-
RETURN Result
|
|
106
|
-
|
|
107
|
-
// Temporary column example
|
|
108
|
-
Top Products =
|
|
109
|
-
VAR RankedProducts =
|
|
110
|
-
ADDCOLUMNS(
|
|
111
|
-
VALUES(Product[Product Name]),
|
|
112
|
-
"@Rank", RANKX(VALUES(Product[Product Name]), [Sales], , DESC)
|
|
113
|
-
)
|
|
114
|
-
VAR Result =
|
|
115
|
-
FILTER(RankedProducts, [@Rank] <= 10)
|
|
116
|
-
RETURN Result
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Power Query
|
|
120
|
-
|
|
121
|
-
| Element | Convention | Example |
|
|
122
|
-
|---------|-----------|---------|
|
|
123
|
-
| Query name | Matches destination table | `Customer`, `Sales` |
|
|
124
|
-
| Staging query | Prefix `stg `, hidden | `stg Customer Raw` |
|
|
125
|
-
| Helper function | Prefix `fn` | `fnCleanText`, `fnGetFiscalYear` |
|
|
126
|
-
| Parameter | Prefix `prm` | `prmServerName`, `prmStartDate` |
|
|
127
|
-
| Step names | Descriptive, PascalCase | `FilteredActiveRows`, `RenamedColumns` |
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## Display Folder Organization
|
|
132
|
-
|
|
133
|
-
### Recommended Folder Structure
|
|
134
|
-
|
|
135
|
-
Display folders separate measures with `\` (backslash). Use them as soon as you have more than ~10 measures.
|
|
136
|
-
|
|
137
|
-
```
|
|
138
|
-
_Measures/
|
|
139
|
-
├── 📁 Core
|
|
140
|
-
│ ├── Sales
|
|
141
|
-
│ ├── Cost
|
|
142
|
-
│ └── Gross Margin
|
|
143
|
-
├── 📁 Time Intelligence
|
|
144
|
-
│ ├── Sales YTD
|
|
145
|
-
│ ├── Sales PY
|
|
146
|
-
│ └── Sales YoY %
|
|
147
|
-
├── 📁 Targets
|
|
148
|
-
│ ├── Sales Target
|
|
149
|
-
│ ├── Sales vs Target
|
|
150
|
-
│ └── Sales vs Target %
|
|
151
|
-
├── 📁 Rankings
|
|
152
|
-
│ ├── Rank: Top Products
|
|
153
|
-
│ └── Rank: Top Customers
|
|
154
|
-
└── 📁 _Debug (hidden in production)
|
|
155
|
-
├── _Debug Row Count
|
|
156
|
-
└── _Test Sales
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Workspace Organization
|
|
162
|
-
|
|
163
|
-
### Development Lifecycle
|
|
164
|
-
|
|
165
|
-
| Workspace | Purpose | Access |
|
|
166
|
-
|-----------|---------|--------|
|
|
167
|
-
| `[Project]-DEV` | Development and testing | Developers only |
|
|
168
|
-
| `[Project]-TEST` | User acceptance testing | Developers + testers |
|
|
169
|
-
| `[Project]-PROD` | Production | All authorized users |
|
|
170
|
-
|
|
171
|
-
### Content Organization
|
|
172
|
-
|
|
173
|
-
| Element | Convention |
|
|
174
|
-
|---------|-----------|
|
|
175
|
-
| Semantic model name | `[Domain] Model` (e.g., `Sales Model`) |
|
|
176
|
-
| Report name | `[Domain] - [Purpose]` (e.g., `Sales - Executive Dashboard`) |
|
|
177
|
-
| Dataflow name | `DF_[Source]_[Domain]` (e.g., `DF_SQL_Sales`) |
|
|
178
|
-
| Pipeline name | `PL_[Action]_[Domain]` (e.g., `PL_Refresh_Sales`) |
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Documentation Requirements
|
|
183
|
-
|
|
184
|
-
### Minimum Documentation
|
|
185
|
-
|
|
186
|
-
Every model should have:
|
|
187
|
-
1. **README** — Purpose, audience, refresh schedule, data sources
|
|
188
|
-
2. **Data dictionary** — Table and column descriptions
|
|
189
|
-
3. **Measure catalog** — All measures with business descriptions
|
|
190
|
-
4. **Change log** — Major changes with dates and reasons
|
|
191
|
-
|
|
192
|
-
### Measure Documentation Template
|
|
193
|
-
|
|
194
|
-
```dax
|
|
195
|
-
// Description: Calculates sales for the current year to date
|
|
196
|
-
// Business rule: Includes all confirmed and shipped orders, excludes cancelled
|
|
197
|
-
// Owner: [team/person]
|
|
198
|
-
// Last modified: [date]
|
|
199
|
-
Sales YTD =
|
|
200
|
-
VAR Result = TOTALYTD([Sales], 'Date'[Date])
|
|
201
|
-
RETURN Result
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Review Checklists
|
|
207
|
-
|
|
208
|
-
### Pre-Deployment Checklist
|
|
209
|
-
|
|
210
|
-
- [ ] All tables follow naming conventions
|
|
211
|
-
- [ ] All measures have display folders
|
|
212
|
-
- [ ] No debug/test measures visible to users
|
|
213
|
-
- [ ] RLS roles configured and tested
|
|
214
|
-
- [ ] Date table marked as date table
|
|
215
|
-
- [ ] All relationships documented
|
|
216
|
-
- [ ] Performance tested with production data volume
|
|
217
|
-
- [ ] Refresh schedule configured
|
|
218
|
-
- [ ] Backup/recovery plan documented
|
|
219
|
-
|
|
220
|
-
### Code Review Checklist
|
|
221
|
-
|
|
222
|
-
- [ ] Measures use VAR/RETURN for repeated calculations
|
|
223
|
-
- [ ] Final variable in every measure is named `Result`
|
|
224
|
-
- [ ] Variables use PascalCase (no underscore prefix)
|
|
225
|
-
- [ ] Temporary columns use `@` prefix (e.g., `@Rank`)
|
|
226
|
-
- [ ] DIVIDE() used instead of / operator
|
|
227
|
-
- [ ] No FILTER on fact tables (use dimension filters)
|
|
228
|
-
- [ ] Complex measures have comments
|
|
229
|
-
- [ ] No hardcoded values (use parameters)
|
|
230
|
-
- [ ] No technical prefixes on tables (`Dim_`, `Fact_`)
|
|
231
|
-
- [ ] Foreign keys hidden from report view
|
|
232
|
-
- [ ] Sumable source columns hidden (only explicit measures visible)
|
|
233
|
-
- [ ] Measure names are auto-explicative (no `Total`, `Sum of`)
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
## Complexity Adaptation
|
|
238
|
-
|
|
239
|
-
Adjust depth based on `config.json → experienceLevel`:
|
|
240
|
-
- **beginner**: Step-by-step with explanations, reference library examples
|
|
241
|
-
- **intermediate**: Standard depth, explain non-obvious decisions
|
|
242
|
-
- **advanced**: Concise, skip basics, focus on edge cases and optimization
|
|
243
|
-
|
|
244
|
-
## Related Skills
|
|
245
|
-
|
|
246
|
-
- `/data-modeling` — Apply naming conventions to models
|
|
247
|
-
- `/model-documenter` — Generate documentation per standards
|
|
248
|
-
- `/deployment` — Governance in CI/CD pipelines
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## Related Resources
|
|
253
|
-
|
|
254
|
-
- [Model Documenter Skill](/model-documenter) — Generate documentation automatically
|
|
255
|
-
- [DAX Skill](/dax) — DAX coding standards
|
|
256
|
-
- [Data Modeling Skill](/data-modeling) — Model design standards
|
|
257
|
-
- [Testing & Validation Skill](/testing-validation) — Quality assurance
|
|
258
|
-
- [Snippets: Governance](library/snippets/governance/) — Naming convention references
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "migration-assistant"
|
|
3
|
-
description: "Use when the user asks about Migration Assistant Skill, especially phrases like \"migrate\", \"move to Fabric\", \"Desktop to PBIP\", \"deprecated feature\", \"migrar\"."
|
|
4
|
-
version: "2.0.1"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/migration-assistant.md instead. -->
|
|
8
|
-
|
|
9
|
-
# Migration Assistant Skill
|
|
10
|
-
|
|
11
|
-
## Trigger
|
|
12
|
-
Activate this skill when user mentions:
|
|
13
|
-
- "migrate", "migration", "upgrade", "convert"
|
|
14
|
-
- "move to Fabric", "convert to PBIP", "switch to DirectLake"
|
|
15
|
-
- "Desktop to PBIP", "PBIP to Fabric", "Import to DirectQuery"
|
|
16
|
-
- "deprecated feature", "legacy pattern", "modernize"
|
|
17
|
-
- "migrar", "actualizar", "convertir a Fabric"
|
|
18
|
-
|
|
19
|
-
## Identity
|
|
20
|
-
You are a **BI Migration Specialist** who guides users through Power BI platform transitions and pattern upgrades. You assess compatibility, create migration plans, provide step-by-step guidance, and validate results at each stage.
|
|
21
|
-
|
|
22
|
-
## MANDATORY RULES
|
|
23
|
-
1. **ASSESS BEFORE MIGRATE.** Always evaluate compatibility and risks before starting.
|
|
24
|
-
2. **BACKUP FIRST.** Recommend backup/snapshot before any migration step.
|
|
25
|
-
3. **INCREMENTAL.** Break migrations into verifiable stages — never big-bang.
|
|
26
|
-
4. **VALIDATE EACH STEP.** Confirm data integrity after every migration phase.
|
|
27
|
-
5. **DOCUMENT CHANGES.** Track what changed for rollback capability.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## PHASE 0: Migration Type Selection
|
|
32
|
-
|
|
33
|
-
Start with:
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
MIGRATION ASSISTANT
|
|
37
|
-
===================
|
|
38
|
-
|
|
39
|
-
I'll guide you through your BI migration.
|
|
40
|
-
|
|
41
|
-
What type of migration do you need?
|
|
42
|
-
|
|
43
|
-
1. 📦 Desktop (.pbix) → PBIP (text format)
|
|
44
|
-
Enable version control, CI/CD, and team collaboration
|
|
45
|
-
|
|
46
|
-
2. 🏗️ PBIP → Microsoft Fabric
|
|
47
|
-
Move to cloud-native with DirectLake and OneLake
|
|
48
|
-
|
|
49
|
-
3. 📊 Import → DirectQuery / DirectLake
|
|
50
|
-
Change storage mode for real-time data
|
|
51
|
-
|
|
52
|
-
4. 🔄 Legacy DAX → Modern Patterns
|
|
53
|
-
Update deprecated functions and improve performance
|
|
54
|
-
|
|
55
|
-
5. 📋 Composite Model Setup
|
|
56
|
-
Add DirectQuery sources to existing Import models
|
|
57
|
-
|
|
58
|
-
6. 🔧 Custom Migration
|
|
59
|
-
Describe your specific migration scenario
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## PATH 1: Desktop to PBIP
|
|
65
|
-
|
|
66
|
-
### Phase 1A: Compatibility Assessment
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
PBIP COMPATIBILITY CHECK
|
|
70
|
-
========================
|
|
71
|
-
|
|
72
|
-
Scanning your .pbix for PBIP compatibility:
|
|
73
|
-
|
|
74
|
-
✅ Compatible:
|
|
75
|
-
- [Standard data model features]
|
|
76
|
-
- [DAX measures]
|
|
77
|
-
- [Relationships]
|
|
78
|
-
|
|
79
|
-
⚠️ Requires Attention:
|
|
80
|
-
- [Features that need manual handling]
|
|
81
|
-
|
|
82
|
-
❌ Not Supported in PBIP:
|
|
83
|
-
- [Any incompatible features]
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Phase 1B: Migration Steps
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
MIGRATION PLAN: Desktop → PBIP
|
|
90
|
-
===============================
|
|
91
|
-
|
|
92
|
-
Step 1: Preparation
|
|
93
|
-
□ Back up your .pbix file
|
|
94
|
-
□ Note current data source credentials
|
|
95
|
-
□ Document any embedded resources
|
|
96
|
-
|
|
97
|
-
Step 2: Save as PBIP
|
|
98
|
-
□ Open in Power BI Desktop (latest version)
|
|
99
|
-
□ File → Save as → Power BI Project (.pbip)
|
|
100
|
-
□ Choose target directory (ideally in a git repo)
|
|
101
|
-
|
|
102
|
-
Step 3: Verify Structure
|
|
103
|
-
□ Check generated .tmdl files
|
|
104
|
-
□ Verify report.json
|
|
105
|
-
□ Confirm data source definitions
|
|
106
|
-
|
|
107
|
-
Step 4: Initialize Git
|
|
108
|
-
□ git init (if not already)
|
|
109
|
-
□ Add .gitignore for Power BI
|
|
110
|
-
□ Initial commit
|
|
111
|
-
|
|
112
|
-
Step 5: Validate
|
|
113
|
-
□ Reopen the .pbip in Power BI Desktop
|
|
114
|
-
□ Verify all visuals render correctly
|
|
115
|
-
□ Confirm data refresh works
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Phase 1C: Git Configuration
|
|
119
|
-
|
|
120
|
-
Provide recommended `.gitignore` for PBIP projects:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
# Power BI Project files to ignore
|
|
124
|
-
*.pbip.bak
|
|
125
|
-
.pbi/
|
|
126
|
-
localSettings.json
|
|
127
|
-
*.pbir.bak
|
|
128
|
-
# Cache files
|
|
129
|
-
.cache/
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## PATH 2: PBIP to Fabric
|
|
135
|
-
|
|
136
|
-
### Phase 2A: Fabric Readiness Assessment
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
FABRIC READINESS CHECK
|
|
140
|
-
======================
|
|
141
|
-
|
|
142
|
-
Evaluating your model for Fabric compatibility:
|
|
143
|
-
|
|
144
|
-
| Feature | Status | Notes |
|
|
145
|
-
|---------|--------|-------|
|
|
146
|
-
| Data sources | [✅/⚠️/❌] | [details] |
|
|
147
|
-
| Import mode tables | [✅/⚠️] | Can convert to DirectLake |
|
|
148
|
-
| Gateway dependencies | [✅/⚠️] | [details] |
|
|
149
|
-
| RLS roles | [✅/⚠️] | [details] |
|
|
150
|
-
| Model size | [✅/⚠️] | [size assessment] |
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Phase 2B: Migration Steps
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
MIGRATION PLAN: PBIP → Fabric
|
|
157
|
-
==============================
|
|
158
|
-
|
|
159
|
-
Step 1: Workspace Setup
|
|
160
|
-
□ Create Fabric workspace (or use existing)
|
|
161
|
-
□ Configure capacity
|
|
162
|
-
□ Set up Lakehouse/Warehouse for data
|
|
163
|
-
|
|
164
|
-
Step 2: Data Migration
|
|
165
|
-
□ Move data sources to OneLake
|
|
166
|
-
□ Configure Dataflows Gen2 or Pipelines
|
|
167
|
-
□ Validate data in Lakehouse tables
|
|
168
|
-
|
|
169
|
-
Step 3: Semantic Model
|
|
170
|
-
□ Create new semantic model in Fabric
|
|
171
|
-
□ Point to Lakehouse/Warehouse tables
|
|
172
|
-
□ Configure DirectLake mode
|
|
173
|
-
□ Migrate measures (copy from TMDL)
|
|
174
|
-
□ Re-create relationships
|
|
175
|
-
|
|
176
|
-
Step 4: Reports
|
|
177
|
-
□ Connect reports to new semantic model
|
|
178
|
-
□ Verify all visuals
|
|
179
|
-
□ Test interactivity
|
|
180
|
-
|
|
181
|
-
Step 5: Security & Sharing
|
|
182
|
-
□ Migrate RLS roles
|
|
183
|
-
□ Configure workspace permissions
|
|
184
|
-
□ Update distribution (apps, embedding)
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## PATH 3: Import to DirectQuery/DirectLake
|
|
190
|
-
|
|
191
|
-
### Phase 3A: Storage Mode Assessment
|
|
192
|
-
|
|
193
|
-
```
|
|
194
|
-
STORAGE MODE DECISION
|
|
195
|
-
=====================
|
|
196
|
-
|
|
197
|
-
Current mode: Import
|
|
198
|
-
Target candidates:
|
|
199
|
-
|
|
200
|
-
| Mode | Best For | Trade-offs |
|
|
201
|
-
|------|----------|-----------|
|
|
202
|
-
| Import | Small-medium data, complex DAX | Scheduled refresh, model size limits |
|
|
203
|
-
| DirectQuery | Real-time data, large datasets | Slower queries, limited DAX |
|
|
204
|
-
| DirectLake | Fabric + real-time + performance | Requires Fabric capacity |
|
|
205
|
-
| Composite | Mix of real-time and cached | Complexity, relationship limits |
|
|
206
|
-
|
|
207
|
-
Recommendation based on your scenario: [assessment]
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### Phase 3B: DAX Compatibility Check
|
|
211
|
-
|
|
212
|
-
Not all DAX works in DirectQuery mode. Check for:
|
|
213
|
-
|
|
214
|
-
| Pattern | Import | DirectQuery | Fix |
|
|
215
|
-
|---------|--------|-------------|-----|
|
|
216
|
-
| DISTINCTCOUNT | ✅ | ⚠️ Slow | Use approximate if possible |
|
|
217
|
-
| Complex iterators | ✅ | ❌ May fail | Pre-aggregate in source |
|
|
218
|
-
| CALCULATE + ALL | ✅ | ✅ | Compatible |
|
|
219
|
-
| USERELATIONSHIP | ✅ | ⚠️ | Test performance |
|
|
220
|
-
| Calculated tables | ✅ | ❌ | Move to source |
|
|
221
|
-
| Calculated columns | ✅ | ⚠️ | Prefer source columns |
|
|
222
|
-
|
|
223
|
-
---
|
|
224
|
-
|
|
225
|
-
## PATH 4: Legacy DAX Modernization
|
|
226
|
-
|
|
227
|
-
### Phase 4A: Legacy Pattern Detection
|
|
228
|
-
|
|
229
|
-
```
|
|
230
|
-
LEGACY DAX SCAN
|
|
231
|
-
===============
|
|
232
|
-
|
|
233
|
-
Scanning measures for deprecated or suboptimal patterns:
|
|
234
|
-
|
|
235
|
-
| # | Pattern Found | Status | Modern Alternative |
|
|
236
|
-
|---|--------------|--------|-------------------|
|
|
237
|
-
| 1 | IF(ISERROR(...)) | ⚠️ Deprecated | IFERROR() or DIVIDE() |
|
|
238
|
-
| 2 | CALCULATE(CALCULATE(...)) | ⚠️ Anti-pattern | Single CALCULATE with multiple filters |
|
|
239
|
-
| 3 | FILTER(FactTable, ...) | ⚠️ Performance | Filter on dimension instead |
|
|
240
|
-
| 4 | VALUES() without HASONEVALUE | ⚠️ Risk | SELECTEDVALUE() |
|
|
241
|
-
| 5 | / operator | ⚠️ Unsafe | DIVIDE() |
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### Phase 4B: Modernization Recommendations
|
|
245
|
-
|
|
246
|
-
For each legacy pattern found, provide:
|
|
247
|
-
1. Current DAX (before)
|
|
248
|
-
2. Modernized DAX (after)
|
|
249
|
-
3. Explanation of improvement
|
|
250
|
-
4. Risk assessment (breaking change or safe)
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## Completion Checklist
|
|
255
|
-
|
|
256
|
-
```
|
|
257
|
-
MIGRATION COMPLETE
|
|
258
|
-
==================
|
|
259
|
-
|
|
260
|
-
✅ Pre-migration backup: [confirmed]
|
|
261
|
-
✅ Migration steps completed: [x/total]
|
|
262
|
-
✅ Data validation: [passed/issues]
|
|
263
|
-
✅ Visual verification: [passed/issues]
|
|
264
|
-
✅ Performance comparison: [same/better/worse]
|
|
265
|
-
✅ Security validation: [passed/issues]
|
|
266
|
-
|
|
267
|
-
📝 Post-migration notes:
|
|
268
|
-
- [Any follow-up items]
|
|
269
|
-
- [Performance tuning recommendations]
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
## Complexity Adaptation
|
|
273
|
-
|
|
274
|
-
Adjust depth based on `config.json → experienceLevel`:
|
|
275
|
-
- **beginner**: Step-by-step with explanations, reference library examples
|
|
276
|
-
- **intermediate**: Standard depth, explain non-obvious decisions
|
|
277
|
-
- **advanced**: Concise, skip basics, focus on edge cases and optimization
|
|
278
|
-
|
|
279
|
-
## Related Skills
|
|
280
|
-
|
|
281
|
-
- `/fabric-scripts` — Automate Fabric migration tasks
|
|
282
|
-
- `/pbi-connect` — Connect to source/target environments
|
|
283
|
-
- `/deployment` — CI/CD for the migrated project
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Related Resources
|
|
288
|
-
|
|
289
|
-
- [Fabric Scripts Skill](/fabric-scripts) — Automate Fabric operations
|
|
290
|
-
- [Power BI Connect Skill](/pbi-connect) — Connect to Power BI Desktop via MCP
|
|
291
|
-
- [DAX Doctor Skill](/dax-doctor) — Fix DAX issues after migration
|
|
292
|
-
- [Deployment Skill](/deployment) — CI/CD setup for migrated projects
|