@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.claude-plugin/skill-manifest.json +1 -1
- package/.plugin/plugin.json +1 -1
- package/bin/build-plugin.js +6 -6
- package/bin/cli.js +169 -310
- package/bin/commands/install.js +87 -70
- package/bin/lib/agents.js +19 -0
- package/bin/lib/mcp-config.js +23 -4
- package/desktop-extension/manifest.json +4 -11
- package/desktop-extension/server.js +34 -25
- package/package.json +3 -9
- package/skills/pbi-connect/SKILL.md +1 -1
- package/skills/project-kickoff/SKILL.md +1 -1
- 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/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/utils/errors.js +0 -159
- package/bin/utils/git.js +0 -298
- package/bin/utils/logger.js +0 -142
- 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/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
|