@luquimbo/bi-superpowers 3.1.1 → 4.1.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.
- package/.claude-plugin/marketplace.json +5 -3
- package/.claude-plugin/plugin.json +28 -2
- package/.claude-plugin/skill-manifest.json +22 -6
- package/.plugin/plugin.json +1 -1
- package/AGENTS.md +52 -36
- package/CHANGELOG.md +295 -0
- package/README.md +75 -26
- package/bin/build-plugin.js +17 -10
- package/bin/cli.js +278 -322
- package/bin/commands/build-desktop.js +35 -16
- package/bin/commands/diff.js +31 -13
- package/bin/commands/install.js +93 -72
- package/bin/commands/lint.js +40 -26
- package/bin/commands/mcp-setup.js +3 -10
- package/bin/commands/update-check.js +389 -0
- package/bin/lib/agents.js +19 -0
- package/bin/lib/generators/claude-plugin.js +144 -6
- package/bin/lib/generators/shared.js +29 -33
- package/bin/lib/mcp-config.js +191 -16
- package/bin/lib/skills.js +115 -27
- package/bin/postinstall.js +4 -2
- package/bin/utils/mcp-detect.js +2 -2
- package/commands/bi-start.md +218 -0
- package/commands/pbi-connect.md +43 -65
- package/commands/project-kickoff.md +393 -673
- package/commands/report-design.md +403 -0
- package/desktop-extension/manifest.json +5 -12
- package/desktop-extension/server.js +34 -25
- package/package.json +6 -10
- package/skills/bi-start/SKILL.md +220 -0
- package/skills/bi-start/scripts/update-check.js +389 -0
- package/skills/pbi-connect/SKILL.md +45 -67
- package/skills/pbi-connect/scripts/update-check.js +389 -0
- package/skills/project-kickoff/SKILL.md +395 -675
- package/skills/project-kickoff/scripts/update-check.js +389 -0
- package/skills/report-design/SKILL.md +405 -0
- package/skills/report-design/references/cli-commands.md +184 -0
- package/skills/report-design/references/cli-setup.md +101 -0
- package/skills/report-design/references/close-write-open-pattern.md +80 -0
- package/skills/report-design/references/layouts/finance.md +65 -0
- package/skills/report-design/references/layouts/generic.md +46 -0
- package/skills/report-design/references/layouts/hr.md +48 -0
- package/skills/report-design/references/layouts/marketing.md +45 -0
- package/skills/report-design/references/layouts/operations.md +44 -0
- package/skills/report-design/references/layouts/sales.md +50 -0
- package/skills/report-design/references/native-visuals.md +341 -0
- package/skills/report-design/references/pbi-desktop-installation.md +87 -0
- package/skills/report-design/references/pbir-preview-activation.md +40 -0
- package/skills/report-design/references/slicer.md +89 -0
- package/skills/report-design/references/textbox.md +101 -0
- package/skills/report-design/references/themes/BISuperpowers.json +915 -0
- package/skills/report-design/references/troubleshooting.md +135 -0
- package/skills/report-design/references/visual-types.md +78 -0
- package/skills/report-design/scripts/apply-theme.js +243 -0
- package/skills/report-design/scripts/create-visual.js +878 -0
- package/skills/report-design/scripts/ensure-pbi-cli.sh +41 -0
- package/skills/report-design/scripts/update-check.js +389 -0
- package/skills/report-design/scripts/validate-pbir.js +322 -0
- package/src/content/base.md +12 -68
- package/src/content/mcp-requirements.json +0 -25
- package/src/content/routing.md +19 -74
- package/src/content/skills/bi-start.md +191 -0
- package/src/content/skills/pbi-connect.md +22 -65
- package/src/content/skills/project-kickoff.md +372 -673
- package/src/content/skills/report-design/SKILL.md +376 -0
- package/src/content/skills/report-design/references/cli-commands.md +184 -0
- package/src/content/skills/report-design/references/cli-setup.md +101 -0
- package/src/content/skills/report-design/references/close-write-open-pattern.md +80 -0
- package/src/content/skills/report-design/references/layouts/finance.md +65 -0
- package/src/content/skills/report-design/references/layouts/generic.md +46 -0
- package/src/content/skills/report-design/references/layouts/hr.md +48 -0
- package/src/content/skills/report-design/references/layouts/marketing.md +45 -0
- package/src/content/skills/report-design/references/layouts/operations.md +44 -0
- package/src/content/skills/report-design/references/layouts/sales.md +50 -0
- package/src/content/skills/report-design/references/native-visuals.md +341 -0
- package/src/content/skills/report-design/references/pbi-desktop-installation.md +87 -0
- package/src/content/skills/report-design/references/pbir-preview-activation.md +40 -0
- package/src/content/skills/report-design/references/slicer.md +89 -0
- package/src/content/skills/report-design/references/textbox.md +101 -0
- package/src/content/skills/report-design/references/themes/BISuperpowers.json +915 -0
- package/src/content/skills/report-design/references/troubleshooting.md +135 -0
- package/src/content/skills/report-design/references/visual-types.md +78 -0
- package/src/content/skills/report-design/scripts/apply-theme.js +243 -0
- package/src/content/skills/report-design/scripts/create-visual.js +878 -0
- package/src/content/skills/report-design/scripts/ensure-pbi-cli.sh +41 -0
- package/src/content/skills/report-design/scripts/validate-pbir.js +322 -0
- package/bin/commands/add.js +0 -533
- package/bin/commands/add.test.js +0 -77
- package/bin/commands/changelog.js +0 -443
- package/bin/commands/install.test.js +0 -289
- package/bin/commands/lint.test.js +0 -103
- package/bin/commands/pull.js +0 -287
- package/bin/commands/pull.test.js +0 -36
- package/bin/commands/push.js +0 -231
- package/bin/commands/push.test.js +0 -14
- package/bin/commands/search.js +0 -344
- package/bin/commands/search.test.js +0 -115
- package/bin/commands/setup.js +0 -545
- package/bin/commands/setup.test.js +0 -46
- package/bin/commands/sync-profile.js +0 -405
- package/bin/commands/sync-profile.test.js +0 -14
- package/bin/commands/sync-source.js +0 -418
- package/bin/commands/sync-source.test.js +0 -14
- package/bin/lib/generators/claude-plugin.test.js +0 -111
- package/bin/lib/mcp-config.test.js +0 -310
- package/bin/lib/microsoft-mcp.test.js +0 -115
- package/bin/utils/errors.js +0 -159
- package/bin/utils/git.js +0 -298
- package/bin/utils/logger.js +0 -142
- package/bin/utils/mcp-detect.test.js +0 -81
- package/bin/utils/pbix.js +0 -305
- package/bin/utils/pbix.test.js +0 -37
- package/bin/utils/profiles.js +0 -312
- package/bin/utils/projects.js +0 -169
- package/bin/utils/readline.js +0 -206
- package/bin/utils/readline.test.js +0 -47
- package/bin/utils/tui.test.js +0 -127
- package/docs/openrouter-free-models.md +0 -92
- package/library/examples/README.md +0 -151
- package/library/examples/finance-reporting/README.md +0 -351
- package/library/examples/finance-reporting/data-model.md +0 -267
- package/library/examples/finance-reporting/measures.dax +0 -557
- package/library/examples/hr-analytics/README.md +0 -371
- package/library/examples/hr-analytics/data-model.md +0 -315
- package/library/examples/hr-analytics/measures.dax +0 -460
- package/library/examples/marketing-analytics/README.md +0 -37
- package/library/examples/marketing-analytics/data-model.md +0 -62
- package/library/examples/marketing-analytics/measures.dax +0 -110
- package/library/examples/retail-analytics/README.md +0 -439
- package/library/examples/retail-analytics/data-model.md +0 -288
- package/library/examples/retail-analytics/measures.dax +0 -481
- package/library/examples/supply-chain/README.md +0 -37
- package/library/examples/supply-chain/data-model.md +0 -69
- package/library/examples/supply-chain/measures.dax +0 -77
- package/library/examples/udf-library/README.md +0 -228
- package/library/examples/udf-library/functions.dax +0 -571
- package/library/snippets/dax/README.md +0 -292
- package/library/snippets/dax/business-domains.md +0 -576
- package/library/snippets/dax/calculate-patterns.md +0 -276
- package/library/snippets/dax/calculation-groups.md +0 -489
- package/library/snippets/dax/error-handling.md +0 -495
- package/library/snippets/dax/iterators-and-aggregations.md +0 -474
- package/library/snippets/dax/kpis-and-metrics.md +0 -293
- package/library/snippets/dax/rankings-and-topn.md +0 -235
- package/library/snippets/dax/security-patterns.md +0 -413
- package/library/snippets/dax/text-and-formatting.md +0 -316
- package/library/snippets/dax/time-intelligence.md +0 -196
- package/library/snippets/dax/user-defined-functions.md +0 -477
- package/library/snippets/dax/virtual-tables.md +0 -546
- package/library/snippets/excel-formulas/README.md +0 -84
- package/library/snippets/excel-formulas/aggregations.md +0 -330
- package/library/snippets/excel-formulas/dates-and-times.md +0 -361
- package/library/snippets/excel-formulas/dynamic-arrays.md +0 -314
- package/library/snippets/excel-formulas/lookups.md +0 -169
- package/library/snippets/excel-formulas/text-functions.md +0 -363
- package/library/snippets/governance/naming-conventions.md +0 -97
- package/library/snippets/governance/review-checklists.md +0 -107
- package/library/snippets/power-query/README.md +0 -389
- package/library/snippets/power-query/api-integration.md +0 -707
- package/library/snippets/power-query/connections.md +0 -434
- package/library/snippets/power-query/data-cleaning.md +0 -298
- package/library/snippets/power-query/error-handling.md +0 -526
- package/library/snippets/power-query/parameters.md +0 -350
- package/library/snippets/power-query/performance.md +0 -506
- package/library/snippets/power-query/transformations.md +0 -330
- package/library/snippets/report-design/accessibility.md +0 -78
- package/library/snippets/report-design/chart-selection.md +0 -54
- package/library/snippets/report-design/layout-patterns.md +0 -87
- package/library/templates/data-models/README.md +0 -93
- package/library/templates/data-models/finance-model.md +0 -627
- package/library/templates/data-models/retail-star-schema.md +0 -473
- package/library/templates/excel/README.md +0 -83
- package/library/templates/excel/budget-tracker.md +0 -432
- package/library/templates/excel/data-entry-form.md +0 -533
- package/library/templates/power-bi/README.md +0 -72
- package/library/templates/power-bi/finance-report.md +0 -449
- package/library/templates/power-bi/kpi-scorecard.md +0 -461
- package/library/templates/power-bi/sales-dashboard.md +0 -281
- package/library/themes/excel/README.md +0 -436
- package/library/themes/power-bi/README.md +0 -271
- package/library/themes/power-bi/accessible.json +0 -307
- package/library/themes/power-bi/bi-superpowers-default.json +0 -858
- package/library/themes/power-bi/corporate-blue.json +0 -291
- package/library/themes/power-bi/dark-mode.json +0 -291
- package/library/themes/power-bi/minimal.json +0 -292
- package/library/themes/power-bi/print-friendly.json +0 -309
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
# CALCULATE Patterns in DAX
|
|
2
|
-
|
|
3
|
-
Essential CALCULATE patterns for filtering and context modification.
|
|
4
|
-
|
|
5
|
-
## Basic Filter Patterns
|
|
6
|
-
|
|
7
|
-
### Simple Filter
|
|
8
|
-
```dax
|
|
9
|
-
Sales_HighValue =
|
|
10
|
-
CALCULATE(
|
|
11
|
-
SUM(Sales[Amount]),
|
|
12
|
-
Sales[Amount] > 1000
|
|
13
|
-
)
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
### Multiple Filters (AND logic)
|
|
17
|
-
```dax
|
|
18
|
-
Sales_HighValue_2024 =
|
|
19
|
-
CALCULATE(
|
|
20
|
-
SUM(Sales[Amount]),
|
|
21
|
-
Sales[Amount] > 1000,
|
|
22
|
-
'Date'[Year] = 2024
|
|
23
|
-
)
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Filter on Related Table
|
|
27
|
-
```dax
|
|
28
|
-
Sales_Electronics =
|
|
29
|
-
CALCULATE(
|
|
30
|
-
SUM(Sales[Amount]),
|
|
31
|
-
Products[Category] = "Electronics"
|
|
32
|
-
)
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## ALL Function Patterns
|
|
36
|
-
|
|
37
|
-
### Remove All Filters
|
|
38
|
-
```dax
|
|
39
|
-
TotalSales_All =
|
|
40
|
-
CALCULATE(
|
|
41
|
-
SUM(Sales[Amount]),
|
|
42
|
-
ALL(Sales)
|
|
43
|
-
)
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### Remove Filter from One Column
|
|
47
|
-
```dax
|
|
48
|
-
Sales_AllProducts =
|
|
49
|
-
CALCULATE(
|
|
50
|
-
SUM(Sales[Amount]),
|
|
51
|
-
ALL(Products[ProductName])
|
|
52
|
-
)
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Remove Filter but Keep Others (ALLEXCEPT)
|
|
56
|
-
```dax
|
|
57
|
-
Sales_KeepCategory =
|
|
58
|
-
CALCULATE(
|
|
59
|
-
SUM(Sales[Amount]),
|
|
60
|
-
ALLEXCEPT(Products, Products[Category])
|
|
61
|
-
)
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Percentage of Total
|
|
65
|
-
```dax
|
|
66
|
-
Pct_of_Total =
|
|
67
|
-
DIVIDE(
|
|
68
|
-
SUM(Sales[Amount]),
|
|
69
|
-
CALCULATE(
|
|
70
|
-
SUM(Sales[Amount]),
|
|
71
|
-
ALL(Sales)
|
|
72
|
-
)
|
|
73
|
-
)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Percentage of Category
|
|
77
|
-
```dax
|
|
78
|
-
Pct_of_Category =
|
|
79
|
-
DIVIDE(
|
|
80
|
-
SUM(Sales[Amount]),
|
|
81
|
-
CALCULATE(
|
|
82
|
-
SUM(Sales[Amount]),
|
|
83
|
-
ALLEXCEPT(Products, Products[Category])
|
|
84
|
-
)
|
|
85
|
-
)
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## FILTER Function Patterns
|
|
89
|
-
|
|
90
|
-
### Complex Filter Logic
|
|
91
|
-
```dax
|
|
92
|
-
Sales_TopCategories =
|
|
93
|
-
CALCULATE(
|
|
94
|
-
SUM(Sales[Amount]),
|
|
95
|
-
FILTER(
|
|
96
|
-
ALL(Products[Category]),
|
|
97
|
-
[CategorySales] > 100000
|
|
98
|
-
)
|
|
99
|
-
)
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Filter with OR Logic
|
|
103
|
-
```dax
|
|
104
|
-
Sales_SelectedRegions =
|
|
105
|
-
CALCULATE(
|
|
106
|
-
SUM(Sales[Amount]),
|
|
107
|
-
FILTER(
|
|
108
|
-
ALL(Geography[Region]),
|
|
109
|
-
Geography[Region] IN {"North", "South", "West"}
|
|
110
|
-
)
|
|
111
|
-
)
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Filter on Measure Result
|
|
115
|
-
```dax
|
|
116
|
-
Sales_ProfitableProducts =
|
|
117
|
-
CALCULATE(
|
|
118
|
-
SUM(Sales[Amount]),
|
|
119
|
-
FILTER(
|
|
120
|
-
ALL(Products[ProductName]),
|
|
121
|
-
[ProfitMargin] > 0.20
|
|
122
|
-
)
|
|
123
|
-
)
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## KEEPFILTERS Pattern
|
|
127
|
-
|
|
128
|
-
### Add Filter Without Replacing
|
|
129
|
-
```dax
|
|
130
|
-
Sales_Premium_KeepFilters =
|
|
131
|
-
CALCULATE(
|
|
132
|
-
SUM(Sales[Amount]),
|
|
133
|
-
KEEPFILTERS(Products[Tier] = "Premium")
|
|
134
|
-
)
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Intersection of Filters
|
|
138
|
-
```dax
|
|
139
|
-
Sales_Filtered_Intersection =
|
|
140
|
-
CALCULATE(
|
|
141
|
-
SUM(Sales[Amount]),
|
|
142
|
-
KEEPFILTERS(
|
|
143
|
-
FILTER(
|
|
144
|
-
ALL(Products[Category]),
|
|
145
|
-
Products[Category] IN {"Electronics", "Clothing"}
|
|
146
|
-
)
|
|
147
|
-
)
|
|
148
|
-
)
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## REMOVEFILTERS Pattern (DAX 2019+)
|
|
152
|
-
|
|
153
|
-
### Clear Specific Filters
|
|
154
|
-
```dax
|
|
155
|
-
Sales_NoProductFilter =
|
|
156
|
-
CALCULATE(
|
|
157
|
-
SUM(Sales[Amount]),
|
|
158
|
-
REMOVEFILTERS(Products)
|
|
159
|
-
)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Clear Column Filter
|
|
163
|
-
```dax
|
|
164
|
-
Sales_NoYearFilter =
|
|
165
|
-
CALCULATE(
|
|
166
|
-
SUM(Sales[Amount]),
|
|
167
|
-
REMOVEFILTERS('Date'[Year])
|
|
168
|
-
)
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## USERELATIONSHIP Pattern
|
|
172
|
-
|
|
173
|
-
### Activate Inactive Relationship
|
|
174
|
-
```dax
|
|
175
|
-
Sales_ByShipDate =
|
|
176
|
-
CALCULATE(
|
|
177
|
-
SUM(Sales[Amount]),
|
|
178
|
-
USERELATIONSHIP(Sales[ShipDate], 'Date'[Date])
|
|
179
|
-
)
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Compare Order vs Ship Date
|
|
183
|
-
```dax
|
|
184
|
-
Sales_Variance_OrderVsShip =
|
|
185
|
-
VAR _ByOrderDate = SUM(Sales[Amount])
|
|
186
|
-
VAR _ByShipDate =
|
|
187
|
-
CALCULATE(
|
|
188
|
-
SUM(Sales[Amount]),
|
|
189
|
-
USERELATIONSHIP(Sales[ShipDate], 'Date'[Date])
|
|
190
|
-
)
|
|
191
|
-
RETURN
|
|
192
|
-
_ByOrderDate - _ByShipDate
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
## CROSSFILTER Pattern
|
|
196
|
-
|
|
197
|
-
### Change Filter Direction
|
|
198
|
-
```dax
|
|
199
|
-
ProductCount_BySales =
|
|
200
|
-
CALCULATE(
|
|
201
|
-
DISTINCTCOUNT(Products[ProductID]),
|
|
202
|
-
CROSSFILTER(Sales[ProductID], Products[ProductID], BOTH)
|
|
203
|
-
)
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### Disable Relationship
|
|
207
|
-
```dax
|
|
208
|
-
Sales_IgnoreProductRelation =
|
|
209
|
-
CALCULATE(
|
|
210
|
-
SUM(Sales[Amount]),
|
|
211
|
-
CROSSFILTER(Sales[ProductID], Products[ProductID], NONE)
|
|
212
|
-
)
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## Context Transition
|
|
216
|
-
|
|
217
|
-
### Row Context to Filter Context
|
|
218
|
-
```dax
|
|
219
|
-
-- In a calculated column or iterator
|
|
220
|
-
SalesForThisProduct =
|
|
221
|
-
CALCULATE(SUM(Sales[Amount]))
|
|
222
|
-
-- Converts current row context to filter context
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### EARLIER for Nested Row Context
|
|
226
|
-
```dax
|
|
227
|
-
-- In a calculated column
|
|
228
|
-
RunningTotal =
|
|
229
|
-
CALCULATE(
|
|
230
|
-
SUM(Sales[Amount]),
|
|
231
|
-
FILTER(
|
|
232
|
-
ALL(Sales),
|
|
233
|
-
Sales[Date] <= EARLIER(Sales[Date])
|
|
234
|
-
)
|
|
235
|
-
)
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
## Virtual Tables
|
|
239
|
-
|
|
240
|
-
### CALCULATE with SUMMARIZE
|
|
241
|
-
```dax
|
|
242
|
-
Sales_TopMonths =
|
|
243
|
-
CALCULATE(
|
|
244
|
-
SUM(Sales[Amount]),
|
|
245
|
-
TOPN(
|
|
246
|
-
3,
|
|
247
|
-
SUMMARIZE(
|
|
248
|
-
Sales,
|
|
249
|
-
'Date'[MonthYear],
|
|
250
|
-
"@MonthlySales", SUM(Sales[Amount])
|
|
251
|
-
),
|
|
252
|
-
[@MonthlySales],
|
|
253
|
-
DESC
|
|
254
|
-
)
|
|
255
|
-
)
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
### CALCULATE with TREATAS
|
|
259
|
-
```dax
|
|
260
|
-
Sales_MatchingProducts =
|
|
261
|
-
CALCULATE(
|
|
262
|
-
SUM(Sales[Amount]),
|
|
263
|
-
TREATAS(
|
|
264
|
-
VALUES(BudgetProducts[ProductID]),
|
|
265
|
-
Products[ProductID]
|
|
266
|
-
)
|
|
267
|
-
)
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
## Usage Notes
|
|
271
|
-
|
|
272
|
-
- CALCULATE is the most important DAX function
|
|
273
|
-
- Always prefer simple column filters over FILTER when possible (better performance)
|
|
274
|
-
- Use FILTER for complex conditions or when filtering on measures
|
|
275
|
-
- ALL removes filters; REMOVEFILTERS is more explicit (same result)
|
|
276
|
-
- KEEPFILTERS intersects filters instead of replacing them
|