@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,350 @@
1
+ # Query Parameters
2
+
3
+ ## Overview
4
+ Power Query patterns for using parameters to create dynamic, reusable queries that can be easily configured for different environments and scenarios.
5
+
6
+ ---
7
+
8
+ ## Creating Parameters
9
+
10
+ ### In Power Query Editor
11
+ 1. Home → Manage Parameters → New Parameter
12
+ 2. Configure: Name, Type, Current Value, Allowed Values
13
+
14
+ ### Parameter Types
15
+ | Type | Use Case | Example |
16
+ |------|----------|---------|
17
+ | Text | Server names, file paths, API keys | `param_ServerName` |
18
+ | Number | Limits, thresholds, IDs | `param_TopN` |
19
+ | Date | Start/end dates, cutoff dates | `param_StartDate` |
20
+ | DateTime | Timestamps with time | `param_LastRefresh` |
21
+ | True/False | Feature flags | `param_IncludeArchived` |
22
+ | List | Multiple allowed values | Environment options |
23
+
24
+ ---
25
+
26
+ ## Common Parameter Patterns
27
+
28
+ ### Server/Database Parameters
29
+ ```m
30
+ // Parameters (create in Manage Parameters)
31
+ // param_ServerName: Text, e.g., "prod-sql-01.database.windows.net"
32
+ // param_DatabaseName: Text, e.g., "SalesDB"
33
+
34
+ let
35
+ Source = Sql.Database(param_ServerName, param_DatabaseName),
36
+ Sales = Source{[Schema="dbo", Item="Sales"]}[Data]
37
+ in
38
+ Sales
39
+ ```
40
+
41
+ ### File Path Parameter
42
+ ```m
43
+ // param_FilePath: Text, e.g., "C:\Data\SalesData.xlsx"
44
+
45
+ let
46
+ Source = Excel.Workbook(File.Contents(param_FilePath), true, true),
47
+ Sheet1 = Source{[Item="Sheet1", Kind="Sheet"]}[Data]
48
+ in
49
+ Sheet1
50
+ ```
51
+
52
+ ### Folder Path Parameter
53
+ ```m
54
+ // param_FolderPath: Text, e.g., "C:\Data\Monthly Reports\"
55
+
56
+ let
57
+ Source = Folder.Files(param_FolderPath),
58
+ FilteredFiles = Table.SelectRows(Source, each Text.EndsWith([Name], ".csv"))
59
+ in
60
+ FilteredFiles
61
+ ```
62
+
63
+ ### Date Range Parameters
64
+ ```m
65
+ // param_StartDate: Date, e.g., #date(2024, 1, 1)
66
+ // param_EndDate: Date, e.g., #date(2024, 12, 31)
67
+
68
+ let
69
+ Source = Sql.Database(param_ServerName, param_DatabaseName),
70
+ Sales = Source{[Schema="dbo", Item="Sales"]}[Data],
71
+ FilteredByDate = Table.SelectRows(Sales, each
72
+ [OrderDate] >= param_StartDate and [OrderDate] <= param_EndDate
73
+ )
74
+ in
75
+ FilteredByDate
76
+ ```
77
+
78
+ ### API Token Parameter
79
+ ```m
80
+ // param_APIToken: Text (mark as sensitive if supported)
81
+
82
+ let
83
+ Source = Json.Document(
84
+ Web.Contents(
85
+ "https://api.example.com/data",
86
+ [
87
+ Headers = [
88
+ #"Authorization" = "Bearer " & param_APIToken
89
+ ]
90
+ ]
91
+ )
92
+ )
93
+ in
94
+ Source
95
+ ```
96
+
97
+ ---
98
+
99
+ ## Dynamic Parameters
100
+
101
+ ### Relative Date Parameters
102
+ ```m
103
+ // Calculate dates dynamically
104
+ let
105
+ Today = Date.From(DateTime.LocalNow()),
106
+ StartOfMonth = Date.StartOfMonth(Today),
107
+ StartOfYear = Date.StartOfYear(Today),
108
+ Last30Days = Date.AddDays(Today, -30),
109
+ LastMonthStart = Date.StartOfMonth(Date.AddMonths(Today, -1)),
110
+ LastMonthEnd = Date.EndOfMonth(Date.AddMonths(Today, -1))
111
+ in
112
+ // Use in queries
113
+ Last30Days
114
+ ```
115
+
116
+ ### Rolling Period Query
117
+ ```m
118
+ // No parameter needed - always last 12 months
119
+ let
120
+ EndDate = Date.From(DateTime.LocalNow()),
121
+ StartDate = Date.AddMonths(EndDate, -12),
122
+
123
+ Source = Sql.Database(param_ServerName, param_DatabaseName),
124
+ Sales = Source{[Schema="dbo", Item="Sales"]}[Data],
125
+ Filtered = Table.SelectRows(Sales, each
126
+ [OrderDate] >= StartDate and [OrderDate] <= EndDate
127
+ )
128
+ in
129
+ Filtered
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Environment Configuration
135
+
136
+ ### Environment Parameter Pattern
137
+ ```m
138
+ // param_Environment: Text, Allowed Values: "Development", "Staging", "Production"
139
+
140
+ let
141
+ // Configuration table
142
+ Config = #table(
143
+ {"Environment", "Server", "Database"},
144
+ {
145
+ {"Development", "dev-sql-01", "SalesDB_Dev"},
146
+ {"Staging", "stg-sql-01", "SalesDB_Stg"},
147
+ {"Production", "prod-sql-01", "SalesDB"}
148
+ }
149
+ ),
150
+
151
+ // Get current environment config
152
+ CurrentConfig = Table.SelectRows(Config, each [Environment] = param_Environment){0},
153
+
154
+ // Connect using config values
155
+ Source = Sql.Database(CurrentConfig[Server], CurrentConfig[Database])
156
+ in
157
+ Source
158
+ ```
159
+
160
+ ### Configuration Table Query
161
+ ```m
162
+ // Create a query called "Config" with environment settings
163
+ let
164
+ Source = #table(
165
+ type table [
166
+ Setting = text,
167
+ Development = text,
168
+ Staging = text,
169
+ Production = text
170
+ ],
171
+ {
172
+ {"ServerName", "dev-sql-01", "stg-sql-01", "prod-sql-01"},
173
+ {"DatabaseName", "SalesDB_Dev", "SalesDB_Stg", "SalesDB"},
174
+ {"APIEndpoint", "https://dev-api.example.com", "https://stg-api.example.com", "https://api.example.com"},
175
+ {"RefreshDays", "7", "30", "365"}
176
+ }
177
+ )
178
+ in
179
+ Source
180
+
181
+ // Usage in other queries:
182
+ let
183
+ ServerName = Config{[Setting="ServerName"]}[param_Environment],
184
+ DatabaseName = Config{[Setting="DatabaseName"]}[param_Environment],
185
+ Source = Sql.Database(ServerName, DatabaseName)
186
+ in
187
+ Source
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Parameter in Native SQL
193
+
194
+ ### Date in SQL Query
195
+ ```m
196
+ // param_StartDate: Date
197
+
198
+ let
199
+ FormattedDate = Date.ToText(param_StartDate, "yyyy-MM-dd"),
200
+ Query = "SELECT * FROM dbo.Sales WHERE OrderDate >= '" & FormattedDate & "'",
201
+ Source = Sql.Database(param_ServerName, param_DatabaseName, [Query = Query])
202
+ in
203
+ Source
204
+ ```
205
+
206
+ ### Multiple Parameters in SQL
207
+ ```m
208
+ let
209
+ StartDateText = Date.ToText(param_StartDate, "yyyy-MM-dd"),
210
+ EndDateText = Date.ToText(param_EndDate, "yyyy-MM-dd"),
211
+
212
+ Query = "
213
+ SELECT *
214
+ FROM dbo.Sales
215
+ WHERE OrderDate BETWEEN '" & StartDateText & "' AND '" & EndDateText & "'
216
+ AND Region = '" & param_Region & "'
217
+ ",
218
+
219
+ Source = Sql.Database(param_ServerName, param_DatabaseName, [Query = Query])
220
+ in
221
+ Source
222
+ ```
223
+
224
+ ### Parameterized Stored Procedure
225
+ ```m
226
+ let
227
+ Source = Sql.Database(param_ServerName, param_DatabaseName),
228
+ Result = Source{[Schema="dbo", Item="usp_GetSalesByRegion"]}[Data]({param_Region, param_StartDate, param_EndDate})
229
+ in
230
+ Result
231
+ ```
232
+
233
+ ---
234
+
235
+ ## Parameter Validation
236
+
237
+ ### Validate Before Use
238
+ ```m
239
+ let
240
+ // Validate required parameters
241
+ ValidServer = if param_ServerName = null or param_ServerName = ""
242
+ then error "Server name is required"
243
+ else param_ServerName,
244
+
245
+ ValidDatabase = if param_DatabaseName = null or param_DatabaseName = ""
246
+ then error "Database name is required"
247
+ else param_DatabaseName,
248
+
249
+ Source = Sql.Database(ValidServer, ValidDatabase)
250
+ in
251
+ Source
252
+ ```
253
+
254
+ ### Default Values
255
+ ```m
256
+ let
257
+ // Use default if parameter is empty
258
+ ServerName = if param_ServerName = null or param_ServerName = ""
259
+ then "default-server"
260
+ else param_ServerName,
261
+
262
+ StartDate = if param_StartDate = null
263
+ then Date.AddMonths(Date.From(DateTime.LocalNow()), -12)
264
+ else param_StartDate,
265
+
266
+ Source = Sql.Database(ServerName, param_DatabaseName)
267
+ in
268
+ Source
269
+ ```
270
+
271
+ ---
272
+
273
+ ## Parameter Functions
274
+
275
+ ### Create Reusable Connection Function
276
+ ```m
277
+ // Query name: fn_GetSqlConnection
278
+ (serverName as text, databaseName as text) as table =>
279
+ let
280
+ Source = Sql.Database(serverName, databaseName)
281
+ in
282
+ Source
283
+
284
+ // Usage:
285
+ let
286
+ DB = fn_GetSqlConnection(param_ServerName, param_DatabaseName),
287
+ Sales = DB{[Schema="dbo", Item="Sales"]}[Data]
288
+ in
289
+ Sales
290
+ ```
291
+
292
+ ### Parameterized Data Function
293
+ ```m
294
+ // Query name: fn_GetSalesByDateRange
295
+ (startDate as date, endDate as date) as table =>
296
+ let
297
+ Source = Sql.Database(param_ServerName, param_DatabaseName),
298
+ Sales = Source{[Schema="dbo", Item="Sales"]}[Data],
299
+ Filtered = Table.SelectRows(Sales, each
300
+ [OrderDate] >= startDate and [OrderDate] <= endDate
301
+ )
302
+ in
303
+ Filtered
304
+
305
+ // Usage:
306
+ let
307
+ Q1Sales = fn_GetSalesByDateRange(#date(2024,1,1), #date(2024,3,31)),
308
+ Q2Sales = fn_GetSalesByDateRange(#date(2024,4,1), #date(2024,6,30))
309
+ in
310
+ Table.Combine({Q1Sales, Q2Sales})
311
+ ```
312
+
313
+ ---
314
+
315
+ ## Best Practices
316
+
317
+ ### Naming Conventions
318
+ | Pattern | Example | Use |
319
+ |---------|---------|-----|
320
+ | `param_` prefix | `param_ServerName` | All parameters |
321
+ | PascalCase | `param_StartDate` | Multi-word names |
322
+ | Descriptive | `param_SalesRegion` | Clear purpose |
323
+
324
+ ### Security Considerations
325
+ 1. **Never hardcode credentials** - Use parameters or environment variables
326
+ 2. **Mark sensitive parameters** - Power Query supports sensitive parameter marking
327
+ 3. **Don't log sensitive values** - Avoid exposing tokens in error messages
328
+ 4. **Use connection strings from data gateway** when possible
329
+
330
+ ### Documentation
331
+ ```m
332
+ // Document parameter usage at top of query
333
+ // Required Parameters:
334
+ // param_ServerName: SQL Server hostname
335
+ // param_DatabaseName: Target database name
336
+ // param_StartDate: Beginning of date range (inclusive)
337
+ // param_EndDate: End of date range (inclusive)
338
+
339
+ let
340
+ Source = ...
341
+ in
342
+ Source
343
+ ```
344
+
345
+ ---
346
+
347
+ ## Related Resources
348
+
349
+ - [Connections](./connections.md)
350
+ - [Power Query Skill](../../skills/power-query/SKILL.md)