@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,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