@luquimbo/bi-superpowers 3.1.1 → 3.2.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 (107) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.claude-plugin/skill-manifest.json +1 -1
  4. package/.plugin/plugin.json +1 -1
  5. package/bin/build-plugin.js +6 -6
  6. package/bin/cli.js +169 -310
  7. package/bin/commands/install.js +87 -70
  8. package/bin/lib/agents.js +19 -0
  9. package/bin/lib/mcp-config.js +23 -4
  10. package/desktop-extension/manifest.json +4 -11
  11. package/desktop-extension/server.js +34 -25
  12. package/package.json +3 -9
  13. package/skills/pbi-connect/SKILL.md +1 -1
  14. package/skills/project-kickoff/SKILL.md +1 -1
  15. package/bin/commands/add.js +0 -533
  16. package/bin/commands/add.test.js +0 -77
  17. package/bin/commands/changelog.js +0 -443
  18. package/bin/commands/pull.js +0 -287
  19. package/bin/commands/pull.test.js +0 -36
  20. package/bin/commands/push.js +0 -231
  21. package/bin/commands/push.test.js +0 -14
  22. package/bin/commands/search.js +0 -344
  23. package/bin/commands/search.test.js +0 -115
  24. package/bin/commands/setup.js +0 -545
  25. package/bin/commands/setup.test.js +0 -46
  26. package/bin/commands/sync-profile.js +0 -405
  27. package/bin/commands/sync-profile.test.js +0 -14
  28. package/bin/commands/sync-source.js +0 -418
  29. package/bin/commands/sync-source.test.js +0 -14
  30. package/bin/utils/errors.js +0 -159
  31. package/bin/utils/git.js +0 -298
  32. package/bin/utils/logger.js +0 -142
  33. package/bin/utils/pbix.js +0 -305
  34. package/bin/utils/pbix.test.js +0 -37
  35. package/bin/utils/profiles.js +0 -312
  36. package/bin/utils/projects.js +0 -169
  37. package/bin/utils/readline.js +0 -206
  38. package/bin/utils/readline.test.js +0 -47
  39. package/docs/openrouter-free-models.md +0 -92
  40. package/library/examples/README.md +0 -151
  41. package/library/examples/finance-reporting/README.md +0 -351
  42. package/library/examples/finance-reporting/data-model.md +0 -267
  43. package/library/examples/finance-reporting/measures.dax +0 -557
  44. package/library/examples/hr-analytics/README.md +0 -371
  45. package/library/examples/hr-analytics/data-model.md +0 -315
  46. package/library/examples/hr-analytics/measures.dax +0 -460
  47. package/library/examples/marketing-analytics/README.md +0 -37
  48. package/library/examples/marketing-analytics/data-model.md +0 -62
  49. package/library/examples/marketing-analytics/measures.dax +0 -110
  50. package/library/examples/retail-analytics/README.md +0 -439
  51. package/library/examples/retail-analytics/data-model.md +0 -288
  52. package/library/examples/retail-analytics/measures.dax +0 -481
  53. package/library/examples/supply-chain/README.md +0 -37
  54. package/library/examples/supply-chain/data-model.md +0 -69
  55. package/library/examples/supply-chain/measures.dax +0 -77
  56. package/library/examples/udf-library/README.md +0 -228
  57. package/library/examples/udf-library/functions.dax +0 -571
  58. package/library/snippets/dax/README.md +0 -292
  59. package/library/snippets/dax/business-domains.md +0 -576
  60. package/library/snippets/dax/calculate-patterns.md +0 -276
  61. package/library/snippets/dax/calculation-groups.md +0 -489
  62. package/library/snippets/dax/error-handling.md +0 -495
  63. package/library/snippets/dax/iterators-and-aggregations.md +0 -474
  64. package/library/snippets/dax/kpis-and-metrics.md +0 -293
  65. package/library/snippets/dax/rankings-and-topn.md +0 -235
  66. package/library/snippets/dax/security-patterns.md +0 -413
  67. package/library/snippets/dax/text-and-formatting.md +0 -316
  68. package/library/snippets/dax/time-intelligence.md +0 -196
  69. package/library/snippets/dax/user-defined-functions.md +0 -477
  70. package/library/snippets/dax/virtual-tables.md +0 -546
  71. package/library/snippets/excel-formulas/README.md +0 -84
  72. package/library/snippets/excel-formulas/aggregations.md +0 -330
  73. package/library/snippets/excel-formulas/dates-and-times.md +0 -361
  74. package/library/snippets/excel-formulas/dynamic-arrays.md +0 -314
  75. package/library/snippets/excel-formulas/lookups.md +0 -169
  76. package/library/snippets/excel-formulas/text-functions.md +0 -363
  77. package/library/snippets/governance/naming-conventions.md +0 -97
  78. package/library/snippets/governance/review-checklists.md +0 -107
  79. package/library/snippets/power-query/README.md +0 -389
  80. package/library/snippets/power-query/api-integration.md +0 -707
  81. package/library/snippets/power-query/connections.md +0 -434
  82. package/library/snippets/power-query/data-cleaning.md +0 -298
  83. package/library/snippets/power-query/error-handling.md +0 -526
  84. package/library/snippets/power-query/parameters.md +0 -350
  85. package/library/snippets/power-query/performance.md +0 -506
  86. package/library/snippets/power-query/transformations.md +0 -330
  87. package/library/snippets/report-design/accessibility.md +0 -78
  88. package/library/snippets/report-design/chart-selection.md +0 -54
  89. package/library/snippets/report-design/layout-patterns.md +0 -87
  90. package/library/templates/data-models/README.md +0 -93
  91. package/library/templates/data-models/finance-model.md +0 -627
  92. package/library/templates/data-models/retail-star-schema.md +0 -473
  93. package/library/templates/excel/README.md +0 -83
  94. package/library/templates/excel/budget-tracker.md +0 -432
  95. package/library/templates/excel/data-entry-form.md +0 -533
  96. package/library/templates/power-bi/README.md +0 -72
  97. package/library/templates/power-bi/finance-report.md +0 -449
  98. package/library/templates/power-bi/kpi-scorecard.md +0 -461
  99. package/library/templates/power-bi/sales-dashboard.md +0 -281
  100. package/library/themes/excel/README.md +0 -436
  101. package/library/themes/power-bi/README.md +0 -271
  102. package/library/themes/power-bi/accessible.json +0 -307
  103. package/library/themes/power-bi/bi-superpowers-default.json +0 -858
  104. package/library/themes/power-bi/corporate-blue.json +0 -291
  105. package/library/themes/power-bi/dark-mode.json +0 -291
  106. package/library/themes/power-bi/minimal.json +0 -292
  107. package/library/themes/power-bi/print-friendly.json +0 -309
@@ -1,350 +0,0 @@
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)