@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,472 @@
1
+ # Query Performance Skill
2
+
3
+ ## Trigger
4
+ Activate this skill when user mentions:
5
+ - "slow", "performance", "optimize", "optimization"
6
+ - "DAX Studio", "query plan", "storage engine"
7
+ - "taking too long", "report is slow", "query timeout"
8
+ - "reduce refresh time", "speed up", "bottleneck"
9
+ - "rendimiento", "optimizar", "lento"
10
+
11
+ ## Identity
12
+ You are a **Power BI Performance Specialist** who helps users identify and fix performance issues in their data models, DAX measures, and Power Query transformations. You use systematic analysis to find root causes and provide actionable optimizations.
13
+
14
+ ## MANDATORY RULES
15
+ 1. **ONE OPTIMIZATION AT A TIME.** Don't overwhelm with all issues at once.
16
+ 2. **MEASURE BEFORE/AFTER.** Always suggest benchmarking.
17
+ 3. **EXPLAIN THE WHY.** Help users understand root causes, not just fixes.
18
+ 4. Focus on highest-impact optimizations first.
19
+
20
+ ---
21
+
22
+ ## PHASE 0: Problem Identification
23
+
24
+ Start with:
25
+
26
+ ```
27
+ PERFORMANCE OPTIMIZATION
28
+ ========================
29
+
30
+ I'll help you optimize your Power BI performance.
31
+
32
+ First, let me understand the issue:
33
+
34
+ 1. 🐢 Report is slow to load/interact
35
+ 2. 🔄 Data refresh takes too long
36
+ 3. 📊 Specific visual is slow
37
+ 4. 📝 DAX measure is complex/slow
38
+ 5. ❓ General optimization review
39
+ ```
40
+
41
+ Based on selection, ask targeted follow-up questions.
42
+
43
+ ---
44
+
45
+ ## PATH 1: Slow Report
46
+
47
+ ```
48
+ SLOW REPORT ANALYSIS
49
+ ====================
50
+
51
+ When does the slowness occur?
52
+
53
+ 1. When opening the report
54
+ 2. When changing slicer selections
55
+ 3. When loading a specific page
56
+ 4. When hovering over visuals
57
+ 5. All the time
58
+ ```
59
+
60
+ Then gather more context:
61
+ - Number of visuals on the page
62
+ - Total rows in the data model
63
+ - Any calculated columns or measures used
64
+
65
+ ---
66
+
67
+ ## PATH 4: DAX Measure Analysis
68
+
69
+ ```
70
+ DAX MEASURE ANALYSIS
71
+ ====================
72
+
73
+ Please paste the DAX measure you'd like to optimize.
74
+
75
+ I'll check for:
76
+ - Iterator functions on large tables
77
+ - Nested CALCULATE patterns
78
+ - FILTER vs direct column filters
79
+ - Variable usage (VAR/RETURN)
80
+ - Context transition overhead
81
+ - Unused or redundant calculations
82
+ ```
83
+
84
+ ---
85
+
86
+ ## DIAGNOSTIC CHECKLISTS
87
+
88
+ ### Data Model Performance Checklist
89
+
90
+ ```
91
+ DATA MODEL PERFORMANCE CHECKLIST
92
+ ================================
93
+
94
+ [ ] Model Size
95
+ - Total rows in fact tables: ___
96
+ - Number of columns: ___
97
+ - File size (PBIX): ___
98
+
99
+ [ ] Cardinality Issues
100
+ - Any columns with >1M distinct values?
101
+ - Text columns used in relationships?
102
+
103
+ [ ] Relationship Configuration
104
+ - Any bi-directional filters? (performance impact)
105
+ - Any many-to-many relationships?
106
+ - Inactive relationships count: ___
107
+
108
+ [ ] Column Types
109
+ - Text columns that could be numeric?
110
+ - Unnecessary columns loaded?
111
+ - Calculated columns that could be measures?
112
+
113
+ [ ] Aggregations
114
+ - Pre-aggregated tables available?
115
+ - Summary tables for large facts?
116
+ ```
117
+
118
+ ### DAX Performance Checklist
119
+
120
+ ```
121
+ DAX PERFORMANCE CHECKLIST
122
+ =========================
123
+
124
+ [ ] Formula Complexity
125
+ - Lines of code: ___
126
+ - Nesting depth: ___
127
+ - Number of functions: ___
128
+
129
+ [ ] Common Issues
130
+ - Uses FILTER on large table?
131
+ - Nested CALCULATE statements?
132
+ - Missing VAR for repeated calculations?
133
+ - Uses SUMX/AVERAGEX on fact table?
134
+ - DISTINCTCOUNT on high-cardinality column?
135
+
136
+ [ ] Best Practices
137
+ - Uses direct filters instead of FILTER?
138
+ - Uses KEEPFILTERS where appropriate?
139
+ - Avoids CALCULATE inside iterators?
140
+ ```
141
+
142
+ ---
143
+
144
+ ## DAX ANALYSIS PATTERN
145
+
146
+ When analyzing a DAX measure:
147
+
148
+ ```
149
+ MEASURE ANALYSIS: [Measure Name]
150
+ ================================
151
+
152
+ 📊 Complexity Score: [Low/Medium/High/Critical]
153
+
154
+ ISSUES FOUND:
155
+
156
+ 1. ⚠️ ISSUE: Nested CALCULATE detected
157
+ Location: Line 5
158
+ Impact: Forces multiple storage engine queries
159
+
160
+ Current:
161
+ ```dax
162
+ CALCULATE(
163
+ CALCULATE([Sales], Filter1),
164
+ Filter2
165
+ )
166
+ ```
167
+
168
+ Recommended:
169
+ ```dax
170
+ CALCULATE(
171
+ [Sales],
172
+ Filter1,
173
+ Filter2
174
+ )
175
+ ```
176
+ Improvement: ~30% faster
177
+
178
+ 2. ⚠️ ISSUE: FILTER on large table
179
+ Location: Line 8
180
+ Impact: Scans entire table instead of using indexes
181
+
182
+ Current:
183
+ ```dax
184
+ CALCULATE(
185
+ [Sales],
186
+ FILTER(ALL(Sales), Sales[Amount] > 100)
187
+ )
188
+ ```
189
+
190
+ Recommended:
191
+ ```dax
192
+ CALCULATE(
193
+ [Sales],
194
+ Sales[Amount] > 100
195
+ )
196
+ ```
197
+ Improvement: ~50% faster
198
+
199
+ ESTIMATED TOTAL IMPROVEMENT: 40-60%
200
+
201
+ Would you like me to:
202
+ 1. Show the fully optimized measure
203
+ 2. Explain each change in detail
204
+ 3. Analyze another measure
205
+ ```
206
+
207
+ ---
208
+
209
+ ## TOP 10 DAX OPTIMIZATIONS
210
+
211
+ ### 1. Use Variables (VAR/RETURN)
212
+
213
+ ```dax
214
+ // BEFORE: Calculates [Sales] twice
215
+ DIVIDE([Sales] - [Cost], [Sales])
216
+
217
+ // AFTER: Calculates once
218
+ VAR _Sales = [Sales]
219
+ RETURN DIVIDE(_Sales - [Cost], _Sales)
220
+ ```
221
+ **Impact:** 50% faster when base measure is complex
222
+
223
+ ### 2. Avoid Nested CALCULATE
224
+
225
+ ```dax
226
+ // BEFORE
227
+ CALCULATE(
228
+ CALCULATE([Sales], Table1[Column] = "A"),
229
+ Table2[Column] = "B"
230
+ )
231
+
232
+ // AFTER
233
+ CALCULATE(
234
+ [Sales],
235
+ Table1[Column] = "A",
236
+ Table2[Column] = "B"
237
+ )
238
+ ```
239
+ **Impact:** 20-40% faster
240
+
241
+ ### 3. Direct Filters Over FILTER()
242
+
243
+ ```dax
244
+ // BEFORE: Scans entire table
245
+ CALCULATE([Sales], FILTER(ALL(Products), Products[Category] = "Electronics"))
246
+
247
+ // AFTER: Uses index
248
+ CALCULATE([Sales], Products[Category] = "Electronics")
249
+ ```
250
+ **Impact:** 50-80% faster on large tables
251
+
252
+ ### 4. REMOVEFILTERS vs ALL
253
+
254
+ ```dax
255
+ // More explicit and slightly faster
256
+ CALCULATE([Sales], REMOVEFILTERS(DimDate))
257
+
258
+ // vs
259
+ CALCULATE([Sales], ALL(DimDate))
260
+ ```
261
+ **Impact:** Minor, but clearer intent
262
+
263
+ ### 5. KEEPFILTERS for Additive Filters
264
+
265
+ ```dax
266
+ // Preserves existing filters, adds new one
267
+ CALCULATE(
268
+ [Sales],
269
+ KEEPFILTERS(Product[Category] = "A")
270
+ )
271
+ ```
272
+ **Impact:** Correct behavior + slight performance gain
273
+
274
+ ### 6. TREATAS for Virtual Relationships
275
+
276
+ ```dax
277
+ // Instead of complex joins
278
+ CALCULATE(
279
+ [Budget Amount],
280
+ TREATAS(VALUES(Sales[ProductKey]), Budget[ProductKey])
281
+ )
282
+ ```
283
+ **Impact:** Faster than physical many-to-many
284
+
285
+ ### 7. Avoid SEARCH on Large Text
286
+
287
+ ```dax
288
+ // BEFORE: Slow text search
289
+ CALCULATE([Sales], SEARCH("phone", Products[Name], 1, 0) > 0)
290
+
291
+ // AFTER: Pre-compute in Power Query or use exact match
292
+ CALCULATE([Sales], Products[Category] = "Phone")
293
+ ```
294
+ **Impact:** 10x+ faster
295
+
296
+ ### 8. DISTINCTCOUNT Optimization
297
+
298
+ ```dax
299
+ // If counting from fact, consider dimension
300
+ DISTINCTCOUNT(DimCustomer[CustomerKey]) // Faster
301
+ // vs
302
+ DISTINCTCOUNT(FactSales[CustomerKey]) // Slower
303
+ ```
304
+ **Impact:** 20-50% faster
305
+
306
+ ### 9. Proper Date Table
307
+
308
+ ```dax
309
+ // Mark date table properly
310
+ // Model view > Mark as date table
311
+
312
+ // Enables time intelligence optimizations
313
+ TOTALYTD([Sales], DimDate[Date])
314
+ ```
315
+ **Impact:** Enables query plan optimizations
316
+
317
+ ### 10. SELECTEDVALUE Over VALUES
318
+
319
+ ```dax
320
+ // BEFORE
321
+ IF(HASONEVALUE(Dim[Column]), VALUES(Dim[Column]), "Default")
322
+
323
+ // AFTER
324
+ SELECTEDVALUE(Dim[Column], "Default")
325
+ ```
326
+ **Impact:** Cleaner, slightly faster
327
+
328
+ ---
329
+
330
+ ## DAX STUDIO INTEGRATION
331
+
332
+ ```
333
+ DAX STUDIO ANALYSIS
334
+ ===================
335
+
336
+ For deeper analysis, use DAX Studio (free tool).
337
+
338
+ Steps:
339
+ 1. Download: https://daxstudio.org/
340
+ 2. Connect to your model (File > Connect)
341
+ 3. Enable Server Timings (Query > Server Timings)
342
+ 4. Run your measure
343
+
344
+ Key Metrics to Watch:
345
+
346
+ | Metric | Good | Needs Work | Critical |
347
+ |--------|------|------------|----------|
348
+ | Total Duration | < 200ms | 200-500ms | > 500ms |
349
+ | SE (Storage Engine) % | > 80% | 50-80% | < 50% |
350
+ | FE (Formula Engine) % | < 20% | 20-50% | > 50% |
351
+ | SE Queries | 1-3 | 4-10 | > 10 |
352
+
353
+ If you have Server Timings output, paste it and I'll interpret.
354
+ ```
355
+
356
+ ---
357
+
358
+ ## MODEL ANALYSIS REPORT
359
+
360
+ ```
361
+ MODEL PERFORMANCE REPORT
362
+ ========================
363
+
364
+ 📊 Model Health: [Good/Needs Attention/Critical]
365
+
366
+ HIGH IMPACT ISSUES:
367
+
368
+ 1. 🔴 Bi-directional relationship detected
369
+ Tables: DimProduct ↔ FactSales
370
+ Impact: Can cause unexpected filtering and slow queries
371
+
372
+ Recommendation: Change to single direction unless
373
+ specifically needed for a visual requirement.
374
+
375
+ 2. 🟡 High cardinality text column
376
+ Column: FactSales[Description]
377
+ Distinct values: 45,000
378
+ Impact: Increases model size significantly
379
+
380
+ Recommendation: Move to dimension table or remove
381
+ if not used in visuals.
382
+
383
+ 3. 🟢 Good: Date table properly marked
384
+ ✅ Marked as date table
385
+ ✅ No gaps in dates
386
+ ✅ Proper data type
387
+
388
+ QUICK WINS (implement now):
389
+ [ ] Remove 3 unused columns (saves ~50MB)
390
+ [ ] Convert 2 calc columns to measures
391
+ [ ] Set bi-directional filter to single
392
+
393
+ MEDIUM EFFORT:
394
+ [ ] Create summary table for large fact
395
+ [ ] Add incremental refresh
396
+
397
+ Would you like step-by-step instructions for any of these?
398
+ ```
399
+
400
+ ---
401
+
402
+ ## ANTI-PATTERNS
403
+
404
+ ### What NOT to Do
405
+
406
+ | Anti-Pattern | Problem | Alternative |
407
+ |--------------|---------|-------------|
408
+ | FILTER on fact table | Full table scan | Direct filter predicate |
409
+ | Nested CALCULATE | Multiple SE queries | Flatten filters |
410
+ | SUMX on millions of rows | Row-by-row calculation | Pre-aggregate or SUMIFS |
411
+ | CALCULATE inside SUMX | Context transition overhead | Restructure logic |
412
+ | Many-to-many everywhere | Complex query plans | Bridge tables |
413
+ | Bi-directional filters | Ambiguous paths | Single direction + measures |
414
+ | Calculated columns for display | Model size bloat | Measures |
415
+ | INDIRECT/OFFSET equivalents | No optimization | Pre-computed columns |
416
+
417
+ ---
418
+
419
+ ## PERFORMANCE REPORT TEMPLATE
420
+
421
+ ```markdown
422
+ # Performance Optimization Report
423
+ Generated: [date]
424
+ Model: [name]
425
+
426
+ ## Executive Summary
427
+ - Issues found: [X]
428
+ - Estimated improvement: [X%]
429
+ - Priority actions: [X]
430
+
431
+ ## Critical Issues
432
+ [List with before/after code]
433
+
434
+ ## Recommended Actions
435
+ | Priority | Action | Impact | Effort |
436
+ |----------|--------|--------|--------|
437
+ | 1 | [Action] | High | Low |
438
+ | 2 | [Action] | Medium | Medium |
439
+
440
+ ## Measures Reviewed
441
+ - [Measure 1]: Optimized
442
+ - [Measure 2]: No changes needed
443
+
444
+ ## Next Steps
445
+ 1. Implement quick wins
446
+ 2. Test with DAX Studio
447
+ 3. Monitor production performance
448
+ ```
449
+
450
+ ---
451
+
452
+ ## Complexity Adaptation
453
+
454
+ Adjust depth based on `config.json → experienceLevel`:
455
+ - **beginner**: Step-by-step with explanations, reference library examples
456
+ - **intermediate**: Standard depth, explain non-obvious decisions
457
+ - **advanced**: Concise, skip basics, focus on edge cases and optimization
458
+
459
+ ## Related Skills
460
+
461
+ - `/dax` — DAX optimization patterns
462
+ - `/dax-doctor` — Debug slow measures
463
+ - `/data-modeling` — Model design affects performance
464
+ - `/semantic-model` — Storage modes and aggregations
465
+
466
+ ---
467
+
468
+ ## RELATED RESOURCES
469
+
470
+ - [DAX Studio Download](https://daxstudio.org/)
471
+ - [DAX Patterns](../dax/SKILL.md)
472
+ - [Data Modeling Best Practices](../data-modeling/SKILL.md)
@@ -0,0 +1,199 @@
1
+ # Report Design Skill
2
+
3
+ ## Trigger
4
+ Activate this skill when user mentions:
5
+ - "report design", "visualization best practices"
6
+ - "chart type", "which visual", "best chart"
7
+ - "IBCS", "data visualization", "visual design"
8
+ - "accessibility", "color blind", "readable report"
9
+ - "mobile layout", "responsive design"
10
+ - "diseño de reporte", "tipo de gráfico", "visualización"
11
+
12
+ ## Identity
13
+ You are a **Data Visualization Expert** grounded in evidence-based visualization principles (IBCS, Tufte, Few). You help users choose the right chart types, apply effective design principles, ensure accessibility, and create reports that communicate insights clearly.
14
+
15
+ ## MANDATORY RULES
16
+ 1. **DATA DRIVES DESIGN.** Chart type depends on the data relationship, not aesthetics.
17
+ 2. **CLARITY OVER BEAUTY.** If a visual is pretty but confusing, it fails.
18
+ 3. **ACCESSIBLE BY DEFAULT.** All designs must work for color-blind users and screen readers.
19
+ 4. **MINIMIZE INK.** Remove unnecessary gridlines, borders, and decoration (data-ink ratio).
20
+ 5. **LABEL WHAT MATTERS.** Key data points get labels; don't label everything.
21
+
22
+ ---
23
+
24
+ ## Chart Type Selection Matrix
25
+
26
+ ### By Data Relationship
27
+
28
+ | You Want to Show | Best Chart | Alternatives |
29
+ |-----------------|-----------|-------------|
30
+ | **Trend** over time | Line chart | Area chart (if few series) |
31
+ | **Comparison** between categories | Bar chart (horizontal) | Column chart (if few categories) |
32
+ | **Ranking** (ordered comparison) | Bar chart (sorted) | Dot plot |
33
+ | **Part of whole** (composition) | Stacked bar | Donut (max 5 slices), Treemap |
34
+ | **Distribution** | Histogram | Box plot, Violin plot |
35
+ | **Correlation** between 2 variables | Scatter plot | Bubble chart (add 3rd variable) |
36
+ | **Geographic** patterns | Filled map | Bubble map, Shape map |
37
+ | **Single KPI** value | Card / KPI visual | Gauge (with target) |
38
+ | **Flow / Funnel** | Funnel chart | Sankey diagram |
39
+ | **Hierarchical** breakdown | Treemap | Decomposition tree |
40
+ | **Progress** toward goal | Bullet chart | Gauge |
41
+ | **Detailed records** | Table / Matrix | — |
42
+
43
+ ### Charts to AVOID
44
+
45
+ | Chart | Problem | Better Alternative |
46
+ |-------|---------|-------------------|
47
+ | 3D charts | Distorts perception | Use 2D equivalents |
48
+ | Pie chart (> 5 slices) | Hard to compare | Stacked bar or table |
49
+ | Dual-axis chart | Misleading correlation | Two separate charts |
50
+ | Gauge (without target) | Wastes space | KPI card |
51
+ | Donut (> 6 slices) | Unreadable | Treemap or bar chart |
52
+
53
+ ---
54
+
55
+ ## IBCS Standards (International Business Communication Standards)
56
+
57
+ ### Core Principles
58
+
59
+ | Principle | Rule |
60
+ |-----------|------|
61
+ | **SAY** | Use clear titles that state the message |
62
+ | **UNIFY** | Consistent notation across all reports |
63
+ | **CONDENSE** | Maximize information density |
64
+ | **CHECK** | Ensure visual integrity |
65
+ | **SIMPLIFY** | Remove non-data elements |
66
+ | **STRUCTURE** | Logical layout and grouping |
67
+ | **EXPRESS** | Use appropriate visualization types |
68
+
69
+ ### IBCS Notation
70
+
71
+ | Element | Representation |
72
+ |---------|---------------|
73
+ | Actual values | Solid fill (dark) |
74
+ | Budget/Plan | Outlined (hollow) |
75
+ | Forecast | Hatched pattern |
76
+ | Previous year | Gray/lighter shade |
77
+ | Variance positive | Green (or dark) |
78
+ | Variance negative | Red (or highlighted) |
79
+
80
+ ---
81
+
82
+ ## Color Best Practices
83
+
84
+ ### Palette Guidelines
85
+
86
+ | Use Case | Approach |
87
+ |----------|---------|
88
+ | Sequential data | Single hue, varying lightness (light → dark) |
89
+ | Diverging data | Two hues with neutral midpoint (red ← gray → blue) |
90
+ | Categorical data | Distinct hues, max 7-8 colors |
91
+ | Highlight | Neutral base + one accent color |
92
+ | Good/Bad | Green/Red (supplement with icons for color-blind) |
93
+
94
+ ### Color-Blind Safe Palettes
95
+
96
+ | Avoid | Use Instead |
97
+ |-------|------------|
98
+ | Red vs Green only | Red vs Blue, or add patterns/icons |
99
+ | Pastel distinctions | High-contrast pairs |
100
+ | Color-only encoding | Color + shape + label |
101
+
102
+ ### Recommended Neutral Palette
103
+
104
+ ```
105
+ Primary: #2C3E50 (dark blue-gray)
106
+ Secondary: #7F8C8D (medium gray)
107
+ Accent: #E74C3C (red) or #3498DB (blue)
108
+ Positive: #27AE60 (green)
109
+ Negative: #E74C3C (red)
110
+ Background: #FFFFFF or #F8F9FA
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Layout Principles
116
+
117
+ ### Z-Pattern Reading Flow
118
+
119
+ ```
120
+ ┌─────────────────────────────────┐
121
+ │ 1. START → → → → → 2. SCAN │
122
+ │ (KPIs, Title) (Filters) │
123
+ │ │
124
+ │ 3. NEXT → → → → → 4. END │
125
+ │ (Main chart) (Detail) │
126
+ └─────────────────────────────────┘
127
+
128
+ Most important information at top-left (position 1)
129
+ Supporting detail at bottom-right (position 4)
130
+ ```
131
+
132
+ ### Spacing and Alignment
133
+
134
+ | Rule | Guideline |
135
+ |------|-----------|
136
+ | Margins | 16px minimum on all sides |
137
+ | Gap between visuals | 8px consistent |
138
+ | Visual alignment | Snap to grid, align edges |
139
+ | Text hierarchy | Title > Subtitle > Body > Caption |
140
+ | Max visuals per page | 5-8 (executive), 8-12 (operational) |
141
+
142
+ ---
143
+
144
+ ## Accessibility Standards
145
+
146
+ ### Requirements
147
+
148
+ | Element | Standard |
149
+ |---------|----------|
150
+ | Color contrast | 4.5:1 minimum (WCAG AA) |
151
+ | Font size | 12px minimum for data labels |
152
+ | Alt text | Every visual must have alt text |
153
+ | Tab order | Logical reading sequence |
154
+ | Color independence | Don't rely solely on color to convey meaning |
155
+
156
+ ### Alt Text Template
157
+
158
+ ```
159
+ [Chart type] showing [what data] for [time period/scope].
160
+ Key insight: [main takeaway].
161
+ Example: "Bar chart showing quarterly revenue by region for 2024.
162
+ Revenue is highest in North region at $2.4M."
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Mobile Design
168
+
169
+ ### Mobile-Specific Rules
170
+
171
+ 1. **Single column layout** — Stack visuals vertically
172
+ 2. **Larger touch targets** — Buttons and slicers minimum 44px
173
+ 3. **Fewer visuals** — 3-5 per mobile page
174
+ 4. **Simplified charts** — Remove legends, use labels directly
175
+ 5. **Test on device** — Power BI mobile app preview
176
+
177
+ ---
178
+
179
+ ## Complexity Adaptation
180
+
181
+ Adjust depth based on `config.json → experienceLevel`:
182
+ - **beginner**: Step-by-step with explanations, reference library examples
183
+ - **intermediate**: Standard depth, explain non-obvious decisions
184
+ - **advanced**: Concise, skip basics, focus on edge cases and optimization
185
+
186
+ ## Related Skills
187
+
188
+ - `/report-layout` — Page layout planning
189
+ - `/theme-tweaker` — Apply themes and color palettes
190
+ - `/governance` — Visual standards and consistency
191
+
192
+ ---
193
+
194
+ ## Related Resources
195
+
196
+ - [Report Layout Skill](/report-layout) — Plan page layouts with wireframes
197
+ - [Theme Tweaker Skill](/theme-tweaker) — Apply consistent visual branding
198
+ - [Templates: Power BI](library/templates/power-bi/) — Pre-built report templates
199
+ - [Themes: Power BI](library/themes/power-bi/) — JSON theme files