@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.
- package/.claude-plugin/plugin.json +8 -0
- package/.mcp.json +25 -0
- package/AGENTS.md +244 -0
- package/CHANGELOG.md +265 -0
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/bin/build-plugin.js +30 -0
- package/bin/cli.js +1064 -0
- package/bin/commands/add.js +533 -0
- package/bin/commands/add.test.js +77 -0
- package/bin/commands/build-desktop.js +166 -0
- package/bin/commands/changelog.js +443 -0
- package/bin/commands/diff.js +325 -0
- package/bin/commands/lint.js +419 -0
- package/bin/commands/lint.test.js +103 -0
- package/bin/commands/mcp-setup.js +246 -0
- package/bin/commands/pull.js +287 -0
- package/bin/commands/pull.test.js +36 -0
- package/bin/commands/push.js +231 -0
- package/bin/commands/push.test.js +14 -0
- package/bin/commands/search.js +344 -0
- package/bin/commands/search.test.js +115 -0
- package/bin/commands/setup.js +545 -0
- package/bin/commands/setup.test.js +46 -0
- package/bin/commands/sync-profile.js +405 -0
- package/bin/commands/sync-profile.test.js +14 -0
- package/bin/commands/sync-source.js +418 -0
- package/bin/commands/sync-source.test.js +14 -0
- package/bin/commands/watch.js +206 -0
- package/bin/lib/generators/claude-plugin.js +266 -0
- package/bin/lib/generators/claude-plugin.test.js +110 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +282 -0
- package/bin/lib/licensing/index.js +35 -0
- package/bin/lib/licensing/storage.js +364 -0
- package/bin/lib/licensing/storage.test.js +55 -0
- package/bin/lib/licensing/validator.js +213 -0
- package/bin/lib/licensing/validator.test.js +137 -0
- package/bin/lib/microsoft-mcp.js +176 -0
- package/bin/lib/microsoft-mcp.test.js +106 -0
- package/bin/lib/skills.js +84 -0
- package/bin/mcp/powerbi-modeling-launcher.js +38 -0
- package/bin/postinstall.js +44 -0
- package/bin/utils/errors.js +159 -0
- package/bin/utils/git.js +298 -0
- package/bin/utils/logger.js +142 -0
- package/bin/utils/mcp-detect.js +274 -0
- package/bin/utils/mcp-detect.test.js +105 -0
- package/bin/utils/pbix.js +305 -0
- package/bin/utils/pbix.test.js +37 -0
- package/bin/utils/profiles.js +312 -0
- package/bin/utils/projects.js +168 -0
- package/bin/utils/readline.js +206 -0
- package/bin/utils/readline.test.js +47 -0
- package/bin/utils/tui.js +314 -0
- package/bin/utils/tui.test.js +127 -0
- package/commands/contributions.md +265 -0
- package/commands/data-model-design.md +468 -0
- package/commands/dax-doctor.md +248 -0
- package/commands/fabric-scripts.md +452 -0
- package/commands/migration-assistant.md +290 -0
- package/commands/model-documenter.md +242 -0
- package/commands/pbi-connect.md +239 -0
- package/commands/project-kickoff.md +905 -0
- package/commands/report-layout.md +296 -0
- package/commands/rls-design.md +533 -0
- package/commands/theme-tweaker.md +624 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +37 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +95 -0
- package/docs/openrouter-free-models.md +92 -0
- package/library/examples/README.md +151 -0
- package/library/examples/finance-reporting/README.md +351 -0
- package/library/examples/finance-reporting/data-model.md +267 -0
- package/library/examples/finance-reporting/measures.dax +557 -0
- package/library/examples/hr-analytics/README.md +371 -0
- package/library/examples/hr-analytics/data-model.md +315 -0
- package/library/examples/hr-analytics/measures.dax +460 -0
- package/library/examples/marketing-analytics/README.md +37 -0
- package/library/examples/marketing-analytics/data-model.md +62 -0
- package/library/examples/marketing-analytics/measures.dax +110 -0
- package/library/examples/retail-analytics/README.md +439 -0
- package/library/examples/retail-analytics/data-model.md +288 -0
- package/library/examples/retail-analytics/measures.dax +481 -0
- package/library/examples/supply-chain/README.md +37 -0
- package/library/examples/supply-chain/data-model.md +69 -0
- package/library/examples/supply-chain/measures.dax +77 -0
- package/library/examples/udf-library/README.md +228 -0
- package/library/examples/udf-library/functions.dax +571 -0
- package/library/snippets/dax/README.md +292 -0
- package/library/snippets/dax/business-domains.md +576 -0
- package/library/snippets/dax/calculate-patterns.md +276 -0
- package/library/snippets/dax/calculation-groups.md +489 -0
- package/library/snippets/dax/error-handling.md +495 -0
- package/library/snippets/dax/iterators-and-aggregations.md +474 -0
- package/library/snippets/dax/kpis-and-metrics.md +293 -0
- package/library/snippets/dax/rankings-and-topn.md +235 -0
- package/library/snippets/dax/security-patterns.md +413 -0
- package/library/snippets/dax/text-and-formatting.md +316 -0
- package/library/snippets/dax/time-intelligence.md +196 -0
- package/library/snippets/dax/user-defined-functions.md +477 -0
- package/library/snippets/dax/virtual-tables.md +546 -0
- package/library/snippets/excel-formulas/README.md +84 -0
- package/library/snippets/excel-formulas/aggregations.md +330 -0
- package/library/snippets/excel-formulas/dates-and-times.md +361 -0
- package/library/snippets/excel-formulas/dynamic-arrays.md +314 -0
- package/library/snippets/excel-formulas/lookups.md +169 -0
- package/library/snippets/excel-formulas/text-functions.md +363 -0
- package/library/snippets/governance/naming-conventions.md +97 -0
- package/library/snippets/governance/review-checklists.md +107 -0
- package/library/snippets/power-query/README.md +389 -0
- package/library/snippets/power-query/api-integration.md +707 -0
- package/library/snippets/power-query/connections.md +434 -0
- package/library/snippets/power-query/data-cleaning.md +298 -0
- package/library/snippets/power-query/error-handling.md +526 -0
- package/library/snippets/power-query/parameters.md +350 -0
- package/library/snippets/power-query/performance.md +506 -0
- package/library/snippets/power-query/transformations.md +330 -0
- package/library/snippets/report-design/accessibility.md +78 -0
- package/library/snippets/report-design/chart-selection.md +54 -0
- package/library/snippets/report-design/layout-patterns.md +87 -0
- package/library/templates/data-models/README.md +93 -0
- package/library/templates/data-models/finance-model.md +627 -0
- package/library/templates/data-models/retail-star-schema.md +473 -0
- package/library/templates/excel/README.md +83 -0
- package/library/templates/excel/budget-tracker.md +432 -0
- package/library/templates/excel/data-entry-form.md +533 -0
- package/library/templates/power-bi/README.md +72 -0
- package/library/templates/power-bi/finance-report.md +449 -0
- package/library/templates/power-bi/kpi-scorecard.md +461 -0
- package/library/templates/power-bi/sales-dashboard.md +281 -0
- package/library/themes/excel/README.md +436 -0
- package/library/themes/power-bi/README.md +271 -0
- package/library/themes/power-bi/accessible.json +307 -0
- package/library/themes/power-bi/bi-superpowers-default.json +858 -0
- package/library/themes/power-bi/corporate-blue.json +291 -0
- package/library/themes/power-bi/dark-mode.json +291 -0
- package/library/themes/power-bi/minimal.json +292 -0
- package/library/themes/power-bi/print-friendly.json +309 -0
- package/package.json +93 -0
- package/skills/contributions/SKILL.md +267 -0
- package/skills/data-model-design/SKILL.md +470 -0
- package/skills/data-modeling/SKILL.md +254 -0
- package/skills/data-quality/SKILL.md +664 -0
- package/skills/dax/SKILL.md +708 -0
- package/skills/dax-doctor/SKILL.md +250 -0
- package/skills/dax-udf/SKILL.md +489 -0
- package/skills/deployment/SKILL.md +320 -0
- package/skills/excel-formulas/SKILL.md +463 -0
- package/skills/fabric-scripts/SKILL.md +454 -0
- package/skills/fast-standard/SKILL.md +509 -0
- package/skills/governance/SKILL.md +205 -0
- package/skills/migration-assistant/SKILL.md +292 -0
- package/skills/model-documenter/SKILL.md +244 -0
- package/skills/pbi-connect/SKILL.md +241 -0
- package/skills/power-query/SKILL.md +406 -0
- package/skills/project-kickoff/SKILL.md +907 -0
- package/skills/query-performance/SKILL.md +480 -0
- package/skills/report-design/SKILL.md +207 -0
- package/skills/report-layout/SKILL.md +298 -0
- package/skills/rls-design/SKILL.md +535 -0
- package/skills/semantic-model/SKILL.md +237 -0
- package/skills/testing-validation/SKILL.md +643 -0
- package/skills/theme-tweaker/SKILL.md +626 -0
- package/src/content/base.md +237 -0
- package/src/content/mcp-requirements.json +69 -0
- package/src/content/routing.md +203 -0
- package/src/content/skills/contributions.md +259 -0
- package/src/content/skills/data-model-design.md +462 -0
- package/src/content/skills/data-modeling.md +246 -0
- package/src/content/skills/data-quality.md +656 -0
- package/src/content/skills/dax-doctor.md +242 -0
- package/src/content/skills/dax-udf.md +481 -0
- package/src/content/skills/dax.md +700 -0
- package/src/content/skills/deployment.md +312 -0
- package/src/content/skills/excel-formulas.md +455 -0
- package/src/content/skills/fabric-scripts.md +446 -0
- package/src/content/skills/fast-standard.md +501 -0
- package/src/content/skills/governance.md +197 -0
- package/src/content/skills/migration-assistant.md +284 -0
- package/src/content/skills/model-documenter.md +236 -0
- package/src/content/skills/pbi-connect.md +233 -0
- package/src/content/skills/power-query.md +398 -0
- package/src/content/skills/project-kickoff.md +899 -0
- package/src/content/skills/query-performance.md +472 -0
- package/src/content/skills/report-design.md +199 -0
- package/src/content/skills/report-layout.md +290 -0
- package/src/content/skills/rls-design.md +527 -0
- package/src/content/skills/semantic-model.md +229 -0
- package/src/content/skills/testing-validation.md +635 -0
- package/src/content/skills/theme-tweaker.md +618 -0
|
@@ -0,0 +1,276 @@
|
|
|
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
|