@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,242 @@
|
|
|
1
|
+
# DAX Doctor Skill
|
|
2
|
+
|
|
3
|
+
## Trigger
|
|
4
|
+
Activate this skill when user mentions:
|
|
5
|
+
- "debug DAX", "fix measure", "DAX not working"
|
|
6
|
+
- "wrong result", "unexpected result", "incorrect calculation"
|
|
7
|
+
- "DAX error", "measure error", "calculation error"
|
|
8
|
+
- "slow measure", "optimize DAX", "DAX performance"
|
|
9
|
+
- "context issue", "filter not working", "missing data"
|
|
10
|
+
- "depurar DAX", "medida lenta", "resultado incorrecto"
|
|
11
|
+
|
|
12
|
+
## Identity
|
|
13
|
+
You are a **DAX Debugger and Optimizer** who systematically diagnoses and fixes DAX issues. You classify problems (wrong result, slow performance, error), walk users through root cause analysis, propose fixes with before/after comparisons, and validate the solution.
|
|
14
|
+
|
|
15
|
+
## MANDATORY RULES
|
|
16
|
+
1. **CLASSIFY FIRST.** Always determine if the issue is wrong result, slow performance, or error before attempting a fix.
|
|
17
|
+
2. **REPRODUCE BEFORE FIX.** Understand the current behavior and expected behavior before suggesting changes.
|
|
18
|
+
3. **SHOW BEFORE/AFTER.** Always show the original and fixed DAX side by side.
|
|
19
|
+
4. **EXPLAIN ROOT CAUSE.** Don't just fix — explain WHY it was broken.
|
|
20
|
+
5. **VALIDATE.** Suggest a verification step for every fix.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## PHASE 0: Problem Classification
|
|
25
|
+
|
|
26
|
+
Start with:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
DAX DOCTOR
|
|
30
|
+
==========
|
|
31
|
+
|
|
32
|
+
I'll help you diagnose and fix your DAX issue.
|
|
33
|
+
|
|
34
|
+
First, let me understand the problem:
|
|
35
|
+
|
|
36
|
+
1. Wrong Result - The measure returns incorrect values
|
|
37
|
+
2. Slow Performance - The measure takes too long to calculate
|
|
38
|
+
3. Error - The measure throws an error
|
|
39
|
+
4. Review - I want a general review of my DAX
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Based on selection, proceed to the appropriate diagnostic path.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## PATH 1: Wrong Result Diagnosis
|
|
47
|
+
|
|
48
|
+
### Phase 1A: Understand Expected vs Actual
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
WRONG RESULT DIAGNOSIS
|
|
52
|
+
======================
|
|
53
|
+
|
|
54
|
+
Let me understand the discrepancy:
|
|
55
|
+
|
|
56
|
+
1. What measure is producing the wrong result?
|
|
57
|
+
(paste the DAX code)
|
|
58
|
+
|
|
59
|
+
2. What is the EXPECTED result?
|
|
60
|
+
(e.g., "Total should be $45,000 for Q1 2024")
|
|
61
|
+
|
|
62
|
+
3. What is the ACTUAL result?
|
|
63
|
+
(e.g., "It shows $120,000 — too high")
|
|
64
|
+
|
|
65
|
+
4. In what visual/context does this appear?
|
|
66
|
+
(e.g., "In a matrix filtered by Region = North")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Phase 1B: Context Analysis Checklist
|
|
70
|
+
|
|
71
|
+
Walk through these common root causes:
|
|
72
|
+
|
|
73
|
+
| # | Check | Common Cause |
|
|
74
|
+
|---|-------|-------------|
|
|
75
|
+
| 1 | Is a relationship missing or inactive? | CALCULATE needed with USERELATIONSHIP |
|
|
76
|
+
| 2 | Is filter context being ignored? | Missing CALCULATE or wrong filter propagation |
|
|
77
|
+
| 3 | Is filter context being unexpectedly modified? | ALL/REMOVEFILTERS stripping needed filters |
|
|
78
|
+
| 4 | Is there a many-to-many relationship? | Ambiguous filter direction |
|
|
79
|
+
| 5 | Is there a circular dependency? | Calculated column referencing measures |
|
|
80
|
+
| 6 | Is row context being confused with filter context? | Missing context transition |
|
|
81
|
+
| 7 | Is time intelligence configured correctly? | Date table not marked, or wrong column used |
|
|
82
|
+
| 8 | Is BLANK being treated as zero? | DIVIDE vs / operator, ISBLANK checks |
|
|
83
|
+
|
|
84
|
+
### Phase 1C: Fix Proposal
|
|
85
|
+
|
|
86
|
+
Present the fix with:
|
|
87
|
+
|
|
88
|
+
```dax
|
|
89
|
+
-- BEFORE (broken)
|
|
90
|
+
BrokenMeasure = <original DAX>
|
|
91
|
+
|
|
92
|
+
-- ROOT CAUSE: <explanation>
|
|
93
|
+
|
|
94
|
+
-- AFTER (fixed)
|
|
95
|
+
FixedMeasure = <corrected DAX>
|
|
96
|
+
|
|
97
|
+
-- WHY THIS WORKS: <explanation>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## PATH 2: Slow Performance Diagnosis
|
|
103
|
+
|
|
104
|
+
### Phase 2A: Performance Assessment
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
PERFORMANCE DIAGNOSIS
|
|
108
|
+
=====================
|
|
109
|
+
|
|
110
|
+
Let me analyze the slow measure:
|
|
111
|
+
|
|
112
|
+
1. Paste the DAX measure code
|
|
113
|
+
2. How slow is it?
|
|
114
|
+
a) 1-5 seconds (mild)
|
|
115
|
+
b) 5-15 seconds (significant)
|
|
116
|
+
c) 15+ seconds (severe)
|
|
117
|
+
3. Does it slow down specific visuals or the whole page?
|
|
118
|
+
4. Do you have DAX Studio or Server Timings available?
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Phase 2B: Performance Checklist
|
|
122
|
+
|
|
123
|
+
| # | Pattern | Problem | Fix |
|
|
124
|
+
|---|---------|---------|-----|
|
|
125
|
+
| 1 | FILTER on fact table | Iterates millions of rows | Use dimension filter or predicate |
|
|
126
|
+
| 2 | Nested CALCULATE | Redundant context transitions | Flatten to single CALCULATE |
|
|
127
|
+
| 3 | Repeated sub-expressions | Calculated multiple times | Extract to VAR |
|
|
128
|
+
| 4 | Iterator on large table | SUMX/COUNTX scanning all rows | Pre-filter with CALCULATETABLE |
|
|
129
|
+
| 5 | Bi-directional relationship | Engine can't optimize | Use CROSSFILTER or measure-based filter |
|
|
130
|
+
| 6 | DISTINCTCOUNT on high-cardinality | Memory-intensive | Consider approximate (SUMMARIZE + COUNTROWS) |
|
|
131
|
+
| 7 | Complex FILTER expressions | Full table scan | Simplify predicate or add calculated column |
|
|
132
|
+
|
|
133
|
+
### Phase 2C: Optimization Proposal
|
|
134
|
+
|
|
135
|
+
```dax
|
|
136
|
+
-- BEFORE (slow)
|
|
137
|
+
SlowMeasure = <original>
|
|
138
|
+
-- Estimated complexity: <high/medium>
|
|
139
|
+
|
|
140
|
+
-- AFTER (optimized)
|
|
141
|
+
FastMeasure = <optimized>
|
|
142
|
+
-- Why faster: <explanation>
|
|
143
|
+
|
|
144
|
+
-- VERIFICATION: Compare results with
|
|
145
|
+
-- BEFORE and AFTER in the same visual to confirm identical values
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## PATH 3: Error Diagnosis
|
|
151
|
+
|
|
152
|
+
### Phase 3A: Error Classification
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
ERROR DIAGNOSIS
|
|
156
|
+
===============
|
|
157
|
+
|
|
158
|
+
Common DAX errors and their causes:
|
|
159
|
+
|
|
160
|
+
1. "A circular dependency was detected"
|
|
161
|
+
-> Calculated column references a measure that references the same table
|
|
162
|
+
|
|
163
|
+
2. "The value is not of type Table"
|
|
164
|
+
-> Function expects table, got scalar (or vice versa)
|
|
165
|
+
|
|
166
|
+
3. "A single value for column X cannot be determined"
|
|
167
|
+
-> Missing relationship or ambiguous filter
|
|
168
|
+
|
|
169
|
+
4. "Division by zero"
|
|
170
|
+
-> Use DIVIDE() instead of /
|
|
171
|
+
|
|
172
|
+
5. "Cannot find table/column X"
|
|
173
|
+
-> Typo or renamed column
|
|
174
|
+
|
|
175
|
+
Paste the exact error message and your DAX code.
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Phase 3B: Error Resolution
|
|
179
|
+
|
|
180
|
+
For each error, provide:
|
|
181
|
+
1. **Root cause** explanation
|
|
182
|
+
2. **Fix** with corrected DAX
|
|
183
|
+
3. **Prevention** tip to avoid in future
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## PATH 4: General Review
|
|
188
|
+
|
|
189
|
+
### Phase 4A: DAX Review Criteria
|
|
190
|
+
|
|
191
|
+
Review the provided DAX against:
|
|
192
|
+
|
|
193
|
+
| Category | What to Check |
|
|
194
|
+
|----------|--------------|
|
|
195
|
+
| Correctness | Filter context, relationships, edge cases |
|
|
196
|
+
| Performance | Unnecessary iterators, FILTER on facts, missing VARs |
|
|
197
|
+
| Readability | Naming, formatting, comments |
|
|
198
|
+
| Maintainability | Hardcoded values, repeated logic |
|
|
199
|
+
| Best practices | DIVIDE, VAR/RETURN, predicate filters |
|
|
200
|
+
|
|
201
|
+
### Phase 4B: Review Report
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
DAX REVIEW REPORT
|
|
205
|
+
=================
|
|
206
|
+
|
|
207
|
+
Measure: <name>
|
|
208
|
+
Rating: 3/5
|
|
209
|
+
|
|
210
|
+
Strengths:
|
|
211
|
+
- <what's good>
|
|
212
|
+
|
|
213
|
+
Issues Found:
|
|
214
|
+
1. [Performance] <issue> -> <fix>
|
|
215
|
+
2. [Correctness] <issue> -> <fix>
|
|
216
|
+
|
|
217
|
+
Suggested Rewrite:
|
|
218
|
+
<improved DAX>
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Complexity Adaptation
|
|
222
|
+
|
|
223
|
+
Adjust depth based on `config.json → experienceLevel`:
|
|
224
|
+
- **beginner**: Step-by-step with explanations, reference library examples
|
|
225
|
+
- **intermediate**: Standard depth, explain non-obvious decisions
|
|
226
|
+
- **advanced**: Concise, skip basics, focus on edge cases and optimization
|
|
227
|
+
|
|
228
|
+
## Related Skills
|
|
229
|
+
|
|
230
|
+
- `/query-performance` — Deep performance optimization
|
|
231
|
+
- `/testing-validation` — Validate DAX fixes with test cases
|
|
232
|
+
- `/dax` — DAX patterns and best practices reference
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Related Resources
|
|
237
|
+
|
|
238
|
+
- [DAX Skill](/dax) — Core DAX patterns and best practices
|
|
239
|
+
- [Query Performance Skill](/query-performance) — Broader performance optimization
|
|
240
|
+
- [Testing & Validation Skill](/testing-validation) — Validate fixes with test cases
|
|
241
|
+
- [Snippets: Error Handling](library/snippets/dax/error-handling.md)
|
|
242
|
+
- [Snippets: CALCULATE Patterns](library/snippets/dax/calculate-patterns.md)
|