@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,439 @@
1
+ # Retail Analytics - Complete Example
2
+
3
+ A complete, end-to-end example demonstrating BI Agent Superpowers patterns for a retail analytics solution.
4
+
5
+ ---
6
+
7
+ ## Overview
8
+
9
+ This example shows how to build a professional retail analytics solution using:
10
+
11
+ - **Star schema data model** with fact and dimension tables
12
+ - **DAX measures** for KPIs, time intelligence, and rankings
13
+ - **Power Query** patterns for data transformation
14
+ - **Power BI theme** for consistent styling
15
+
16
+ ---
17
+
18
+ ## Business Requirements
19
+
20
+ ### Stakeholders
21
+ - Store managers: Daily sales performance
22
+ - Regional directors: Cross-store comparisons
23
+ - Finance team: Revenue and margin analysis
24
+ - Operations: Inventory and category insights
25
+
26
+ ### Key Questions
27
+ 1. What are our sales trends over time?
28
+ 2. Which products and categories drive revenue?
29
+ 3. How do stores compare in performance?
30
+ 4. What's our margin by product category?
31
+ 5. Who are our top customers?
32
+
33
+ ---
34
+
35
+ ## Data Model
36
+
37
+ ### Star Schema Design
38
+
39
+ ```
40
+ ┌─────────────────┐
41
+ │ DimDate │
42
+ │─────────────────│
43
+ │ DateKey (PK) │
44
+ │ Date │
45
+ │ Year │
46
+ │ Quarter │
47
+ │ Month │
48
+ │ MonthName │
49
+ │ Week │
50
+ │ DayOfWeek │
51
+ │ IsWeekend │
52
+ └────────┬────────┘
53
+
54
+ ┌─────────────────┐ │ ┌─────────────────┐
55
+ │ DimProduct │ │ │ DimCustomer │
56
+ │─────────────────│ │ │─────────────────│
57
+ │ ProductKey (PK) │ │ │ CustomerKey (PK)│
58
+ │ ProductID │ │ │ CustomerID │
59
+ │ ProductName │ │ │ CustomerName │
60
+ │ Category │ │ │ Email │
61
+ │ SubCategory │ │ │ City │
62
+ │ Brand │ │ │ State │
63
+ │ UnitCost │ │ │ Region │
64
+ │ UnitPrice │ │ │ JoinDate │
65
+ │ IsActive │ │ │ Tier │
66
+ └────────┬────────┘ │ └────────┬────────┘
67
+ │ │ │
68
+ │ ┌─────────────┴───────────────┐ │
69
+ │ │ FactSales │ │
70
+ │ │─────────────────────────────│ │
71
+ └────>│ SalesKey (PK) │<──┘
72
+ │ DateKey (FK) │
73
+ │ ProductKey (FK) │
74
+ │ CustomerKey (FK) │
75
+ │ StoreKey (FK) │
76
+ │ Quantity │
77
+ │ UnitPrice │
78
+ │ Discount │
79
+ │ Amount │
80
+ │ Cost │
81
+ └─────────────┬───────────────┘
82
+
83
+ ┌────────┴────────┐
84
+ │ DimStore │
85
+ │─────────────────│
86
+ │ StoreKey (PK) │
87
+ │ StoreID │
88
+ │ StoreName │
89
+ │ StoreType │
90
+ │ City │
91
+ │ State │
92
+ │ Region │
93
+ │ OpenDate │
94
+ │ SquareFeet │
95
+ └─────────────────┘
96
+ ```
97
+
98
+ ### Table Details
99
+
100
+ See [data-model.md](./data-model.md) for complete column definitions and data types.
101
+
102
+ ---
103
+
104
+ ## Power Query Transformations
105
+
106
+ ### Source Data Preparation
107
+
108
+ ```m
109
+ // FactSales transformation
110
+ let
111
+ Source = Sql.Database("server", "RetailDB"),
112
+ Sales = Source{[Schema="dbo", Item="SalesTransactions"]}[Data],
113
+
114
+ // 1. Filter to current fiscal year (folds to WHERE)
115
+ FilteredByDate = Table.SelectRows(Sales, each
116
+ [TransactionDate] >= #date(2024, 1, 1)
117
+ ),
118
+
119
+ // 2. Select only needed columns (folds to SELECT)
120
+ SelectedColumns = Table.SelectColumns(FilteredByDate, {
121
+ "TransactionID", "TransactionDate", "ProductID",
122
+ "CustomerID", "StoreID", "Quantity", "UnitPrice",
123
+ "DiscountAmount"
124
+ }),
125
+
126
+ // 3. Add calculated columns
127
+ WithCalculations = Table.AddColumn(
128
+ Table.AddColumn(
129
+ Table.AddColumn(SelectedColumns, "Amount",
130
+ each [Quantity] * [UnitPrice] - [DiscountAmount], Currency.Type
131
+ ),
132
+ "DateKey", each Date.ToText([TransactionDate], "yyyyMMdd"), type text
133
+ ),
134
+ "SalesKey", each Text.From([TransactionID]), type text
135
+ ),
136
+
137
+ // 4. Set final types
138
+ TypedTable = Table.TransformColumnTypes(WithCalculations, {
139
+ {"Quantity", Int64.Type},
140
+ {"UnitPrice", Currency.Type},
141
+ {"DiscountAmount", Currency.Type}
142
+ })
143
+ in
144
+ TypedTable
145
+ ```
146
+
147
+ See [power-query.md](./power-query.md) for all table transformations.
148
+
149
+ ---
150
+
151
+ ## DAX Measures
152
+
153
+ ### Base Measures
154
+
155
+ ```dax
156
+ // Revenue
157
+ Revenue =
158
+ SUM(FactSales[Amount])
159
+
160
+ // Cost
161
+ Cost =
162
+ SUMX(
163
+ FactSales,
164
+ FactSales[Quantity] * RELATED(DimProduct[UnitCost])
165
+ )
166
+
167
+ // Profit
168
+ Profit =
169
+ [Revenue] - [Cost]
170
+
171
+ // Profit Margin
172
+ Profit Margin % =
173
+ DIVIDE([Profit], [Revenue])
174
+
175
+ // Transaction Count
176
+ Transactions =
177
+ COUNTROWS(FactSales)
178
+
179
+ // Average Order Value
180
+ AOV =
181
+ DIVIDE([Revenue], [Transactions])
182
+ ```
183
+
184
+ ### Time Intelligence
185
+
186
+ ```dax
187
+ // Revenue YTD
188
+ Revenue YTD =
189
+ TOTALYTD([Revenue], DimDate[Date])
190
+
191
+ // Revenue Prior Year
192
+ Revenue PY =
193
+ CALCULATE([Revenue], SAMEPERIODLASTYEAR(DimDate[Date]))
194
+
195
+ // Revenue YoY Growth %
196
+ Revenue YoY % =
197
+ VAR _Current = [Revenue]
198
+ VAR _PY = [Revenue PY]
199
+ RETURN
200
+ DIVIDE(_Current - _PY, _PY)
201
+
202
+ // Revenue Rolling 3 Months
203
+ Revenue R3M =
204
+ CALCULATE(
205
+ [Revenue],
206
+ DATESINPERIOD(DimDate[Date], MAX(DimDate[Date]), -3, MONTH)
207
+ )
208
+ ```
209
+
210
+ ### Rankings
211
+
212
+ ```dax
213
+ // Product Rank by Revenue
214
+ Product Rank =
215
+ IF(
216
+ HASONEVALUE(DimProduct[ProductName]),
217
+ RANKX(
218
+ ALL(DimProduct[ProductName]),
219
+ [Revenue],
220
+ ,
221
+ DESC,
222
+ DENSE
223
+ )
224
+ )
225
+
226
+ // Store Rank by Revenue
227
+ Store Rank =
228
+ IF(
229
+ HASONEVALUE(DimStore[StoreName]),
230
+ RANKX(
231
+ ALL(DimStore[StoreName]),
232
+ [Revenue],
233
+ ,
234
+ DESC,
235
+ DENSE
236
+ )
237
+ )
238
+
239
+ // Top 10 Products Revenue
240
+ Revenue Top 10 Products =
241
+ CALCULATE(
242
+ [Revenue],
243
+ TOPN(10, ALL(DimProduct[ProductName]), [Revenue], DESC)
244
+ )
245
+ ```
246
+
247
+ ### KPI Formatting
248
+
249
+ ```dax
250
+ // Revenue with conditional color
251
+ Revenue Color =
252
+ VAR _YoY = [Revenue YoY %]
253
+ RETURN
254
+ SWITCH(
255
+ TRUE(),
256
+ _YoY >= 0.1, "#166534", // Dark green - exceeds
257
+ _YoY >= 0, "#22C55E", // Green - positive
258
+ _YoY >= -0.1, "#EAB308", // Yellow - slightly down
259
+ "#991B1B" // Dark red - significantly down
260
+ )
261
+
262
+ // Trend indicator
263
+ Revenue Trend =
264
+ VAR _YoY = [Revenue YoY %]
265
+ RETURN
266
+ SWITCH(
267
+ TRUE(),
268
+ _YoY >= 0.1, "▲▲",
269
+ _YoY >= 0, "▲",
270
+ _YoY >= -0.1, "▼",
271
+ "▼▼"
272
+ )
273
+ ```
274
+
275
+ See [measures.dax](./measures.dax) for the complete measure library.
276
+
277
+ ---
278
+
279
+ ## Visualizations
280
+
281
+ ### Dashboard Layout
282
+
283
+ ```
284
+ ┌──────────────────────────────────────────────────────────────────┐
285
+ │ RETAIL ANALYTICS [Date Range Slicer] │
286
+ ├──────────────────────────────────────────────────────────────────┤
287
+ │ │
288
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│
289
+ │ │ Revenue │ │ Profit │ │ Margin % │ │ AOV ││
290
+ │ │ $2.4M │ │ $480K │ │ 20.1% │ │ $45.20 ││
291
+ │ │ ▲ 12.3% │ │ ▲ 8.1% │ │ ▼ 0.3pp │ │ ▲ 5.2% ││
292
+ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘│
293
+ │ │
294
+ │ ┌───────────────────────────────┐ ┌───────────────────────────┐│
295
+ │ │ Revenue Trend │ │ Revenue by Category ││
296
+ │ │ [Line Chart - R12M] │ │ [Bar Chart] ││
297
+ │ │ │ │ ││
298
+ │ │ │ │ ││
299
+ │ └───────────────────────────────┘ └───────────────────────────┘│
300
+ │ │
301
+ │ ┌───────────────────────────────┐ ┌───────────────────────────┐│
302
+ │ │ Top 10 Products │ │ Store Performance ││
303
+ │ │ [Table with bars] │ │ [Map or Bar Chart] ││
304
+ │ │ │ │ ││
305
+ │ │ │ │ ││
306
+ │ └───────────────────────────────┘ └───────────────────────────┘│
307
+ │ │
308
+ └──────────────────────────────────────────────────────────────────┘
309
+ ```
310
+
311
+ ### Recommended Visuals
312
+
313
+ | Visual | Measures | Purpose |
314
+ |--------|----------|---------|
315
+ | Card | Revenue, Profit, Margin %, AOV | KPI summary |
316
+ | Line chart | Revenue by Month | Trend analysis |
317
+ | Clustered bar | Revenue by Category | Category comparison |
318
+ | Table | Top Products with Revenue, YoY % | Detailed ranking |
319
+ | Map | Revenue by Region/State | Geographic analysis |
320
+ | Slicer | Date, Category, Region | Filtering |
321
+
322
+ ---
323
+
324
+ ## Theme
325
+
326
+ Use the `bi-superpowers-default.json` theme for this report.
327
+
328
+ ### Key Theme Settings
329
+
330
+ | Element | Setting |
331
+ |---------|---------|
332
+ | Background | #FAFAFA (page), #FFFFFF (cards) |
333
+ | Primary text | #171717 |
334
+ | Data colors | IBCS grayscale (#000000, #737373, #A3A3A3) |
335
+ | Good | #166534 (dark green) |
336
+ | Bad | #991B1B (dark red) |
337
+ | Border radius | 10px |
338
+ | Font | Segoe UI |
339
+
340
+ See [theme.json](./theme.json) for the complete theme file.
341
+
342
+ ---
343
+
344
+ ## Implementation Checklist
345
+
346
+ ### Data Model
347
+ - [ ] Create DimDate table with all date attributes
348
+ - [ ] Load DimProduct with Category/SubCategory hierarchy
349
+ - [ ] Load DimCustomer with Region hierarchy
350
+ - [ ] Load DimStore with geographic attributes
351
+ - [ ] Load FactSales with surrogate keys
352
+ - [ ] Create relationships (all 1:*)
353
+ - [ ] Mark DimDate as Date Table
354
+ - [ ] Hide foreign key columns
355
+
356
+ ### Measures
357
+ - [ ] Create base measures (Revenue, Cost, Profit)
358
+ - [ ] Create time intelligence measures (YTD, PY, YoY %)
359
+ - [ ] Create ranking measures
360
+ - [ ] Create conditional formatting measures
361
+ - [ ] Organize measures in folders
362
+
363
+ ### Visualizations
364
+ - [ ] Apply theme
365
+ - [ ] Create KPI cards row
366
+ - [ ] Add trend line chart
367
+ - [ ] Add category comparison
368
+ - [ ] Add Top N table
369
+ - [ ] Add geographic visual
370
+ - [ ] Configure slicers
371
+ - [ ] Add tooltips
372
+ - [ ] Test all interactions
373
+
374
+ ### Polish
375
+ - [ ] Add report title
376
+ - [ ] Add last refresh date
377
+ - [ ] Configure mobile layout
378
+ - [ ] Test filter interactions
379
+ - [ ] Optimize performance (DAX Studio)
380
+ - [ ] Document assumptions
381
+
382
+ ---
383
+
384
+ ## Files in This Example
385
+
386
+ | File | Description |
387
+ |------|-------------|
388
+ | [README.md](./README.md) | This overview |
389
+ | [data-model.md](./data-model.md) | Complete table definitions |
390
+ | [power-query.md](./power-query.md) | All M code transformations |
391
+ | [measures.dax](./measures.dax) | Complete DAX measure library |
392
+ | [theme.json](./theme.json) | Power BI theme file |
393
+
394
+ ---
395
+
396
+ ## Extending This Example
397
+
398
+ ### Add Customer Segmentation
399
+
400
+ ```dax
401
+ Customer Segment =
402
+ VAR _CustomerRevenue = [Revenue]
403
+ VAR _AvgCustomerRevenue =
404
+ CALCULATE(
405
+ AVERAGEX(VALUES(DimCustomer[CustomerKey]), [Revenue]),
406
+ ALL(DimCustomer)
407
+ )
408
+ RETURN
409
+ SWITCH(
410
+ TRUE(),
411
+ _CustomerRevenue >= _AvgCustomerRevenue * 2, "VIP",
412
+ _CustomerRevenue >= _AvgCustomerRevenue, "Regular",
413
+ "Occasional"
414
+ )
415
+ ```
416
+
417
+ ### Add Inventory Analysis
418
+
419
+ Create a FactInventory table and add measures like:
420
+
421
+ ```dax
422
+ Stock Days =
423
+ DIVIDE([Current Stock], [Daily Sales Rate])
424
+
425
+ Reorder Alert =
426
+ IF([Stock Days] < 14, "Reorder", "OK")
427
+ ```
428
+
429
+ ### Add Forecast Comparison
430
+
431
+ If you have budget/forecast data:
432
+
433
+ ```dax
434
+ Revenue vs Budget % =
435
+ DIVIDE([Revenue] - [Budget], [Budget])
436
+
437
+ Budget Variance =
438
+ [Revenue] - [Budget]
439
+ ```