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